TCP首部格式
Posted 南飞的孤雁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP首部格式相关的知识,希望对你有一定的参考价值。
1,Source Port(源端口号):
字段长16位,表示发送端端口号。
2,Destination Port(目标端口号):
字段长16位,表示接收端端口号。
3,Sequence Number(序列号):
字段长32位,表示发送数据的位置,每发送一次数据,就累加一次该数据字节数的大小。
序列号不会从0或1开始,而是在建立连接时由计算机生成的随机数作为其初始值,通过SYN包传给接收端。然后再将每次转发过去的字节数累加到初始值上表示数据的位置。此外,在建立连接和断开连接时发送的SYN包和FIN包虽然并不携带数据,但也作为一个字节增加对应的序列号。
4,Acknowledgement Number(确认应答号):
字段长32位,表示下一次应该收到的数据的序列号。实际上,是指已收到确认应答号减1为止的数据。发送端收到这个确认应答号以后可以认为在这个序列号之前的数据都已经被正常接收。
5,Data Offset(数据偏移):
字段长4位,单位为4字节。该字段表示TCP所传输的数据部分应该从TCP包的哪个位开始计算,也可以将其看作TCP首部的长度。不包括选项字段的话,上图所示的TCP首部为20字节长,因此数据偏移字段可以设置为5。反之,如果该字段的值为5,则说明从TCP包的起始位置至20字节为止都是TCP首部,余下的部分为TCP数据。
6,Reserved(保留):
字段长4位,该字段主要是为了以后扩展使用。一般设置为0,但即使收到的TCP包的该字段不为0,此包也不会被丢弃。
7,Control Flag(控制位):
字段长8位,从左至右分别为CWR、ECE、URC、ACK、PSH、RST、SYN、FIN。这些控制标志也叫做控制位。当它们对应位上的值为1时,具体含义如下:
CWR | ECE | URG | ACK | PSH | RST | SYN | FIN |
---|
- CWR(Congestion Windows Reduced):
CWR标志与ECE标志都用于IP首部的ECN字段。ECE标志为1时, 则通知对方已将拥塞窗口缩小。 - ECE(ECN-Echo):
该位为1时,会通知通信对方,从对方到这里的网络有拥塞。在收到数据包的IP首部中ECN为1时将TCP首部中的ECE设置为1。 - URG(Urgent Flag):
该位为1时,表示包中有需要紧急处理的数据。对于需要紧急处理的数据,在后面的紧急指针中再进行解释。 - ACK(Acknowledgement Flag):
该位为1时,确认应答的字段变为有效。TCP规定除了最初建立连接时的SYN包之外该位必须设置为1。 - PSH(Push Flag):
该位为1时,表示需要将收到的数据立刻传给上层应用协议。PSH为0时,则不需要立即传给上层而是先进行缓存。 - RST(Reset Flag):
该位为1时,表示TCP连接中出现异常必须强制断开连接。这种情况下,如果通信对方发送一个设置为1的RST包,就会使通信强制断开连接。 - SYN(Synchronize Flag):
该位为1时,表示希望建立连接,并在其序列号的字段进行序列号初始值的设定(Synchronized有同步的意思,意味着建立连接的双方,序列号和确认应答号要保持同步)。 - FIN(Fin Flag):
该位为1时,表示之后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换FIN位置为1的TCP包。每个主机对对方的FIN包进行确认应答后就可以断开连接。不过,主机收到FIN设置为1的TCP包以后不必马上回复一个FIN包,而是可以等到缓存区中的所有数据都因已发送成功而被自动删除之后再发。
8,Window Size(窗口大小):
字段长16位,表示从确认应答号所指位置开始能够接收的数据大小(8位字节)。TCP不允许发送超过此处所示大小的数据。不过,如果窗口大小为0,则表示可以发送窗口探测,以了解最新的窗口大小。但这个数据必须是1个字节。
9,Checksum(校验和):
TCP校验和计算的作用是判断协议首部和数据是否被破坏。TCP在计算校验和的时候使用TCP伪首部。为了使其全长为16位的整数倍,需要在数据部分的最后填充0。首先将TCP校验和字段设置为0,然后欂栌以16位为单位进行1的补码和计算,再将他们的总和的1的补码和放入校验和字段。
接收端在收到TCP数据段以后,从IP首部获取IP地址信息构造TCP伪首部,再进行校验和计算。由于校验和字段里保存着除本字段以外其他部分的和的补码值,因此如果计算校验和字段在内的所有数据的16位和以后,得出的结果是“16为全部为1”,说明所收到的数据是正确的。
10,Urgent Pointer(紧急指针):
字段长16位,只在URG控制位为1时有效。该字段的数值表示本报文段中紧急数据的指针。从数据部分的首位到紧急指针所指示的位置为止为紧急数据。因此,也可以说紧急指针指出了紧急数据的末尾在报文段中的位置。
如何处理紧急数据属于应用层的问题,一般在暂时中断通信,或中断通信的情况下使用。此外,紧急指针也用作表示数据流分段的标志。
11,Options(选项):
选项字段用于提高TCP的传输性能。因为根据数据偏移进行控制,所以其长度最大为40字节。另外,选项字段尽量调整其长度为32位的整数倍。
以上是关于TCP首部格式的主要内容,如果未能解决你的问题,请参考以下文章