TCP报文结构,如下图所示:
主要会包含12个字段,各字段说明如下:
1.源端口号(Source Port)
占用16位,指示发送方应用程序的端口号。
2.目标端口号(Destination Port)
占用16位,指示接收方应用程序的端口号。
3.序列号(Sequence Number)
占用32位,用于标识数据包的序列号。在连接建立时,用于初始化序列号,并在后续的数据包中递增。
4.确认号(Acknowledgment Number)
占用32位,指示接收方期望接收的下一个数据包的序列号,同时确认之前接收到的数据包。
5.数据偏移(Data Offset)
占用4位,指示TCP头部的长度,以32位字为单位。这个字段用来指示TCP头部的长度,因为TCP头部长度可以变化。
6.保留(Reserved)
占用6位,保留字段,必须设置为0。
7.控制位(Control Bits)
占用6位,包括以下标志位:
- URG(紧急指针有效)
- ACK(确认号有效)
- PSH(推送数据)
- RST(重置连接)
- SYN(同步序列号,用于建立连接)
- FIN(结束连接)
8.窗口大小(Window)
占用16位,表示接收方的可用缓冲区大小,用于流量控制。
9.校验和(Checksum)
占用16位,用于检测TCP头部和数据的完整性。
10.紧急指针(Urgent Pointer)
占用16位,仅当URG标志置位时有效,表示紧急数据的结束位置。
11.选项和填充(Options and Padding)
这是一个可选字段,长度可以变化,用于包含一些可选的信息,如时间戳、最大报文段长度等。
12.数据(Data)
这部分字段包含实际传输的应用层数据,其长度可以变化,取决于TCP数据包中携带的数据量。
TCP报文结构定义了如何在网络上传输数据,并提供了可靠性、流量控制和连接管理等功能。