跳到主要内容

6.1 TCP

6.1 TCP

以下各节详细描述在 TCP 中使用 ECN 的提案. 该提案在 [Floyd94] 中以基本相同的形式描述. 我们假设源 TCP 使用 Slow-start, Fast Retransmit 和 Fast Recovery [RFC2581] 的标准拥塞控制算法.

该提案在 TCP 头部的 Reserved 字段中规定两个新标志. TCP 协商 ECN-capability 的机制使用 TCP 头部中的 ECN-Echo 标志. TCP 头部 Reserved 字段中的 bit 9 被指定为 ECN-Echo 标志. TCP 头部中 6-bit Reserved 字段的位置见 RFC 793 [RFC793] 的图 4 (为完整性在此复制). 该 ECN 字段规范使 Reserved 字段保留为使用 bits 4-7 的 4-bit 字段.

为使 TCP 接收端能够确定何时停止设置 ECN-Echo 标志, 我们在 TCP 头部中引入第二个新标志, 即 CWR 标志. CWR 标志分配给 TCP 头部 Reserved 字段中的 bit 8.

     0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| | | U | A | P | R | S | F |
| Header Length | Reserved | R | C | S | S | Y | I |
| | | G | K | H | T | N | N |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

图 3: TCP 头部第 13 和第 14 字节的旧定义

     0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| | | C | E | U | A | P | R | S | F |
| Header Length | Reserved | W | C | R | C | S | S | Y | I |
| | | R | E | G | K | H | T | N | N |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

图 4: TCP 头部第 13 和第 14 字节的新定义

因此, ECN 使用 IP 头部中的 ECT 和 CE 标志 (如图 1 所示) 在路由器和连接端点之间发信号, 并使用 TCP 头部中的 ECN-Echo 和 CWR 标志 (如图 4 所示) 在 TCP 端点之间发信号. 对 TCP 连接而言, 基于 ECN 的拥塞响应的典型事件序列如下:

  • 发送端在发送的数据包中设置 ECT codepoint, 以指示传输实体的端点具备 ECN 能力.

  • ECN-capable 路由器检测到初始拥塞, 并检测到它将要丢弃的数据包中设置了 ECT codepoint. 路由器选择在 IP 头部中设置 CE codepoint 并转发该数据包, 而不是丢弃它.

  • 接收端收到设置了 CE codepoint 的数据包, 并在发送给发送端的下一个 TCP ACK 中设置 ECN-Echo 标志.

  • 发送端收到设置了 ECN-Echo 标志的 TCP ACK, 并像发生了丢包一样响应拥塞.

  • 发送端在发往接收端的下一个数据包的 TCP 头部中设置 CWR 标志, 以确认它已收到 ECN-Echo 标志并已作出响应.

TCP 传输实体对 ECN 的使用, 以及 ECN-Echo 和 CWR 标志的使用, 在以下各节中更详细地协商.