TCP的Vegas拥塞控制算法详解
1. 算法背景与基本思想
TCP Vegas是1994年提出的拥塞控制算法,与传统的基于丢包的拥塞控制(如Reno、Cubic)不同,Vegas通过测量网络延迟变化来预测拥塞,旨在更早发现拥塞迹象并调整发送速率,从而减少丢包和排队延迟。其核心思想是:当网络开始拥塞时,数据包在缓冲区排队会导致RTT(往返时间)增加,Vegas通过监控RTT的变化来主动避免拥塞。
2. 关键指标:BaseRTT与Expected吞吐量
-
BaseRTT:
记录连接建立后测量的最小RTT值,代表无排队延迟时的网络传输延迟(即数据包在链路上的传播时间)。
例如:连续测量多个RTT,取最小值作为BaseRTT。 -
Expected吞吐量:
假设网络无拥塞时,当前拥塞窗口(cwnd)可达到的理想吞吐量:
Expected = cwnd / BaseRTT
表示理论上每秒钟可发送的数据量。
3. 实际吞吐量与延迟差(Diff)计算
-
Actual吞吐量:
通过实际发送和确认的数据量计算当前吞吐量。Vegas通常使用一个RTT周期内确认的数据量除以当前RTT:
Actual = 已确认数据量 / 当前RTT -
延迟差(Diff):
通过比较Expected和Actual的差值,估算网络中排队的数据量:
Diff = (Expected - Actual) * BaseRTT
化简后可得:Diff = cwnd * (1 - BaseRTT/当前RTT)
物理意义:Diff值代表网络中正在排队的数据包数量。若当前RTT接近BaseRTT,说明无排队,Diff≈0;若RTT增大,Diff>0,表示出现排队。
4. 拥塞判断与窗口调整
Vegas预设两个阈值α(alpha)和β(beta)(通常α=1, β=3),根据Diff值调整cwnd:
-
Diff < α:
网络负载较轻,排队数据很少,每RTT周期将cwnd加1(缓慢探索更高带宽)。 -
α ≤ Diff ≤ β:
网络处于理想状态,排队数据在可控范围内,保持cwnd不变(维持稳定)。 -
Diff > β:
检测到拥塞迹象(排队过多),每RTT周期将cwnd减1(主动降速避免丢包)。
5. 举例说明
假设BaseRTT=50ms,当前cwnd=10,当前RTT=60ms:
- 计算Diff:
Diff = 10 * (1 - 50/60) ≈ 1.67个数据包。 - 判断拥塞:
若α=1, β=3,由于1 < 1.67 < 3,进入稳定状态,cwnd不变。 - 若RTT升至70ms:
Diff = 10 * (1 - 50/70) ≈ 2.86,仍处于α≤Diff≤β,cwnd不变。 - 若RTT升至100ms:
Diff = 10 * (1 - 50/100) = 5,此时Diff>β,下一RTT将cwnd减至9。
6. 与Reno算法的对比
- Reno:依赖丢包作为拥塞信号(被动反应),易导致周期性高延迟和丢包。
- Vegas:基于延迟预测拥塞(主动避免),优势包括:
- 更低丢包率和排队延迟。
- 更公平的资源分配(对延迟敏感流友好)。
- 缺陷:
- 与Reno流竞争时可能处于劣势(Reno激进抢占带宽)。
- 无线网络中延迟波动可能误触发拥塞控制。
7. 现代应用与演进
尽管Vegas未成为TCP标准,但其思想影响深远:
- BBR算法:借鉴Vegas的延迟测量,通过建模带宽和RTT动态调整速率。
- 数据中心网络:部分自定义协议(如DCTCP)结合延迟和显式拥塞通知(ECN)优化拥塞控制。
通过以上步骤,Vegas实现了提前感知拥塞、平滑速率调整的目标,体现了“防患于未然”的拥塞控制哲学。