TCP传输中标记位含义

在 TCP(传输控制协议)中,标记位(Flags) 是 TCP 头部中的一个重要字段,用于控制连接的建立、数据传输和连接的关闭。TCP 头部中的标记位字段占用 6 位(在现代实现中通常还有额外的位用于扩展,但标准的是 6 个主要标记位)。这些标记位通过置 1 或 0 来表示不同的控制信息。


TCP 标记位详解

  1. SYN(Synchronize Sequence Numbers)

    • 含义:同步序列号,用于建立连接。
    • 作用:在 TCP 三次握手中,发起方发送 SYN 标记位为 1 的报文,表示请求建立连接并初始化序列号
    • 使用场景:三次握手的第 1 步(客户端发送 SYN)和第 2 步(服务器回复 SYN+ACK)。
  2. ACK(Acknowledgment)

    • 含义:确认,用于确认收到数据或控制报文。
    • 作用:ACK 标记位为 1 时,头部中的“确认号”(Acknowledgment Number)字段有效,表示确认收到前序数据或报文。
    • 使用场景:三次握手的第 2 步(SYN+ACK)和第 3 步(ACK),以及四次挥手中的确认报文。
  3. FIN(Finish)

    • 含义:结束,表示发送方已无数据要发送,请求关闭连接。
    • 作用:在 TCP 四次挥手中,发送 FIN 标记位为 1 的报文,表示一方完成了数据发送。
    • 使用场景:四次挥手的第 1 步和第 3 步(主动关闭方和被动关闭方分别发送 FIN)。
  4. RST(Reset)

    • 含义:重置,用于异常终止连接。
    • 作用:当出现错误(如端口未监听、连接不可达)或需要强制中断连接时,发送 RST 标记位为 1 的报文。
    • 使用场景:连接异常(如客户端连接未开放的端口)或拒绝连接时。
  5. PSH(Push)

    • 含义:推送,要求接收方尽快将数据交给应用层。
    • 作用:标记位为 1 时,指示接收端不要缓存数据,而是立即将数据推送给上层应用。
    • 使用场景:实时应用(如 Telnet)中,确保数据及时交付。
  6. URG(Urgent)

    • 含义:紧急,表示报文中包含紧急数据。
    • 作用:标记位为 1 时,头部中的“紧急指针”(Urgent Pointer)字段有效,指示紧急数据的结束位置,接收方需优先处理这些数据。
    • 使用场景:很少使用,常见于需要中断或优先处理的情况(如 SSH 的 Ctrl+C)。

TCP 头部结构中的标记位

TCP 头部的标记位位于第 13 个字节(偏移量 12),占 8 位,其中 6 位用于上述标准标记位,另外 2 位在早期是保留位,后来被扩展使用(例如 NS、CWR、ECE 用于拥塞控制,但不在基础标记位讨论范围内)。标记位的布局如下:

 0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
|URG|ACK|PSH|RST|SYN|FIN|...|...|
+---+---+---+---+---+---+---+---+

标记位在典型场景中的使用

  1. 三次握手

    • 客户端 → 服务器:SYN = 1
    • 服务器 → 客户端:SYN = 1, ACK = 1
    • 客户端 → 服务器:ACK = 1
  2. 四次挥手

    • 主动关闭方 → 被动方:FIN = 1
    • 被动方 → 主动方:ACK = 1
    • 被动方 → 主动方:FIN = 1
    • 主动方 → 被动方:ACK = 1
  3. 异常中断

    • 一方发送:RST = 1
  4. 数据传输

    • 通常设置 ACK = 1,若需立即推送数据,则附加 PSH = 1

总结

TCP 的标记位是实现其可靠性和连接管理的基础。以下是主要标记位的简要概括:

  • SYN:建立连接
  • ACK:确认接收
  • FIN:关闭连接
  • RST:重置连接
  • PSH:推送数据
  • URG:紧急数据