TCP协议数据包头部结构

计算机网络基础知识
2021-05-17 14:29 · 阅读时长4分钟
小课

TCP头部由源端口、目的端口、序号、确认号、标识位、校验和以及可选信息等部分组成,最少20个字节,最多60个字节。

TCP协议数据包头部结构

源端口目标端口,各占2个字节,结合IP协议包头部的源IP地址和目标IP地址可以确定连接的两台主机和端口。

序列号码,占4个字节,用于标识当前数据包的位置,有两种特殊情况,当SYN标志或FIN标志为1的时候。

  • 如果SYN标志为1,其值是初始序列号ISN。
  • 如果SYN标志为0,握手后的第一个数据包的值为ISN+1,后续的数据包的值为上一个数据包的序列号码+上一个数据包的数据段长度。

比如说ISN=100,那么第二个TCP数据包的序列号码为101。

  • 如果它是主动连接方,它的第二个数据包就是第三次握手,它的数据段长度为0,那么第三个TCP数据包的序列号码还是101。
  • 如果它是被动连接方,它的第二个数据包就会携带真正的数据,假设长度为200,那么第三个TCP数据包的序列号码就是101+200=301。

当本次数据包FIN标志为1时,虽然没有携带真正数据,下次数据包的序列号也是要+1,比如说断开时,主动断开方的第一次挥手时数据包序列号为100,它再次挥手时数据包序列号为101。其实SYN和FIN这两种标志为1的特殊情况,可以理解为这两个标志也算作数据长度,也就是1个字节,所以后续的一个数据包序列号码也需要+1。

确认号码,占4个字节,只有ACK标志为1时,确认号码才有效,其值是本端期望下次收到的序列号码。

数据偏移,占4bit,表示数据部分的起始位置,也可以认为是tcp头部的长度,范围是5~15,单位是4个字节,比如取值是5(二进制是1001),说明头部长度是5 * 4字节 = 20字节。

保留字段,占3bit,值是000,目前未使用,没有意义。

NS标识位(experimental),占1bit,拥塞控制随机和(ECN Nonce Sum),用于防止TCP发送者的数据包标记被意外或恶意改动。

CWR标识位,占1bit,减少拥塞窗口(Congestion Window Reduced),如果收到数据包标识位ECE为1,设置该标识位来通知对方,已接受到拥塞通知。

ECE标识位,占1bit,显式拥塞通知回应(Explicit Congestion Notification Echo),根据SYN标识位的取值不同有两种含义,SYN标识位为1时,表示发送方是否支持显式拥塞通知(ECN),SYN标识位为0时,如果在传输过程中IP数据包头部ECN标识为11且该标识为1表示网络阻塞。

URG标识位,占1bit,紧急(Urgent),表示是否是有紧急数据,如果为1,说有紧急数据,此时紧急指针字段有效。

ACK标识位,占1bit,确认(Acknowledgment),表示是否是回应数据包,如果为1,则确认号码字段有效,在握手时第一次SYN数据发送以后所有的数据包该字段都为1。

PSH标识位,占1bit,推送(Push),表示接收方是否应该尽快将这个报文段交给应用层,如果为1,则指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满。

RST标识位,占1bit,重置连接(Reset the connection),表示是否出现严重错误,如果为1,表示出现严重差错,可能需要重新创建TCP连接。还可以用于拒绝非法的报文段和拒绝连接请求。

SYN标识位,占1bit,同步序号(Synchronize sequence numbers),如果为1,表示这是连接请求或是连接接受请求。

FIN标识位,占1bit,结束(Finished),如果为1,表示发送方没有数据要传输了,要求释放连接。

窗口大小,占2个字节,表示从确认号码开始,发送方可以接收的字节数,即TCP缓冲区的可用大小,用于流量控制,窗口最大65535个字节。

校验和,占2个字节,通过对整个TCP数据包,包括TCP头部和数据部分进行计算得到,用于校验收到的TCP数据包的正确性和完整性。

紧急指针,占2个字节,只有当URG标识为1时紧急指针才有效,紧急指针指出在数据包中紧急数据共有多少个字节,紧急数据放在本报文段数据的最前面。

选项部分和填充,最多40个字节,必须为4的整数倍,不够4字节的填充0。

tcp