AIMD 为什么收敛(tcp reno/cubic 为什么好)
TCP 拥塞控制目标是缓解并解除网络拥塞,让所有流量公平共享带宽,合在一起就是公平收敛。
AIMD(几乎所有与拥塞控制相关的协议或算法都有 AIMD 的影子,包括 RoCE,BBRv2) 为什么收敛?我一般会给出下面的老图:
虽然只展示了两条流的收敛,但 n 条流收敛的展示无非就是将 2 维坐标系换成 n 维坐标系,只要能证明任意的 2 维截面都如上图所示就行,而这件事简单推导一下就行,比画坐标系还要直观,再说超过 3 维的坐标系也画不出来。
设一个 AIMD 系统的 AIMD 参数为 α \alpha α, β \beta β, w i 0 w_{i0} wi0 和 w j 0 w_{j0} wj0 分别为任意两条流的初始窗口,且 w i 0 > w j 0 w_{i0}>w_{j0} wi0>wj0,二者之差 d 0 = W i 0 − W j 0 d_0=W_{i0}-W_{j0} d0=Wi0−Wj0。
假设所有流同步(异步流和 RED 作用下相对复杂,用统计分布代替公式),一个 AIMD 周期后,两条流的 cwnd 分别为 w i 0 = w i = β ∗ ( w i 0 + α ) w_{i0}=w_i= \beta*(w_{i0}+\alpha) wi0=wi=β∗(wi0+α) 和 w j 0 = w j = β ∗ ( w j 0 + α ) w_{j0}=w_j= \beta*(w_{j0}+\alpha) wj0=wj=β∗(wj0+α),此时两条流 cwnd 之差 d = β ∗ d 0 d=\beta*d_0 d=β∗d0。
再下一个周期, w i 0 = w i = β ∗ ( β ∗ ( w i 0 + α ) + α ) w_{i0}=w_i= \beta*(\beta*(w_{i0}+\alpha)+\alpha) wi0=wi=β∗(β∗(wi0+α)+α) 和 w j 0 = w j = β ∗ ( β ∗ ( w j 0 + α ) + α ) w_{j0}=w_j= \beta*(\beta*(w_{j0}+\alpha)+\alpha) wj0=wj=β∗(β∗(wj0+α)+α),两条流 cwnd 之差 d = β 2 ∗ d 0 d=\beta^2*d_0 d=β2∗d0。
容易得到,在第 n 个 AIMD 周期后,两条流 cwnd 之差为 d = β n d 0 d=\beta^nd_0 d=βnd0,趋向于 0,这意味着无论初始时刻任意两条流差异多么大,最终它们将趋同。
值得注意的是,无论是 AI 过程还是 MD 过程,都单独对收敛有贡献,假设持续 AI,从不 MD,观察一个比值 w i 0 + x w j 0 + x \dfrac{w_{i0}+x}{w_{j0}+x} wj0+xwi0+x, x 越大,比值越趋向于 1,在总体量面前,差异将无关紧要,另一方面,假设持续 MD,从不 AI,观察一个差值 β x ∗ w i 0 − β x ∗ w j 0 \beta^x*w_{i0}-\beta^x*w_{j0} βx∗wi0−βx∗wj0, x 越大,该差值趋向于 0,宏观上看,差异消失。
总体而言,AI 的过程与初始值无关,它是一种与初始优势相反的力量,保持差值不变,比例趋向公平,削减掉相对差异,而 MD 则与初始值强相关,但它下降的速率越来越慢,保持差值趋向公平,比例不变,削减掉绝对差异。AIMD 共同作用,各自效用独立积累,无论在比例差异还是在绝对差异均被时间抹平。
举个例子,A 有 1 块钱,B 有 9 块钱,两人很公平,因为购买力有绝对值下限,虽然 A 和 B 相差 9 倍,但他们可能都买不到东西,但 A 有 100 万块,B 有 900 万块,就不再公平了,此时 9 倍的差异关乎他们生活在不同层次,如果 A 有 1 亿零 100 块,B 有 1 亿零 900 块,又会非常公平。
大概社会平均工资,普调,年终奖,股权被稀释,工资被倒挂,就和 AIMD,AIAD,MIMD,MIAD 有关。用上述的简单推导可以证明,除了 AIMD 可以收敛到公平,其它 3 种均不行。
AIMD-based cc,比如 reno,cubic,scalable,highspeed,它们被认为不如 BBR,但事后看,这些算法并不是在根本上不如 BBR,而 BBR 也不是根本上就优秀,前面说过,BBR 的高效来自于瞬时记住并憋住的 maxbw,而 cubic(包括其它 AIMD cc) 的问题在于它不能识别随机丢包。而 AIMD 本身与效率无关,它只关注公平收敛。
cubic 只要增加丢包分类识别就能解决问题, 而 BBR 无论 probebw 还是 probertt 均无法完备论证收敛,只在 “效果” 上显示出 “加速比与带宽占比负相关”,而这是过不了审的。
已经有了很多 “cubic-改” 算法,大多数引入了 delay 甚至 delay 梯度,在丢包发生时二次确认拥塞是否真实存在,事实上 westwood 就是一种比较合理的算法,它收敛到瓶颈带宽,而不是固定比例。然而由于实现粗糙(依然是受制于 Linux 拥塞状态机),westwood 未竟全功。
还有另一种拥塞判定方法,二次机会法,事先为 AIMD 准备两个 beta 参数,当检测到丢包时,随即将 cwnd 下降一个更小的 beta 比例,进入包守恒开始重传恢复,如果重传率超过一个阈值,则将 cwnd 下降更大的 beta,视情况从两个 MD 中任意一个开始进行 AI:
避开的只是随机丢包,丝毫不影响拥塞丢包后的收敛。
非常简单,不需要像 westwood 还要计算瓶颈带宽,代价就是误判会增加重传率,好在只有二次机会,只会增加一点点,不像 BBR 憋住 10 round 那样执着。
公平收敛,抓住一个小基本点就行了,这是控制平面的底座,其它的,留给应用自己以及底层链路,就好像线路断了,再好的算法也无济于事,另一方面,application-limited 传输,再好的算法也用不上,但无论如何,公平是刚需。
其实菜市场摊贩就遵循 AIMD 以避开相互内耗的价格战,最终你会发现各个摊贩的菜价都一样,差别只是质量口碑而已。菜市场刚开张时,各家促销,缓慢加价,最终发现客户流失时,又大减价(注意这个 “大” 字),大促销,最终他们的价格趋向于一致。当然,TCP 这方面属于后生,但 AIMD 是一个放之四海而皆准的通用控制论模型,在它的框架下做事就对了,但凡违背的,事情将会越发精细,复杂。
浙江温州皮鞋湿,下雨进水不会胖。
相关文章:

AIMD 为什么收敛(tcp reno/cubic 为什么好)
TCP 拥塞控制目标是缓解并解除网络拥塞,让所有流量公平共享带宽,合在一起就是公平收敛。 AIMD(几乎所有与拥塞控制相关的协议或算法都有 AIMD 的影子,包括 RoCE,BBRv2) 为什么收敛?我一般会给出下面的老图:…...

医院智能导诊系统,医院导航解决方案
随着现代医院规模不断扩大,功能区域越来越细化,面对复杂的楼宇结构,集中的就诊人流,患者在就诊中经常会面临找不到目的地的困境,就诊体验变差。针对这个问题,一些面积和规模都比较大的医院,已经…...

【论文复现】基于区块链的分布式光伏就地消纳交易模式研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

在滴滴和字节跳动划水4年,过于真实了...
先简单交代一下吧,沅哥是某不知名211的本硕,18年毕业加入滴滴,之后跳槽到了头条,一直从事测试开发相关的工作。之前没有实习经历,算是四年半的工作经验吧。 这四年半之间他完成了一次晋升,换了一家公司&am…...

tensorflow GPU训练环境布置
tensorflow GPU训练环境布置 一、显卡驱动安装1.1 如何处理**Failed to initialize NVML: Driver/library version mismatch的问题**1.2 卸载旧的版本1.3 驱动安装 1.3.1 利用apt 安装1.3.2 手动安装 二、安装CUDA2.1 确定CUDA版本2.2 下载文件1. 找匹配版本2. 选合适的平台 2…...
理解和使用Java中的枚举
枚举是一种特殊的数据类型,用于定义一组具名的常量。Java中的枚举类型可以包含多个枚举常量,每个常量都具有唯一的名称和值。本文将详细介绍Java中的枚举,包括为什么要使用枚举、枚举的好处、如何定义和使用枚举等。 为什么要使用枚举&#…...
C++和Java:哪种语言更适合你
C和Java:哪种语言更适合你 一、引言1 背景介绍2 问题阐述3 目的和意义 二、C与Java的介绍1 C的特点和优缺点2 Java的特点和优缺点3 两种语言的比较4 选择C的理由4.1 适合底层开发的特点4.2高效的编译器和运行速度4.3 自由且灵活的语言风格4.4 良好的内存管理能力 5 …...

FE_Vue学习笔记 框架的执行流程详解
1 分析脚手架结构 (1)CLI就是 command line interface 的缩写。Vue CLI官网:Vue CLI (2)安装过程: (PS: 提前安装过node.js了,没有安装的可以打开这个:Downl…...
KingbaseES V8R6 等待事件之LWLock Buffer_IO
等待事件含义 当进程同时尝试访问相同页面时,等待其他进程完成其输入/输出(I/O)操作时,会发生LWLock:BufferIO等待事件。其目的是将同一页读取到共享缓冲区中。 每个共享缓冲区都有一个与LWLock:BufferIO等待事件相关联的I/O锁,每次都必须在共…...

桂院导航小程序 静态项目 二次开发教程
Gitee代码仓库:桂院导航小程序 先 假装 大伙都成功安装了静态项目,并能在 微信开发者工具 和 手机 上正确运行。 接着就是 将项目 改成自己的学校。 代码里的注释我就不说明了,有提到 我的学校 的文字都改成你自己的就行 1. 全局 app.json…...

即时通讯APP开发费用成本多少?
移动互联网的发展,为人们的通讯交流提供了非常多的便利,一些即时通讯APP的出现,将人与人的距离再一次缩短。通过即时通讯APP软件,人们可以随时随地了解身边发生的新鲜事物,以及和朋友探讨各类趣事,甚至可以…...
女生学大数据好找工作么
好不好找工作和性别无关,无论你是男生还是女生,找工作的时候首先要看的都是学历,然后是个人能力,其中还有一定的面试经验和简历加分项~ 不要自己先把这个性别限定死,你有能力都能找到工作,不满足企业要求都…...

02-mysql升级篇(rpm方式+压缩包升级)
文章目录 升级方式一、二进制方式安装1、下载mysql-5.7.42安装包(mysql-5.7.37升级mysql-5.7.42)2、备份数据库、my.cnf文件,停止mysql服务(重要)3、查看当前数据库版本3、上传 mysql-5.7.42-1.el7.x86_64.rpm-bundle.…...

【Java零基础入门篇】第 ④ 期 - 继承(三)
【Java零基础入门篇】第 ④ 期 - 继承(三) 博主:命运之光专栏:Java零基础入门 学习目标 1.掌握继承性的主要作用、实现、使用限制; 2.掌握this和super的含义及其用法; 3.掌握方法覆写的操作; 4.…...
Python Selenium搭建UI自动化测试框架
自动化测试是软件测试中非常重要的一部分,可以提高测试效率和测试覆盖率。在UI自动化测试中,Selenium是非常流行的工具。本文将介绍如何使用Python和Selenium搭建UI自动化测试框架。 一、环境准备 在开始搭建UI自动化测试框架之前,需要先安装…...
开发大语言模型需要数据?算法?算力?
开发大语言模型的关键是什么。最近看到不少文章为了流量,甚至连 5G 通讯都说成了是开发大语言模型的关键 其实从前面的原理介绍,不难看出,大语言模型的其中一个关键点是数据。 关键一:数据 训练数据主要是所谓的语料库。今天的很多语言模型的语料库主要有以下几种: …...

CSS选择器的常见用法
目录 1、CSS编写方式 2.CSS选择器 1.标签选择器 2.类选择器 3.id选择器 4.后代选择器 3.CSS属性 CSS叫做"层叠样式表",作用就是装饰网页.类似于我们平时所说的化妆。 字体、大小、间距、颜色、位置、边框、背景等等统称为样式,用来描述一个网页。 …...
Oracle EBS修改密码
FNDCPASS修改密码 用户名必须出现在FND_USER或FND_ORACLE_USERID表中。FNDCPASS实用程序和ALLRACLE功能是为应用程序用户/模式设计的。 对于FND_USER或FND_ORACLE_USERID中不存在的用户,可以使用alter命令更改密码。 查询用户是否存在FND_USER或FND_ORACLE_USERI…...

《花雕学AI》33:如何用XMind制作AI思维导图、鱼骨图和组织结构图
思维导图是一种有效的思维工具,它可以帮助我们整理信息,激发创意,提高效率。思维导图是一种以中心主题为核心,以分支结构为形式,以关键词和图像为内容的图形表示法。它可以让我们一目了然地看到知识的层次和逻辑&#…...

【rust】| 06——语言特性 | 所有权
系列文章目录 【rust】| 00——开发环境搭建 【rust】| 01——编译并运行第一个rust程序 【rust】| 02——语法基础 | 变量(不可变?)和常量 【rust】| 03——语法基础 | 数据类型 【rust】| 04——语法基础 | 函数 【rust】| 05——语法基础 | 流程控制 【rust】| 06——语言特…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...