新式 AIMD 拥塞控制

本文探讨了TCP的AIMD(加性增乘性减)过程如何影响吞吐量,并通过公式展示了在20ms RTT下达到1Gbps吞吐量所需的极低丢包率。作者指出,这种对丢包的敏感性导致TCP效率低下,尤其是Reno/CUBIC等算法。提出将丢包率平均化的思路,以提高算法效率,并强调引入历史记忆来减少误判丢包对效率的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

周三晚上发了一则朋友圈,今天整理一下:
在这里插入图片描述

AIMD 过程可推导出 TCP 吞吐公式:

T = a R T T b p T=\dfrac{a}{RTT}\dfrac{b}{\sqrt{p}} T=RTTap b

a,b 分别为与 AIMD 参数和过程有关,该公式结论内置公平性。设 MSS = 1460,下面是一个合理的示例:

T = 1700 R T T × p T=\dfrac{1700}{RTT×\sqrt{p}} T=RTT×p 1700

算一下 20ms RTT(普遍情况) 要达到 1Gbps (lastmile 的普遍诉求)吞吐可容忍的丢包率 p:

1 ∗ 1024 ∗ 1024 ∗ 1024 / 8 = 1700 0.02 p 1∗1024∗1024∗1024/8=\dfrac{1700}{0.02\sqrt{p}} 1102410241024/8=0.02p 1700

p 约等于 0.0000004,这简直是奢求,对 buffer 要求太高,BDP 越大,buffer overflow 容忍所需 buffer 越大。这解释了 TCP 效率低,更甚者,Reno/CUBIC 等 AIMD 算法族遭遇丢包都会视为拥塞,即使是非拥塞噪声丢包或节点问题丢包也会算在内。

这误判着实让 AIMD TCP 效率更低。

Reno 族算法无法区分丢包类型,即便转发节点配备理论上 BDP 大小的 buffer 也无济于事。
Reno 族算法无状态,只对单独事件反应,比如收到 reordering 个 dupACK 就会 mark lost。若为算法引入历史记忆,可去除些丢包噪声:
在这里插入图片描述
既然 RTT 可移指平均,丢包率 p 亦可。既然吞吐公式来自 AIMD 过程,根据公式构造一个拥塞控制算法即合理的,这次将 p 也移指平均。

或许移指平均不够精确,但至少是个方向,剩下的就是找个足够好的降噪函数了。

这将大大提高 Reno/CUBIC 的 AIMD 效率。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值