大家好,关于深入解析:TCP协议的原理与实际应用很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
1. 紧急标志
当您再次看到图1时,相信您已经非常熟悉了。看下面的6 面彩色旗帜。您已经熟悉其中5 个。剩下最后一个URG。是的,就是图一中的那个,那个鲜红的、引人注目的位置。
图片.png
另外,还有一个字段——16 位紧急指针,它与URG标志结合使用。含义是该字段仅在设置了URG 时才有意义。因为只有一个紧急指针,这也意味着它只能识别一个字节的数据。该指针指向紧随紧急数据的最后一个字节之后的字节。
图片.png
我们知道TCP在传输数据时是顺序的。它有字节号。通过URG与紧急指针结合,我们可以找到紧急数据的字节号。紧急数据的字节数公式如下: 紧急数据字节数(urgSeq)=TCP消息序列号(seq)+紧急指针(urgpoint)- 1。 例如图中的例子,如果seq=10, urgpoint=5,则字节号urgSeq=10 + 5 -1=14。
知道字节数后,就可以计算出紧急数据字位于所有传输数据中的哪个字节。如果从第0 个字节开始计数,则紧急数据为urgSeq - ISN - 第1 个字节。 (记住ISN,它代表初始序列号),负1表示不包括第一个SYN段,因为一个SYN段消耗一个字节数。
2. 紧急数据的作用
紧急标志可用于通知对端:我放了一个紧急数据在数据流中,你看着办吧!此功能常常可以用来达到通知的目的。
一旦 TCP 知道了你要发送紧急数据,那么在接下来的数据发送中,TCP 会将所有的 TCP 报文段中的 URG 标志置位,哪怕该报文段中不包含紧急数据,这个行为会持续到紧急数据被发送出去为止。也就是接下来发送的TCP报文的URG都被置为1,直到紧急数据被发送出去TCP协议不存在真正意义上的带外数据。为了发送重要的协议,TCP提供了一种称为紧急模式(urgentmode)的机制。 TCP协议在数据段中设置URG位以指示进入紧急模式。接收您可以采取紧急模式的特殊处理。不难看出,这样数据就不容易被阻塞。您可以通过在我们的服务器端程序中捕获SIGURG信号或使用带OOB标志的recv函数来及时接收数据。
也许我们已经意识到,有时数据在某些方面变得紧急。流套接字将有大量数据等待发送到网络。在远程端点,也会有大量已接收但尚未被程序读取的数据。如果发送客户端程序由于某种原因需要取消已经写入服务器的请求,则需要紧急向服务器发送表示取消的请求。如果发送到远程服务器的取消请求失败,服务器资源将被不必要地浪费。
使用带外数据的实际程序例子就是telnet,rlogin,ftp命令。前两个程序会将中止字符作为紧急数据发送到远程端。这会允许远程端冲洗所有未处理 的输入,并且丢弃所有未发送的终端输出。这会快速中断一个向我们屏幕发送大量数据的运行进程。ftp命令使用带外数据来中断一个文件的传输。
3. 紧急数据的发出
3.1 接口:send(sockfd,"X", 1, MSG_OOB);
假设当前sockfd发送缓冲区为: Send_Buff: 1 2 3 4 5 6 7 8
调用send(sockfd,"X", 1,MSG_OOB);发送紧急数据X,则发送缓冲区为:
Send_Buff:1 2 3 4 5 6 7 8 XTcp-IP: 情况1:发送窗口大于等于9,则本次正好发送紧急数据,设置tcp包头中的URG,并设置紧急指针值为10(序列)。
案例2:
如果发送窗口小于9,那么根据流机制,X之前的字节必须先发送出去。假设窗口为6,发送第一个tcp数据包,设置URG,紧急指针值为10(seq)。数据部分为:1 2 3 4 5 6。发送第二个tcp数据包,设置URG,紧急指针值为10(seq)。数据部分为:7 8 X。当对端收到第一个TCP数据包时,检测到URG,知道自己进入了紧急状态。然而,当前seq与接收到的数据量之和小于紧急指针的值,这意味着紧急数据尚未到达。当下一个数据包到达时,确定紧急指针与前一个数据包的值相同,表明是同一个紧急指针。类似地,通过判断指针和当前接收的数据量来判断紧急数据是否到达。
假设当前紧急指针与前一个数据包的紧急指针不是相同的值,则意味着新的紧急数据到达。
总结:URG指定程序进入紧急状态,紧急数据仍然以流的形式在对端的发送缓冲区中发送出去。因此紧急数据的到达可能会延迟。
3.2 奇葩的:send(sockfd,"90X", 1,MSG_OOB);
发送缓冲区为:1 2 3 4 5 6 7 8 9 0 X
由于紧急指针只能识别一个字节的数据,因此只有X是紧急数据,90将被视为正常数据。
【深入解析:TCP协议的原理与实际应用】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
TCP协议真是一段传奇了!互联网基础如此稳固
有19位网友表示赞同!
说起网络传输,就不得不提TCP啦!它可是可靠传输的首选
有8位网友表示赞同!
对于我这种网瘾少年来说,TCP简直就是生命之源!
有10位网友表示赞同!
学习计算机网络需要好好了解TCP协议的原理哦!
有17位网友表示赞同!
TCP能够保障数据完整性和顺序性,真的太棒了!
有17位网友表示赞同!
要想在网络上畅行无阻,理解TCP是必不可少的!
有18位网友表示赞同!
有没有哪个软件工程师不崇拜TCP协议的呢?
有6位网友表示赞同!
TCP和IP一起工作,构建起我们现在这个网络世界!
有14位网友表示赞同!
还是老老实实用TCP传输数据吧,感觉稳定可靠多了。
有11位网友表示赞同!
看网速还行?别忘了TCP的功劳啊!
有15位网友表示赞同!
每次程序崩溃的时候都会想起TCP协议默默工作着...
有17位网友表示赞同!
TCP就像一个细心的邮递员,把你的数据送达目的地。
有15位网友表示赞同!
学习TCP协议可以让我更深入地了解网络传输机制!
有14位网友表示赞同!
TCP的可靠性让人心安,即使遇到网络干扰也能保证数据安全!
有17位网友表示赞同!
在未来的互联网时代,TCP依然会是不可或缺的核心协议!
有13位网友表示赞同!
有人说UDP比TCP更适合实时应用,这可真是一场理论之争啊!
有5位网友表示赞同!
TCP协议真是太经典了,它的设计思路至今仍在使用!
有20位网友表示赞同!
学习编程的话,对TCP要有所了解!
有9位网友表示赞同!
谢谢TCP让我们可以在网络世界自由地交流沟通!
有13位网友表示赞同!
简直是网络工程的神奇瑰宝!
有7位网友表示赞同!