当前位置: 首页 > news >正文

难以超越的 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−rT=\alpha\cdot p^{-r}T=αpr 的约束范围(该公式定义了长肥管道问题本身),而在该公式约束范围以内,AIMD 各种变体早就定义了综合表现的上限,而这是 30 多年以前的事。

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

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

http://www.lryc.cn/news/621637.html

相关文章:

  • 在多语言大模型中保留文化细微差别:超越翻译
  • 解决Electron透明窗口点击不影响其他应用
  • ABP vNext+ WebRTC DataChannel 低延迟传感推送
  • Tokenizer(切词器)的不同实现算法
  • 代码随想录刷题Day33
  • 分库分表和sql的进阶用法总结
  • AI架构师生存手册:图解避坑MCP工具链/智能体RAG/推理蒸馏实战
  • 【LINUX网络】HTTP协议基本结构、搭建自己的HTTP简单服务器
  • 日本CN2服务器租用多少钱
  • MySQL约束知识点
  • JavaScript 逻辑运算符与实战案例:从原理到落地
  • 流处理、实时分析与RAG驱动的Python ETL框架:构建智能数据管道(上)
  • JavaScript 基础实战:DOM 操作、数据类型与常见需求实现
  • IT资讯 | VMware ESXi高危漏洞影响国内服务器
  • 从应用场景看国产化FPGA潜力,紫光同创研讨会武汉·北京站回顾
  • Linux搭建ftp服务器
  • Unity:PlayerPrefs笔记
  • Python入门第3课:Python中的条件判断与循环语句
  • 戴永红×数图:重构零售空间价值,让陈列创造效益!
  • Vue 侦听器(watch 与 watchEffect)全解析1
  • 从CAD数据访问到3D协作,HOOPS SDK如何提升PLM解决方案竞争力?
  • 机械学习---- PCA 降维深度解析
  • p5.js 3D盒子的基础用法
  • 用 Enigma Virtual Box 将 Qt 程序打包成单 exe
  • Helm 常用命令 + Bitnami 中间件部署速查表
  • 北京JAVA基础面试30天打卡10
  • JVM核心原理与实战优化指南
  • Java 调用 Python 脚本:实现 HelloWorld
  • Android 欧盟网络安全EN18031 要求对应的基本表格填写
  • 电脑上练打字用什么软件最好:10款打字软件评测