第48篇:拥塞控制,从丢包探测到带宽估计第
协议深入系列第3篇1. 拥塞控制的必要性如果TCP仅依赖rwnd做流控,接收方通告10MB窗口,发送方就往网络中注入10MB数据。这忽略了一个事实:接收方有能力收,不代表网络路径有能力承载。中间路由器的出接口带宽有限。当多个发送方同时向同一瓶颈链路注入数据,队列积压,RTT上升,最终队列溢出,包被丢弃。更严重的是,这种拥塞会自我强化——重传进一步增加负载,导致更严重的队列溢出。拥塞控制要解决的核心问题是:发送方如何在缺乏网络拓扑和负载信息的情况下,最大化链路利用率,同时避免或缓解拥塞。TCP的解决方案是让每个发送方独立探测路径容量,通过cwnd(Congestion Window)约束自身注入速率。实际发送窗口:W = min(rwnd, cwnd)rwnd由接收方通告,cwnd由发送方动态调整。本篇聚焦cwnd的演进逻辑。2. 拥塞信号拥塞控制的前提是检测拥塞。TCP传统方案依赖两类信号:丢包。当路由器队列溢出,新到达的包被丢弃。发送方通过超时(RTO)或Duplicate ACK感知丢包,推断路径可能拥塞。这是最直接的信号,但滞后明显——丢包发生时,拥塞已经发生。RTT变化