重新发现 TCP CUBIC 和谐之美

从一个新的视角重新欣赏 TCP CUBIC,不再将其看做 TCP NewReno/BIC 的升级迭代,会发现真正的和谐之美。
这个新的视角来自一种哲学:

  • 逼近已知时,愿渐渐放缓速度,探索未知时,敢慢慢加快脚步;

这么简单一句话,竟包含了所有,而那条三次曲线便不重要了,它只是满足这句话。

先看 TCP 固有问题,自时钟引起的 RTT 不公平性:
在这里插入图片描述

理想中的 AIMD 是尺度不变的,但现实中它由作为 RTT 函数的 TCP 自时钟驱动,破坏了尺度不变性。该问题自 1980 年代末提出(《TCP/IP 详解》中的 “长肥管道” 问题),持续到 BBR(BBR 是高 RTT 抢占性更强),只有 CUBIC 解决得完美。

CUBIC 真正满足了尺度不变性,而这是一个统计复用系统的扩展性所必须,图示如下:
在这里插入图片描述

这就是 CUBIC 优化长肥管道的核心:

  • 所有 TCP 共享同一条曲线,长肥管道,Wmax 越大,β·Wmax 越大,曲线截距越大,初始斜率越大,增窗越快;

精妙处在于,这一切自动适配尺度不变性,不需任何拟合计算,只需那句话哲学,靠近已知极限时,缓缓减速,保守分寸,远离过往边界时,慢慢加速,大胆探索,而 Wmax 就是那个已知的记忆锚点,定义了边界的位置。

至于这条曲线从何而来,将哲学翻译成数学语言:

  • 找一条先上凹( y ′ ′ > 0 y''>0 y′′>0)再下凹( y ′ ′ < 0 y''<0 y′′<0)的曲线;

这不就是 y = x 3 y=x^3 y=x3 嘛。

我在上图没有画坐标系,因为曲线的位置是根据 Wmax 算出来的,即:

W ( t ) = C ⋅ ( t − K ) 3 + W m a x W(t)=C\cdot(t-K)^3+W_{max} W(t)=C(tK)3+Wmax

令 t = 0,则 W = (1 - β)·Wmax,则:

K = β ⋅ W m a x C 3 K=\sqrt[3]{\dfrac{\beta\cdot W_{max}}{C}} K=3CβWmax

推而广之,如果做别的事甚至做人本身,也坚守 “逼近已知时渐保守,探索未知时渐激进” 的哲学,TCP CUBIC 的表现可证明 y = x 3 y=x^3 y=x3 其意义的普适:

在这里插入图片描述

说几处细节:

  • 加速 probe,得以快速获得新的锚点后执行缓慢逼近;
  • 渐缓逼近的起点速率很高,以便于快速填充网络管道;
  • 若起点很低接近锚点,回退到 TCP NewReno 以效率兜底;

说说第三点,即 TCP Friendliness。从 y = x 3 y=x^3 y=x3 曲线上看,当 x 接近锚点,曲线近乎水平,意味着不再增窗,对于 Wmax 很低的短管道而言,起始即落入此局,这与 TCP AIMD 标准预期不一致,事情从长肥管道到了另一端。

TCP Friendliness 的意思是说,如果出现这种情况,就执行标准 TCP 行为。

根据 TCP 吞吐率公式 W ∝ α ( 2 − β ) 2 β ⋅ 1 p W\propto \sqrt{\dfrac{\alpha(2-\beta)}{2\beta}\cdot\dfrac{1}{p}} W2βα(2β)p1 ,对于 α = 1 , β = 0.5 \alpha=1,\beta=0.5 α=1β=0.5 的 NewReno 而言, W ∝ 3 2 ⋅ 1 p W\propto \sqrt{\dfrac{3}{2}\cdot\dfrac{1}{p}} W23p1 ,进而导出 α = 3 ⋅ β 2 − β \alpha=\dfrac{3\cdot\beta}{2-\beta} α=2β3β,为向 NewReno 拟合,每个 RTT 增窗 α \alpha α,即:

W r e n o = ( 1 − β ) ⋅ W m a x + 3 ⋅ β 2 − β ⋅ t RTT W_{reno}=(1-\beta)\cdot W_{max}+\dfrac{3\cdot\beta}{2-\beta}\cdot\dfrac{t}{\text{RTT}} Wreno=(1β)Wmax+2β3βRTTt

完整的 CUBIC 如下:

W = { C ⋅ ( t − K ) 3 + W m a x , if  W ≥ W r e n o ( 1 − β ) ⋅ W m a x + 3 ⋅ β 2 − β ⋅ t RTT , if  W < W r e n o W=\begin{cases}C\cdot(t-K)^3+W_{max}, & \text{if } W \geq W_{reno}\\(1-\beta)\cdot W_{max}+\dfrac{3\cdot\beta}{2-\beta}\cdot\dfrac{t}{\text{RTT}},& \text{if } W<W_{reno} \end{cases} W= C(tK)3+Wmax,(1β)Wmax+2β3βRTTt,if WWrenoif W<Wreno

分段函数,看上去不美了,当然,你可以关掉 TCP Friendliness。

但另一方面,NewReno 利好短肥,短瘦网络,CUBIC 的优势则在长肥管道,CUBIC 接近锚点的 “尺度不一致” 行为算一点美中不足,让 NewReno 互补,就整齐了。

正如我前面也提到 AIMD 之美,那么,CUBIC 到底算不算 AIMD,必须算,CUBIC 仍是 AIMD 变体,只是它自适应了不同的 RTT,补充了 AIMD 自身不具备的尺度不变性的性质。

最后,CUBIC 的名字,它就是 “3 次” 的意思,但它恰恰也能看作 BIC 加上 CU,而 BIC 是 Binary Increase Congestion Control,与作为 3 次方直译的 CUBIC 在字面上没有任何关联,看似 BIC 升级,实则它自己。

老的思路请看这篇:TCP CUBIC 曲线对 BIC 折线的拟合

浙江温州皮鞋湿,下雨进水不会胖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值