tcp cubic 与随机丢包

news2025/2/28 3:39:10

前面提到过一个 AIMD 的修正方法,“二次机会 MD”:首次丢包只 MD 收缩一个相对较小的比例,再次丢包时再继续收缩,直到 beta * Wmax。

效果如下图:
在这里插入图片描述
大意是在检测到丢包时,先 MD 一个相对小的缩放比例,如果再次丢包再继续缩放,由此可在不损害公平性(cc 只为拥塞才会降速收敛,随机丢包本来就不应该降速)的前提下抵抗随机丢包:如果随机丢包,由于缩放系数较小,带宽损失不大,cwnd 可从相对高的位置开始描绘 cwnd/time 曲线,如下图所示:
在这里插入图片描述

如果真拥塞,PRR 过程的发送线将变成一条上凸曲线(线 2),逐渐弯下去,最终和标准 PRR 的结果相汇。虽 “有悖于 PRR” 按比例收敛到 0.7 * Wmax,但减速收敛到 0.7 * Wmax 也没什么不好。

做这个修改一开始就是想让 MD 过程也呈现一条曲线而不是一条直线,就像 AI 过程一样,收敛到结果,而非过程。减速收敛显然可以抗随机丢包,在随机丢包后不至于下降太多,但代价是真拥塞时响应没有标准 PRR 过程快,不过即使标准 PRR 不是论证的结果。

简单写了个代码:https://github.com/marywangran/tcp_cubic_v2

虽然二次机会 MD 算法可以抵抗明确的随机丢包,但随机丢包太频繁的话也扛不住,大概就是积累 AI 和 MD 总量持平或更小的时候,由于没有足够的数据量进行 probe,有效吞吐将明显下跌。但凡 probe 都需要超过有效 BDP 的数据量做支撑,因此在小 buffer 链路,probe 本身也会造成 buffer 溢出而丢包,如 BBR 代码的 probe 注释所说:We do not persist if packets are lost, since a path with small buffers may not hold that much。

和 BBR 抗丢包相比,它那个是憋住 maxbw 守恒观望,我这个是损失一点点代价赌能跨过去。BBR 像是油门踩到底跨过随机丢包,我这个像轻踩刹车。

AIMD 公平性很重要,否则大可使用别的 “更好” 的算法,AIMD 的核心就是收敛到公平。任何魔改都不要破坏这一点。AIMD 的公平收敛其实就是一个勾兑的过程,一杯葡萄汁液:橙汁为 3:1 的混合液体,如何勾兑成 2:1,就是 AIMD:先加入 1:1 液体一小勺,这就是 AI,均匀混合后舀出去相同的量,舀出去的液体中二者的比例很容易计算,这就是 MD,重复这个过程 n 次即可,数学上很容易计算 n。

为判断随机丢包,不要引入过于复杂的逻辑,ACK 时钟信息量有限,判断精度必有上限,类似于硬币猜正反,因为你的信息就那么多,50% 的概率,那就随机猜即最优解,不要启发。丢包判断也一样,别做假设,一旦误判就要为负方向买单,这是信息论决定的。

通用场景,不做假设,最简单最好。我们都明白,特定场景优化很容易,这相当于事前已经告诉你要做什么,但问题是当这个 “特定场景” 混杂在通用场景中时,很难将其识别出来,这才是最难的问题,这个问题无解,结果就是拆了东墙补西墙,统计意义上看跟没有优化一样。

上周那个 “二次机会 AIMD” 跟朋友介绍了一下,挺不错,本来不到 5 分钟就能改一版 cubic ++,结果还是因为 Linux tcp 开放的 cc 模块受制于拥塞状态机,我若实现脱缰的 cong_control 回调,就要亲自调用 PRR,不过还算简单,吃点烧烤的工夫就能写完。相比 ns-3 写模拟,我还是倾向于直接写 Linux 模块的 cong_control 回调。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/520364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DS215KLDCG1AZZ03A如何编写温度比例的代码?

DS215KLDCG1AZZ03A如何编写温度比例的代码&#xff1f; 可编程逻辑控制&#xff0c;简称PLC&#xff0c;由美国机械工程师迪克莫利于1年1968月<>日首次设计。PLC最初是为了减少汽车行业员工的工作量而开发的&#xff0c;从那时起&#xff0c;它们已被用于所有其他恶劣环境…

常用linux多场景查找文件的方法及对比

波哥整理了在linux中根据文件名称查文件&#xff0c;根据文件内容查找文件&#xff0c;根据进程号查找文件的方法及命令详细解释。 一、find命令 find命令可以在指定目录下查找文件&#xff0c;其语法如下&#xff1a; find <目录> <选项> <匹配模式> 选项和…

vue-4:注册组件,组件传参,特殊属性ref $parent $root,透传,内置组件,自定义指令,mixins混入

注册组件&#xff0c;使用组件&#xff08;项目中都是写component中&#xff09; 为什么用组件&#xff1a;组件可以复用&#xff0c;每一个组件都是独立的&#xff0c;模板&#xff0c;数据&#xff0c;css样式互不影响 全局注册组件component&#xff1a;请勿滥用全局组件in…

一个打通基于XML管理Bean

目录 准备工作 添加依赖 引入配置文件 获取bean ①方式一&#xff1a;根据id获取 ②方式二&#xff1a;根据类型获取 ③方式三&#xff1a;根据id和类型 ④注意的地方 ⑤扩展知识 依赖注入之setter注入 ①创建学生类Student ②配置bean时为属性赋值 ③测试 依赖注…

Powerlink协议在嵌入式linux上的移植和主从站通信(电脑和linux板通信实验)

使用最新的openPOWERLINK 2.7.2源码&#xff0c;业余时间搞定了Powerlink协议在嵌入式linux上的移植和测试&#xff0c;并进行了下电脑和linux开发板之间的通信实验。添加了一个节点配置&#xff0c;跑通了源码中提供的主站和从站的两个demo。这里总结下移植过程分享给有需要的…

飞桨EasyDL月刊:4月功能全新升级,模型训练步骤缩短63%

亲爱的开发者&#xff1a; 近来以生成式 AI、多模态预训练大模型为代表的技术变革正席卷全球&#xff0c;与此相关的智能化工具和平台陆续发布。飞桨 EasyDL 和 BML 位于文心全景图的工具与平台层&#xff0c;提供大模型开发套件及多种建模方式&#xff0c;全面支持基于大模型能…

访客接入-唯一客服系统文档中心

网站可以通过多种方式接入客服系统&#xff0c;直接跳转链接&#xff0c;或者在页面右下角弹窗 访客链接 可以在自己的网站接入&#xff0c;访客独立链接&#xff0c;入口形式可以完全自己写&#xff0c;只是跳转链接。 例如下面的访客链接https://gofly.v1kf.com/chatIndex?k…

Angular开发之——安装Angular CLI并初始化项目(02)

一 概述 Angular CLI介绍及开发环境准备安装Angular CLI开发工具使用Angular CLI初始化Angular项目简单体验Angular 二 Angular CLI介绍及开发环境准备 2.1 Angular CLI介绍 目前&#xff0c;无论你使用什么前端框架&#xff0c;都必须要使用到各种NodeJS工具&#xff0c;An…

Leetcode 剑指 Offer II 026. 重排链表

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&a…

day32_HTML

今日内容 零、 复习昨日 一、二阶段介绍 二、HTML 零、 复习昨日 晨考 一、二阶段介绍 第一阶段: JavaSE, 对java基本语法,面向对象知识,和编程有了基本了解 第二阶段: javaweb阶段 开发入门 前端 网页(用户直接交互界面)html 网页css 美化js 动起来 - jquerybootstrap 服务器 …

C++三部曲|C++内存管理全景指南

导语 深入理解C内存管理&#xff0c;一文了解所有C内存问题&#xff0c;万字长文&#xff0c;建议收藏 随着人工智能&#xff0c;云计算等技术的迅猛发展&#xff0c;让Python&#xff0c;go等新兴语言流行了起来&#xff0c;很多人以为C可能已经过时了&#xff0c;确实&…

《vector的模拟实现》

本文主要介绍vector的常见接口的模拟实现 文章目录 vector中常用类成员二、vector的底层结构三、vector的默认成员函数构造函数1—空构造构造函数2—迭代器区间构造拷贝构造函数赋值运算符重载析构函数 四、迭代器相关的函数迭代器的分类迭代器对应的STL容器分类迭代器失效问题…

软件系统架构对测试的影响分析

我们知道软件系统的架构会对系统测试产生影响&#xff0c;而到底会产生哪些影响呢?   首先看一下软件系统架构到底是如何定义的?   软件系统架构就是组成系统的主要重要模块、过程、数据的管理和分配、用户界面的种类和风格&#xff0c;以及系统运行平台等。其中包括它们…

在MacBook上编译v3s内核出错

刚开始的时候&#xff0c;我捣鼓esp8266「现在我也还有8266的开发板&#xff0c;后面也还是会推荐」 后面&#xff0c;我推荐了esp32&#xff0c;买了esp32开发板&#xff0c;可以做uac相关的实验&#xff0c;也可以搞图形界面了。 现在&#xff0c;终于到捣鼓Linux了 PS&#…

完整的医学影像PACS系统全套源码(带三维重建)

一套完整的医学影像存储与传输系统源码&#xff0c;PACS部分主要提供医学影像获取、影像信息网络传递、大容量数据存储、影像显示和处理、影像打印等功能。 RIS主要提供分诊登记、叫号、检查报告生成和打印等功能。本套影像存储与传输系统将二者进行无缝对接&#xff0c;提供了…

Navicat Premium 15安装注教程

Navicat Premium 15安装 准备工作 下载好安装包navicat150_premium_cs_x64和安装完成Navicat Premium 15 链接&#xff1a;https://pan.baidu.com/s/1TJs3pjAXJXhu7-13DJLzpg 提取码&#xff1a;hunk 安装Navicat Premium 15 无脑操作&#xff0c;下一步下一步就行了&…

【利用AI让知识体系化】万字深入浅出Nginx

思维导图 文章目录 思维导图 第一部分&#xff1a;入门篇1.1 起步下载和安装Nginx启动NginxNginx配置文件Nginx命令行总结 1.2 Nginx的基本架构1.3 安装和配置Nginx1.4 Nginx的基本操作 第二部分&#xff1a;核心篇2.1 Nginx的请求处理2.2 Nginx的缓存机制2.3 Nginx的负载均衡机…

二叉树基础

https://www.bilibili.com/video/BV1Hy4y1t7ij/?spm_id_from333.337.search-card.all.click&vd_source168d5f618ec1a68e1f162d91a35a12b6 完全二叉树的底部一定是从左到右是连续的。满二叉树一定是完全二叉树。 二叉搜索树&#xff1a;左边左子树的所有节点都小于这个中间…

【ROS】如何让ROS中节点获取数据 III --参数服务器通信及ros常用工具指令介绍

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法…感兴趣就关注我吧&#xff01;你定不会失望。 参数服务器通信及ros常用工具指令介绍 0.参数服务器概念1.参数服务器增加/修改参数&#xff1a;2.参数服务器查找参数3.参数服务器删除参…

大家都是拷贝,凭什么你这么秀?

入门教程、案例源码、学习资料、读者群 请访问&#xff1a; python666.cn 大家好&#xff0c;欢迎来到 Crossin的编程教室 &#xff01; 之前关于 Python 的作用域、赋值、参数传递&#xff0c;我们接连谈了几篇文章&#xff1a; Python常见问题&#xff1a;全局变量和局部变量…