TCP协议:CWR和ECN flag总结
在TCP中,CWR(Congestion Window Reduced)和ECN(Explicit Congestion Notification)是两个与拥塞控制紧密相关的标志位:
- ECN:允许网络路由器在不丢弃数据包的情况下,向发送方和接收方显式地发出网络拥塞的信号。
- CWR:CWR标志是发送方对ECN拥塞信号的确认。当发送方收到一个带有拥塞通知的数据包时,它会设置CWR标志,表示它已经执行了拥塞控制动作(减小拥塞窗口)来缓解网络拥塞。
简而言之,ECN负责通知,CWR负责确认。它们协同工作,共同提升TCP在网络拥塞时的性能。
工作流程
1. 协商阶段
发送方:在TCP三次握手时,发送方在SYN数据包中设置ECN-Echo和CWR标志,向接收方表明自己支持ECN。
接收方:如果接收方也支持ECN,它会在SYN-ACK数据包中设置ECN-Echo标志,向发送方确认它也支持ECN。
2. 拥塞通知阶段
发送方:在数据传输过程中,发送方会将数据包的IP头部中的ECN字段设置为ECN Capable Transport(ECT),告诉路由器该数据包可以被标记为拥塞。
路由器:当路由器检测到网络队列即将满员(拥塞)时,它不会立即丢弃数据包。相反,它会将数据包的ECN字段从ECT改为Congestion Experienced(CE),然后将数据包转发给接收方。
IP协议头中有个2bit的ECN字段:
- 00 – 非ECN能力传输,非ECT
- 10 – 支持 ECN 的传输,ECT(0)
- 01 – 支持 ECN 的传输,ECT(1)
- 11 – 遇到拥塞,CE。
3. 拥塞响应阶段
接收方:当接收方收到一个ECN字段为CE的数据包时,它会知道网络发生了拥塞。在回复给发送方的ACK数据包中,接收方会在TCP头部设置ECN-Echo标志,将拥塞信息反馈给发送方。
4. 拥塞控制阶段
发送方:发送方收到带有ECN-Echo标志的ACK数据包后,就会知道网络拥塞了。这时,它会像丢包发生时一样,立即采取拥塞控制措施(拥塞窗口cwnd减小),以降低发送速率。在发送下一个数据包时,发送方会设置CWR标志,表示它已经执行了拥塞控制。
接受方:接收方收到带有CWR标志的数据包后,就知道发送方已经处理了拥塞通知,下次发送的ACK就不需要再设置ECN-Echo。