TCP的拥塞控制算法演进与比较
字数 1464 2025-11-24 15:32:24
TCP的拥塞控制算法演进与比较
1. 背景与问题描述
TCP拥塞控制的目标是避免网络过载,同时充分利用带宽。早期算法(如Tahoe、Reno)通过丢包判断拥塞,但在高带宽或高延迟网络中效率不足。后续算法(如BIC、CUBIC、BBR)尝试更精确的拥塞判断和带宽利用。本节将对比典型算法的核心思想与演进逻辑。
2. 基础算法:Tahoe与Reno
- Tahoe:包含慢启动、拥塞避免、快速重传。遇到丢包(超时或重复ACK)时,拥塞窗口(cwnd)直接重置为1,重新慢启动。缺点:激进降窗导致带宽利用率骤降。
- Reno:在Tahoe基础上增加快速恢复。收到3个重复ACK时,仅将cwnd减半,进入快速恢复阶段,避免回归慢启动。但若发生超时,仍重置cwnd=1。
3. 改进算法:NewReno与SACK
- NewReno:解决Reno在多个包丢失时的低效问题。快速恢复阶段持续直到所有丢失包被确认,避免多次减窗。
- SACK(选择性确认):通过TCP选项精确报告丢失包,减少重传冗余,与NewReno结合进一步提升多包丢失场景的性能。
4. 高带宽延迟积(BDP)网络算法:BIC与CUBIC
- BIC(二分增长拥塞控制):通过二分搜索逼近最大可用带宽。增长阶段分加性增和二分增,接近拥塞点时缓慢调整。问题:在短RTT流中过于激进,公平性不足。
- CUBIC:取代BIC成为Linux默认算法。以三次函数(\(cwnd = C \times (t - K)^3 + W_{max}\))控制窗口增长,其中\(t\)为时间,\(K\)为上次拥塞窗口降至\(W_{max}\)所需时间。特点:
- RTT公平性:窗口增长与RTT解耦,避免短RTT流垄断带宽。
- 平稳性:在拥塞点附近平滑增长,减少震荡。
5. 基于模型的算法:BBR(Bottleneck Bandwidth and RTT)
- 核心思想:不再依赖丢包作为拥塞信号,转而估计瓶颈带宽(BtlBw)和最小RTT,目标是将发送速率控制在\(BtlBw \times minRTT\)(即BDP)。
- 两阶段循环:
- Startup:指数增长直到带宽不再提升。
- Drain:排空队列后进入ProbeBW(交替增益周期)和ProbeRTT(定期探测最小RTT)。
- 优势:避免Bufferbloat(缓冲区膨胀),在高丢包网络中表现优异。
6. 算法对比总结
| 算法 | 拥塞信号 | 关键机制 | 适用场景 |
|---|---|---|---|
| Reno | 丢包/重复ACK | 快速恢复 | 普通局域网 |
| CUBIC | 丢包 | 三次函数窗口增长 | 高BDP网络(如互联网骨干) |
| BBR | 带宽/RTT估计 | 模型驱动速率控制 | 高丢包、卫星网络 |
7. 演进逻辑
从被动反应(丢包驱动) 到主动探测(模型驱动),核心矛盾是效率与公平性的权衡。未来方向可能结合机器学习动态调整参数,适应异构网络。