跳到主要内容

3. 功能规范 (Functional Specification)

本章描述 TCP 的功能规范, 包括首部格式, 选项定义, 序列号管理, 连接管理, 以及数据传输机制.

3.1. 首部格式 (Header Format)

TCP 段 (TCP segment) 作为互联网数据报发送. Internet Protocol (IP) 首部携带若干信息字段, 包括源主机地址和目的主机地址. TCP 首部跟在 IP 首部之后, 提供 TCP 专用的信息.

TCP 首部结构 (TCP Header Structure)

 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 | |C|E|U|A|P|R|S|F| |
| Offset| Rsrvd |W|C|R|C|S|S|Y|I| Window |
| | |R|E|G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| [Options] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
/ Data /
/ /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

字段说明 (Field Descriptions)

Source Port: 16 bits

  • 源端口号.

Destination Port: 16 bits

  • 目的端口号.

Sequence Number: 32 bits

  • 本段中第一个数据八位组的序列号 (SYN 标志置位时除外).
  • 如果 SYN 置位, 则序列号是初始序列号 (Initial Sequence Number, ISN), 第一个数据八位组为 ISN+1.

Acknowledgment Number: 32 bits

  • 如果 ACK 控制位已置位, 此字段包含段发送方期望接收的下一个序列号的值.
  • 一旦连接建立, 此字段始终会被发送.

Data Offset: 4 bits

  • TCP 首部中的 32-bit 字数量.
  • 指示数据从何处开始.
  • TCP 首部 (即使包含选项) 的长度是 32 bits 的整数倍.

Reserved: 4 bits

  • 为未来使用保留的一组控制位.
  • 在生成的段中必须为零.
  • 如果发送主机或接收主机未实现相应的未来特性, 则接收段中的这些位必须被忽略.

Control Bits: 控制位也称为 "flags". 其分配由 IANA 通过 "TCP Header Flags" 注册表管理. 当前已分配的控制位为 CWR, ECE, URG, ACK, PSH, RST, SYN, 和 FIN.

  • CWR (Congestion Window Reduced): 1 bit

    • 参见 RFC 3168.
  • ECE (ECN-Echo): 1 bit

    • 参见 RFC 3168.
  • URG (Urgent): 1 bit

    • Urgent Pointer 字段有效.
  • ACK (Acknowledgment): 1 bit

    • Acknowledgment Number 字段有效.
  • PSH (Push): 1 bit

    • Push 功能.
  • RST (Reset): 1 bit

    • 重置连接.
  • SYN (Synchronize): 1 bit

    • 同步序列号.
  • FIN (Finish): 1 bit

    • 发送方没有更多数据.

Window: 16 bits

  • 从确认字段所指示的八位组开始, 本段发送方愿意接受的数据八位组数量.
  • 使用窗口缩放扩展时, 此值会被移位.
  • 窗口大小 MUST (MUST-1) 作为无符号数处理, 否则大窗口大小会表现为负窗口, TCP 将无法工作.

Checksum: 16 bits

  • 首部和文本中所有 16-bit 字的一补和的一补, 宽度为 16 bits.
  • TCP checksum 从不是可选项.
  • 发送方 MUST (MUST-2) 生成它, 接收方 MUST (MUST-3) 检查它.

Urgent Pointer: 16 bits

  • 以相对于本段序列号的正偏移量传达当前 urgent pointer 值.
  • urgent pointer 指向紧急数据之后那个八位组的序列号.
  • 只有在 URG 控制位置位的段中才解释此字段.

Options: Variable length

  • 选项可以占用 TCP 首部末尾的空间, 其长度为 8 bits 的倍数.
  • 所有选项都包含在 checksum 中.

注: 本章内容范围很广. 功能规范涵盖选项定义, 术语概述, 序列号管理, 连接建立, 连接关闭, 分段, 数据通信, 接口, 以及事件处理.


3.2. 强制选项 (Mandatory Options)

TCP 实现 MUST (MUST-4) 支持以下选项:

KindLengthMeaning
0-End of Option List
1-No-Operation
24Maximum Segment Size

3.3. 连接状态 (Connection States)

TCP 连接在其生命周期中会经历一系列状态:

  • CLOSED - 表示完全没有连接状态.
  • LISTEN - 等待来自任意远端 TCP 和端口的连接请求.
  • SYN-SENT - 发送连接请求后, 等待匹配的连接请求.
  • SYN-RECEIVED - 在已接收并发送连接请求后, 等待确认连接请求的确认.
  • ESTABLISHED - 表示打开的连接, 接收到的数据可以交付给用户.
  • FIN-WAIT-1 - 等待来自远端 TCP 的连接终止请求, 或等待先前发送的连接终止请求的确认.
  • FIN-WAIT-2 - 等待来自远端 TCP 的连接终止请求.
  • CLOSE-WAIT - 等待来自本地用户的连接终止请求.
  • CLOSING - 等待来自远端 TCP 的连接终止请求确认.
  • LAST-ACK - 等待先前发送给远端 TCP 的连接终止请求的确认.
  • TIME-WAIT - 等待足够时间过去, 以确保远端 TCP 已收到其连接终止请求的确认.

第 3 章涵盖的功能领域包括:

  • 选项定义和处理.
  • 序列号机制.
  • 用于连接建立的三次握手.
  • 用于连接关闭的四次握手.
  • 数据分段和重组.
  • 流量控制和拥塞控制.
  • 重传机制.
  • 用户接口规范.
  • 事件处理逻辑.