端到端拥塞控制的本质

昨天整理了一篇 bbr 的微分方程组建模(参见 bbr 建模),算是 bbr 算法终极意义上的一个总结,最后也顺带了对 aimd 的描述,算是我最近比较满意的一篇分享了。那么接下来的问题,脱离出具体算法,上升到宏观层面,拥塞控制的本质是什么。

拥塞控制的本质就是对有效资源的自适应,这里的有效资源包括带宽但不包括 buffer。这个自适应分为两个层面,在局部意义上,要对时延负反馈做适应,在全局意义上,要做公平收敛,要说本质,就是以上这些。

用微分方程描述拥塞控制非常直观,因为它本身就是描述变化的,而拥塞控制就是要对变化做响应,变化主要指全局流量的波动,有流量加入,就出让一些资源,有流量退出,就抢占一些资源,出让多少,抢占多少,不光看能力,还要看全局,所有这一切都非常容易用微分方程描述。拥塞控制更多的意义在于适应多流,单流还不容易吗,传统 slow start or bbr startup 就够了。

我们看迄今为止具有代表性的 3 类拥塞控制算法,基于丢包的 reno/cubic,基于时延的 vegas,基于 bdp 模型的 bbr,它们无外乎都在描述 cwnd/pacing rate 的变化。

虽然 reno/cubic 的 aimd 依赖外部事件(丢包)而显得不连续,但它依然可以用连续的方程描述,只需要把丢包事件等价到丢包率即可:

d W d t = ( 1 − p ) ∗ a W − p ∗ b ∗ W \dfrac{dW}{dt}=(1-p)*\dfrac{a}{W}-p*b*W dtdW=(1−p)∗Wa−p∗b∗W

而对于 vegas,只需要盯紧时延变化,下面是我给出的一个模型,简陋,但能说明问题。设 x(t) 为发送速率,y(t) 为期望 rtt,z(t) 为实际测量 rtt,w(t) 为 cwnd,则 vegas 的行为可由下列一组方程描述:

z ( t ) = 实际实时采样 z(t)=实际实时采样 z(t)=实际实时采样
d x d t = k 1 ( z − y ) \dfrac{dx}{dt}=k_1(z-y) dtdx=k1(z−y)
d y d t = k 2 ( y − z ) \dfrac{dy}{dt}=k_2(y-z) dtdy=k2(y−z) 【实则移动指数平均】
d w d t = x ⋅ z \dfrac{dw}{dt}=x\cdot z dtdw=x⋅z

我用 sin 函数模拟采样波动,数值解法代码如下:

python 复制代码
x = np.zeros_like(times)
y = np.zeros_like(times)
z = np.zeros_like(times)
w = np.zeros_like(times)

x[0], y[0], z[0] = x0, y0, z0
t = np.arange(0.0, T, 0.1)
for n in range(1, len(times)):
    x[n] = x[n-1] + dt * (-k1*(z[n-1] - y[n-1]))
    y[n] = y[n-1] + dt * (-k3*(y[n-1] - z[n-1]))
    z[n] = 1 + 1*np.sin(2 * np.pi * t[n-1])
    w[n] = x[n]*z[n]

它长下面的样子:

可观察到这些量之间的关系,就是负反馈,阻止 rtt 变化,此消彼长。

资源限定场景,参与者多则收,参与者少则放,装进一个瓶子,晃一段时间就不再拥挤,这就是拥塞控制。

很多人都有体验,刚挤进一辆满载公交车或绿皮火车,似乎每个人都被压得喘不过气,但车子颠簸一阵子后,奇迹般宽松了,另一例,医院,景区,购物等不管排队多长,似乎最终都会得到服务。

总有人会往宽松的地方主动挪,有人挪就有人让,总有人觉得没希望而离开,但很少有人主动挤,这就是拥塞控制。端到端拥塞控制与此类似,都是没有全局上帝视角的自发自组织博弈。

自 1986 年第一次肉眼可见的大范围网络拥塞后,范雅各布森(Van Jacobson,任何 cc 都应引用他)引入拥塞控制机制后迄今诞生了越来越多的拥塞控制算法,但具有部署意义的依旧是 reno/cubic,vegas,bbr 这 3 类,其它的诸多算法大多数都上不了台面。

近几年各类 cc 如寒武纪大爆发(各顶会一年 n 多论文,n 多 cc,基本都是瞎 jb 扯淡),但多数上不了台面,主流 cc 还是老 3 样,实际部署的就是 cubic vs. bbr,vegas 都不行,别的都只能自己玩玩,内卷罢了。强调端到端却又没什么好招数获得更加详细的信息,上限到了,信息量已达极限,还折腾个啥。至于 dcn,只呵呵。

大多数都是为了升职加薪,包括 G 家。rack 早在 1994 年 vegas 论文中就展现了,然而无人问津,直到 bbr 前夕... 其实业内早就采用了。业内一般不管你实际效果,而在乎总结性只言片语,曾有位自诩资深的经理说 "拥塞控制的本质就是端到端的 qos",这就纯扯犊子了。

端到端信息量极限的根因在于 "测不准"。测不准又怎样,大数定律,中心极限定理上场啊,任何事物在足够符合它自己尺度的那个度量精度,一定有规律,这就是统计学两大定律的前提,而分组交换互联网本身就是统计复用网络,它遵循统计律。

但大多数程序员看不上统计律。可统计律才是有效的拥塞控制的核心基础,不然呢?你试试看。

艹,本来不卷,求别卷!鸡屎,经理。

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

相关推荐
忆源21 分钟前
Linux高级--2.4.2 linux TCP 系列操作函数 -- 深层理解
linux·网络·tcp/ip
手心里的白日梦1 小时前
TCP协议
服务器·网络·tcp/ip
soulteary2 小时前
使用 AI 辅助开发一个开源 IP 信息查询工具:一
人工智能·tcp/ip·开源·ip 查询
hgdlip4 小时前
电脑ip地址会变化吗?电脑ip地址如何固定
tcp/ip·电脑
hgdlip5 小时前
手机IP地址:定义、查看与切换方法
网络协议·tcp/ip·智能手机
dengjiayue8 小时前
tcp 的重传,流量控制,拥塞控制
网络协议·tcp/ip
Aileen_0v014 小时前
【AI驱动的数据结构:包装类的艺术与科学】
linux·数据结构·人工智能·笔记·网络协议·tcp/ip·whisper
花鱼白羊15 小时前
TCP Vegas拥塞控制算法——baseRtt 和 minRtt的区别
服务器·网络协议·tcp/ip
୧⍢⃝୨ LonelyCoder1 天前
FreePBX修改IP地址和端口以及添加SSL证书开启HTTPS访问
tcp/ip·https·ssl
Ven%1 天前
如何在防火墙上指定ip访问服务器上任何端口呢
linux·服务器·网络·深度学习·tcp/ip