ECN在tcp和ip报文中的具体实现
ECN(显式拥塞通知)机制通过在 IP 头部 和 TCP 头部 中使用特定的比特位(bit)来实现拥塞的标记与反馈。这些比特位协同工作,完成从网络设备标记拥塞,到接收方通知发送方,再到发送方响应的完整流程。
下面我们详细解释这些比特位在 IP 头和 TCP 头中的位置及其工作方式。
一、IP 头部中的 ECN 相关比特位
在 IPv4 头部的 服务类型(Type of Service, ToS) 字段(8位)中,高2位被定义为 DS Field(Differentiated Services Field),其中:
- 第7位(从0开始计数):ECT(1)(ECN-Capable Transport, 传输层支持ECN)
- 第6位:ECT(0)(ECN-Capable Transport)
这两个位组合起来表示发送方是否支持 ECN,以及网络设备是否可以对其进行拥塞标记。
ECT(0) | ECT(1) | 含义 |
---|---|---|
0 | 0 | 不支持 ECN(传统 IP 包) |
1 | 0 | 支持 ECN,可被标记(发送方声明支持) |
0 | 1 | 支持 ECN,可被标记(另一种表示方式) |
1 | 1 | CE(Congestion Experienced,网络设备标记拥塞) |
✅ 关键点:当一个支持 ECN 的数据包在网络中传输时,初始状态通常是
ECT(0)=1, ECT(1)=0
或ECT(0)=0, ECT(1)=1
,表示“我支持 ECN”。
当路由器检测到拥塞时,会将这两个位改为1,1
,即 CE(Congestion Experienced),表示“此包经历了拥塞”。
二、TCP 头部中的 ECN 相关标志位
在 TCP 头部的 标志位字段(Flags,6位)中,有两个用于 ECN 的比特:
- ECE(ECN-Echo,ECN 回显):第5位(从高位开始数)
- CWR(Congestion Window Reduced,拥塞窗口已减小):第6位
它们的工作流程如下:
三、ECN 的完整工作流程(结合 IP 和 TCP 比特位)
阶段1:连接建立(协商 ECN 支持)
- 在 TCP 三次握手时,客户端在 SYN 包中设置 IP 头的
ECT(0)=1
或ECT(1)=1
,表示支持 ECN。 - 同时,在 TCP 选项中携带 ECN 选项(如
TCP Option: ECN
)。 - 服务端在 SYN-ACK 中也设置 IP 头的 ECT 位,并回送 ECN 选项,表示也支持。
- 双方确认后,后续数据包即可使用 ECN。
阶段2:数据传输与拥塞标记
- 发送方发送数据包,IP 头设置为
ECT(0)=1, ECT(1)=0
(或反之),表示“我支持 ECN”。 - 路由器检测到队列拥塞(如 RED 算法触发),但不丢包,而是将 IP 头的 ECT 位从
(1,0)
改为(1,1)
,即 CE 标记。 - 数据包继续传送到接收方。
阶段3:接收方反馈拥塞(使用 ECE)
- 接收方收到一个 IP 头为
CE (1,1)
的数据包。 - 它知道网络发生了拥塞,于是:
- 在返回的 ACK 报文中,将 TCP 标志位的 ECE = 1,表示“我收到了拥塞标记”。
- 同时,该 ACK 报文的 IP 头仍设置为
ECT(0)=1
,表示它支持 ECN 反馈。
阶段4:发送方响应拥塞(使用 CWR)
- 发送方收到带有 ECE=1 的 ACK。
- 它立即执行拥塞控制(如将拥塞窗口减半),并:
- 在下一个发送的数据包中,将 TCP 标志位的 CWR = 1,表示“我已经响应了拥塞”。
- 此后,CWR 保持为 1,直到下一次收到 ECE 标志。
阶段5:接收方停止回显
- 接收方在收到 CWR=1 的包后,知道发送方已响应,于是后续的 ACK 中将 ECE 置 0。
- 如果再次收到 CE 标记的包,则重新置 ECE=1,循环上述过程。
四、总结:比特位协同工作流程
步骤 | 设备 | IP 头部 | TCP 标志位 | 说明 |
---|---|---|---|---|
1 | 发送方 | ECT=1 |
- | 发送支持 ECN 的数据包 |
2 | 路由器 | ECT → CE |
- | 检测拥塞,将包标记为 CE |
3 | 接收方 | ECT=1 |
ECE=1 |
收到 CE 包,在 ACK 中设置 ECE |
4 | 发送方 | - | CWR=1 |
收到 ECE,降低窗口,设置 CWR |
5 | 接收方 | - | ECE=0 |
收到 CWR,停止设置 ECE |
五、补充说明
- ECN 要求 端到端支持:发送方、接收方、中间网络设备(路由器、交换机)都必须支持并启用 ECN。
- ECN 是 可选机制,通过 TCP 选项协商启用。
- ECN 特别适用于 高带宽、高延迟网络(如数据中心、长距链路),能显著减少因丢包导致的性能下降。
✅ 总结:
ECN 通过 IP 头的 ECT/CE 位 实现网络设备对拥塞的显式标记,通过 TCP 头的 ECE 和 CWR 位 实现接收方到发送方的拥塞反馈和响应确认。这三个比特位协同工作,实现了“不丢包的拥塞通知”,是现代 TCP 高效传输的重要支撑。