TCP 的报文头部结构
TCP(传输控制协议)的报文头部结构包含了各种控制信息,用于确保数据的可靠传输和正确组装。TCP 报文头部的基本结构如下:
TCP 报文头部结构
-
源端口(Source Port):16 位
- 发送方的端口号。
-
目的端口(Destination Port):16 位
- 接收方的端口号。
-
序列号(Sequence Number):32 位
- 用于标识数据的顺序。第一个字节的序列号用于确认数据的顺序。
-
确认号(Acknowledgment Number):32 位
- 表示期望接收到的下一个字节的序列号,用于确认收到的数据。
-
数据偏移(Data Offset):4 位
- 也称为头部长度字段,表示 TCP 报文头部的长度,以 4 字节为单位。它指示从 TCP 报文的开始到数据部分的开始的字节数。
-
保留(Reserved):3 位
- 预留用于将来的使用,当前设置为 0。
-
控制位(Flags):9 位
- 由 6 个标志位组成,用于控制 TCP 连接的状态:
- URG(紧急指针有效):1 位
- ACK(确认号有效):1 位
- PSH(推送):1 位
- RST(重置连接):1 位
- SYN(同步序列号):1 位
- FIN(结束数据传输):1 位
- 由 6 个标志位组成,用于控制 TCP 连接的状态:
-
窗口大小(Window Size):16 位
- 表示接收方能够接受的最大字节数,用于流量控制。
-
校验和(Checksum):16 位
- 用于检查 TCP 报文在传输过程中是否出现错误。
-
紧急指针(Urgent Pointer):16 位
- 当 URG 标志位被设置时,紧急指针指示紧急数据的最后一个字节的位置。
-
选项(Options):可变长度
- 该字段用于扩展 TCP 协议的功能,如最大报文段长度(MSS)、窗口扩大因子等。选项的长度是可变的,取决于实际需要。
-
填充(Padding):可变长度
- 为了确保 TCP 报文头部的长度是 32 位的整数倍,可能会填充一些额外的字节。
-
数据(Data):可变长度
- 实际传输的数据部分,长度由数据偏移字段指示。
TCP 报文头部示例
| 字段 | 位数 | 描述 |
|---|---|---|
| Source Port | 16 bits | 发送方的端口号 |
| Destination Port | 16 bits | 接收方的端口号 |
| Sequence Number | 32 bits | 数据的序列号 |
| Acknowledgment Number | 32 bits | 确认号 |
| Data Offset | 4 bits | 头部长度(以 4 字节为单位) |
| Reserved | 3 bits | 保留字段(当前为 0) |
| Flags | 9 bits | 控制位(URG, ACK, PSH, RST, SYN, FIN) |
| Window Size | 16 bits | 接收方窗口大小 |
| Checksum | 16 bits | 校验和 |
| Urgent Pointer | 16 bits | 紧急指针(当 URG 标志位被设置时有效) |
| Options | 可变长度 | 可选字段 |
| Padding | 可变长度 | 填充字节 |
| Data | 可变长度 | 实际传输的数据部分 |
总结
TCP 报文头部包含了许多重要的字段,用于保证数据的可靠传输和正确排序。通过这些字段,TCP 能够实现流量控制、错误检测和数据重组等功能。