TCP 的报文头部结构

TCP(传输控制协议)的报文头部结构包含了各种控制信息,用于确保数据的可靠传输和正确组装。TCP 报文头部的基本结构如下:

TCP 报文头部结构

  1. 源端口(Source Port):16 位

    • 发送方的端口号。
  2. 目的端口(Destination Port):16 位

    • 接收方的端口号。
  3. 序列号(Sequence Number):32 位

    • 用于标识数据的顺序。第一个字节的序列号用于确认数据的顺序。
  4. 确认号(Acknowledgment Number):32 位

    • 表示期望接收到的下一个字节的序列号,用于确认收到的数据。
  5. 数据偏移(Data Offset):4 位

    • 也称为头部长度字段,表示 TCP 报文头部的长度,以 4 字节为单位。它指示从 TCP 报文的开始到数据部分的开始的字节数。
  6. 保留(Reserved):3 位

    • 预留用于将来的使用,当前设置为 0。
  7. 控制位(Flags):9 位

    • 由 6 个标志位组成,用于控制 TCP 连接的状态:
      • URG(紧急指针有效):1 位
      • ACK(确认号有效):1 位
      • PSH(推送):1 位
      • RST(重置连接):1 位
      • SYN(同步序列号):1 位
      • FIN(结束数据传输):1 位
  8. 窗口大小(Window Size):16 位

    • 表示接收方能够接受的最大字节数,用于流量控制。
  9. 校验和(Checksum):16 位

    • 用于检查 TCP 报文在传输过程中是否出现错误。
  10. 紧急指针(Urgent Pointer):16 位

    • 当 URG 标志位被设置时,紧急指针指示紧急数据的最后一个字节的位置。
  11. 选项(Options):可变长度

    • 该字段用于扩展 TCP 协议的功能,如最大报文段长度(MSS)、窗口扩大因子等。选项的长度是可变的,取决于实际需要。
  12. 填充(Padding):可变长度

    • 为了确保 TCP 报文头部的长度是 32 位的整数倍,可能会填充一些额外的字节。
  13. 数据(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 能够实现流量控制、错误检测和数据重组等功能。