来源:go-interview / Network

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 Port16 bits发送方的端口号
Destination Port16 bits接收方的端口号
Sequence Number32 bits数据的序列号
Acknowledgment Number32 bits确认号
Data Offset4 bits头部长度(以 4 字节为单位)
Reserved3 bits保留字段(当前为 0)
Flags9 bits控制位(URG, ACK, PSH, RST, SYN, FIN)
Window Size16 bits接收方窗口大小
Checksum16 bits校验和
Urgent Pointer16 bits紧急指针(当 URG 标志位被设置时有效)
Options可变长度可选字段
Padding可变长度填充字节
Data可变长度实际传输的数据部分

总结

TCP 报文头部包含了许多重要的字段,用于保证数据的可靠传输和正确排序。通过这些字段,TCP 能够实现流量控制、错误检测和数据重组等功能。