难以超越的 TCP AIMD

我不是为了评价各种 TCP 算法的好坏,只是阐述一个观点,即 "为什么在尽力而为的网络,很难有什么 TCP 算法在综合表现上比 AIMD 做得更好"。

在端到端原则之内,AIMD 保证了网络传输收敛,稳定,它是互联网可用性的基石,这是下限,另一方面,它可能同时规定了难以逾越的上限,AIMD 在多流任意共享场景收敛到了这样一种状态,在不损害任何一方利益的前提下,无法再使至少一方变得更好。AIMD 通过其独特的动态调整机制,天然实现了网络资源分配的帕累托最优,也可以说 AIMD 天然实现了最大最小公平。

尽力而为也存在相似相容,一方水土养一方人。在尽力而为的网络,"足够好" 就是 "最好","更好" 反而 "更差"。互联网不维护状态,AIMD 仅依赖端系统感知的二元信号(丢包 or no)就能完成控制,完美匹配 IP 网络的 "哑管道" 哲学。

AIMD 可能已达到最大最小公平性的理论上限,任何改进本质上都是在特定场景下的帕累托改进,如 BBR 牺牲能耗和公平性换取单流高吞吐。

尽力而为网络无法反馈任何可靠信息,只能基于可信事件做反应,BBR 和 ECN 是其在反方向努力的代表。BBR 采集的 delivery rate 仅作为最后一跳信息,无法描述网络状态,以此做 pacing rate 必不准确且没根据,因此需要更加具有启发式意义的 probe 算法,且 BBR 强烈依赖主机时钟的稳定性,进一步挑战并偏离了最佳能效点,而 ECN 则依赖路由器交换机的 feature,这完全无法保证。

问题的根源不是算法不够好,而在于网络的尽力而为内在属性,若要最优化性能,首先要改变网络的尽力而为本性,若不改变网络的本性,很难超越 AIMD。

有人曾经问我,多流共存,存在最优解吗?我说,存在,但你无法找到,全局意义上,AIMD 就是你能找到的最优解。 我举的另一个例子,猜硬币正反面,在没有任何信息输入时,随机就是最优解,你做得越多,结果越偏离期望,就像时间不会倒流弥补误判一样,熵只会叠加坍缩而不会抵消,任何无效的信息熵都会叠加到负向。

基于 AIMD 的 Reno/NewReno 属于第一代杰作,后续 Cubic 长期作为默认算法被广泛部署,AIMD 支撑了互联网发展的黄金时代,无数人论证 AIMD 的良性特征并解释为什么它如此高效且稳定。

但 BBR 背后的 Google 让标准化组织口风变得松动,Google 提出的 issue 及解决之道,大概率最终会成为新的标准,换句话说,优先部署抢占了论证,而世界的逻辑往往由木已成舟决定,我们无法假设我们的食管和气管没有交叉时鼻子会长在哪,但我们必须接受现在的安排。

但 BBR 讨论组 BBR Development 不活跃了,可能都去卷 AI 了吧。

TCP 各类问题的根源是网络不行,不是 AIMD 不行,换更好的 BBR 无法解决根本问题。TCP 本身具有很强的可扩展性,从不到 1Mbps 的带宽适应到 200Gbps,在 100Mbps 之下,TCP 表现很好,从 100Mbps 长肥管道到 25Gbps,TCP 被普遍诟病但却依然适应良好,过了 40Gbps,性能瓶颈转移到了主机,但这些都不是协议的问题,200Gbps + TCP Reno + TSO/LRO + GBN + BigTCP + ZeroCopy 或许真比 200Gbps + BBR + TSO/LRO + SACK 表现更优秀。

一个没被大多数人意识到的事实是,TCP 的复杂性几乎都在应对丢包,而丢包属于异常,人们花大量精力进一步复杂化异常处理,其努力早就超越了 T = α ⋅ p − r T=\alpha\cdot p^{-r} T=α⋅p−r 的约束范围(该公式定义了长肥管道问题本身),而在该公式约束范围以内,AIMD 各种变体早就定义了综合表现的上限,而这是 30 多年以前的事。

昨晚做梦又梦到做 TCP 优化,写篇短文。

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

相关推荐
临沂码农王老七34 分钟前
Composer一劳永逸的“绿色安装法”
php·composer
IT古董1 小时前
Modbus TCP 详解:工业设备通信协议与 MES 集成实战
网络·网络协议·tcp/ip
aixingpan1 小时前
aixingpan.cn API开发文档:api_docs_bichart_common2接口指南
前端·php
叼烟扛炮2 小时前
Linux 学习笔记(四十五):Web 安全基石——Cookie、Session 与 HTTPS 原理解析
linux·前端·网络·笔记·学习·tcp/ip·安全
tedcloud1232 小时前
Docker Compose 部署 Uptime Kuma:配置 HTTPS、QQ 邮箱告警与数据备份
服务器·网络协议·ui·docker·容器·https·开源
嵌入式学习菌2 小时前
HTTP/HTTPS、MQTT/MQTTS 区别
网络协议·http·https
萝卜兔0083 小时前
PIKACHU_UnsafeFileUpload
javascript·php
cyf313 小时前
第 02 篇:ARP——IP 地址到 MAC 地址的“翻译官“
tcp/ip·计算机网络·wireshark·以太网·vmware·arp·地址解析协议
OxYGC3 小时前
[工程] PHP2Shell 漏洞解析:两条 PHP 内核 RCE,为什么应用层的防护全部失效
android·开发语言·php
李纲明4 小时前
WordPress 媒体库上传失败或一直转圈:先核 PHP 上传限制与目录权限,再查安全插件与对象存储
运维·开发语言·安全·php·wordpress·媒体库·devdiy