流量控制是端到端的问题:防止发送方发送过快、撑爆接收方的接收缓冲区,依据是接收方通过窗口字段通告的 rwnd。拥塞控制是网络全局问题:防止过多数据注入网络导致路由器排队丢包,依据是发送方自己维护的拥塞窗口 cwnd。实际发送窗口 = min(rwnd, cwnd)。
拥塞控制的经典算法阶段:
- 慢启动:cwnd 从初始值(常为 10 个 MSS)起每 RTT 翻倍,指数增长至慢启动阈值 ssthresh。
- 拥塞避免:超过阈值后每 RTT 只加 1 个 MSS,线性增长。
- 快速重传:收到 3 个重复 ACK 立即重发丢失段,不等超时。
- 快速恢复(Reno):快速重传后将 ssthresh 减半、cwnd 降到新阈值继续线性增长;而 Tahoe 版本直接回慢启动。
易错点:超时与重复 ACK 的处理不同——超时被视为严重拥塞(cwnd 重置为 1,回慢启动),重复 ACK 只减半。
追问方向:CUBIC、BBR 等现代算法思路;BBR 基于带宽和 RTT 建模而非丢包信号。