乐闻世界logo
搜索文章和话题

TCP 首部包含哪些字段?各字段的作用是什么?

2月21日 17:07

TCP 首部结构详解

TCP 首部是 TCP 协议的核心部分,包含了控制 TCP 连接和数据传输的关键信息。

TCP 首部字段

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

  • 作用:标识发送方的端口号
  • 范围:0-65535
  • 示例:HTTP 客户端使用随机端口,服务器使用 80 端口

2. 目的端口(Destination Port,16 位)

  • 作用:标识接收方的端口号
  • 范围:0-65535
  • 示例:HTTP 服务器监听 80 端口

3. 序列号(Sequence Number,32 位)

  • 作用:标识数据在流中的位置
  • 特点:每个字节都有序列号,序列号是字节的偏移量
  • 初始值:连接建立时随机生成
  • 作用:确保数据按序到达,检测丢失数据包

4. 确认号(Acknowledgment Number,32 位)

  • 作用:期望收到的下一个字节的序列号
  • 条件:只有 ACK 标志位为 1 时才有效
  • 特点:累积确认,确认号之前的所有字节都已收到

5. 数据偏移(Data Offset,4 位)

  • 作用:指示 TCP 首部的长度(以 32 位字为单位)
  • 范围:5-15,对应 20-60 字节
  • 计算:首部长度 = 数据偏移 × 4 字节

6. 保留(Reserved,6 位)

  • 作用:保留供将来使用
  • :必须设置为 0

7. 标志位(Flags,6 位)

  • URG(Urgent):紧急指针有效
  • ACK(Acknowledgment):确认号有效
  • PSH(Push):接收方应尽快将数据交付应用层
  • RST(Reset):重置连接
  • SYN(Synchronize):同步序列号,用于建立连接
  • FIN(Finish):发送方完成数据发送,用于关闭连接

8. 窗口大小(Window Size,16 位)

  • 作用:通告接收方的可用缓冲区大小
  • 单位:字节
  • 作用:流量控制,防止发送过快导致缓冲区溢出

9. 校验和(Checksum,16 位)

  • 作用:检测首部和数据在传输过程中的错误
  • 计算范围:TCP 首部、数据和伪首部
  • 伪首部:包含源 IP、目的 IP、协议号、TCP 长度

10. 紧急指针(Urgent Pointer,16 位)

  • 作用:指向紧急数据的最后一个字节
  • 条件:只有 URG 标志位为 1 时才有效
  • 用途:用于紧急数据传输

11. 选项(Options,可变长度)

  • 作用:提供额外的功能
  • 常见选项
    • MSS(最大报文段大小)
    • 窗口扩大因子
    • 时间戳
    • SACK(选择性确认)

首部结构图

shell
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port | Destination Port | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Acknowledgment Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | |U|A|P|R|S|F| | | Offset| Reserved |R|C|S|S|Y|I| Window | | | |G|K|H|T|N|N| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | Urgent Pointer | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

相关问题

  • TCP 首部最小和最大长度是多少?
  • 为什么需要伪首部计算校验和?
  • 窗口扩大因子有什么作用?
标签:TCP