目录
TCP报头结构概览
TCP报头通常为20字节(不含选项字段),最大可扩展至60字节。其结构如下:
-
源端口(Source Port) - 16位
-
目的端口(Destination Port) - 16位
-
序列号(Sequence Number) - 32位
-
确认号(Acknowledgment Number) - 32位
-
数据偏移(Data Offset) - 4位
-
保留(Reserved) - 4位(原设计保留,部分位被后续RFC扩展使用)
-
控制标志(Control Flags) - 8位(含6个传统标志位及扩展标志)
-
窗口大小(Window Size) - 16位
-
校验和(Checksum) - 16位
-
紧急指针(Urgent Pointer) - 16位
-
选项(Options) - 可变长度(可选)
-
填充(Padding) - 确保报头长度为32位整数倍
各字段详解
1. 源端口与目的端口(各16位)
-
作用:标识发送端和接收端的应用程序端口号(如HTTP:80、SSH:22),实现多路复用/解复用。
-
示例:客户端源端口为随机端口(如50000),目的端口为80表示访问Web服务。
2. 序列号(32位)
-
作用:标识数据段的第一个字节的序号,确保数据按序重组。在连接建立时,双方随机生成初始序列号(ISN)。
-
示例:若序列号为100,数据长度为100字节,则下一段的序列号为200。
3. 确认号(32位)
-
作用:接收方期望收到的下一个字节的序号,用于确认数据已成功接收。仅在
ACK
标志置1时有效。 -
示例:若确认号为300,表示已正确接收序号299及之前的数据。
4. 数据偏移(4位)
-
作用:指示TCP报头的长度(以4字节为单位)。取值范围为5(20字节)至15(60字节)。
-
计算:报头长度 = 数据偏移值 × 4。
5. 保留字段(4位)
-
作用:原设计保留为0,后续RFC扩展用于新功能(如显式拥塞通知ECN)。
6. 控制标志(8位)
-
作用:管理连接状态和数据传输行为,包括以下标志位:
-
URG(紧急):紧急指针有效,指示优先处理数据。
-
ACK(确认):确认号字段有效。
-
PSH(推送):要求接收方立即将数据提交给应用层。
-
RST(重置):强制终止异常连接。
-
SYN(同步):发起连接,同步序列号。
-
FIN(结束):正常关闭连接。
-
CWR/ECE(扩展):用于显式拥塞通知(RFC 3168)。
-
7. 窗口大小(16位)
-
作用:接收方通告当前可接收的字节数,用于流量控制。可通过窗口缩放选项(RFC 7323)扩展为32位。
8. 校验和(16位)
-
作用:校验TCP报头、数据及伪头部(含IP地址)的完整性,检测传输错误。
9. 紧急指针(16位)
-
作用:当
URG=1
时,指示紧急数据的结束位置(相对于序列号的偏移量)。
10. 选项(可变长度)
-
作用:扩展TCP功能,常见选项包括:
-
MSS(最大报文段长度):协商双方能接受的最大数据段大小。
-
窗口缩放因子:将窗口大小扩展至32位。
-
时间戳:计算往返时间(RTT)和防止序号回绕(PAWS)。
-
SACK(选择性确认):高效确认非连续数据块。
-
11. 填充(可变长度)
-
作用:确保选项字段的总长度是4字节的倍数,补齐报头长度。
示例:TCP三次握手
-
SYN:客户端发送
SYN=1, Seq=X
。 -
SYN-ACK:服务端回复
SYN=1, ACK=1, Seq=Y, Ack=X+1
。 -
ACK:客户端确认
ACK=1, Ack=Y+1
,连接建立。
总结
TCP报头通过精细设计的字段协同工作,实现了可靠传输、流量控制、拥塞控制及连接管理。理解各字段的作用是掌握TCP协议运作机制的基础,尤其在网络调试和优化中至关重要。