从 TCP Reno 经 BIC 到 CUBIC

news2024/9/29 19:25:21

重读 TCP拥塞控制算法-从BIC到CUBIC 以及 cubic 的 tcp friendliness 与拐点控制 这两篇文章,感觉还是啰嗦了,今日重新一气呵成这个话题。

reno 线性逼近管道容量 Wmax,相当于一次查询(capacity-seeking),但长肥管道从 0.5*Wmax 到 Wmax 的线性遍历太慢,期间一旦遭遇丢包,则前功尽弃。

以下的两条 rtt 相差 5 倍的流在同等丢包率下的带宽和 inflt 发展图:
在这里插入图片描述

对已排序序列的查询,二分法是普适方法,首选用二分法替换,查询管道容量 Wmax 的速度快得不是一点半点,这就是 bic:

w n = w n − 1 + W m a x − w n − 1 2 w_n=w_{n-1}+\dfrac{W_{max}-w_{n-1}}{2} wn=wn1+2Wmaxwn1

代码很简单:

B, I = 4, 1 # B 理论值取 2,但不够平滑 
for n in range(1, len(times)):
  ...
  if wx[n-1] < wmax_x and wmax_x - wx[n-1] > I:
    wx[n] = wx[n-1] + (wmax_x - wx[n-1])/B
  elif wx[n-1] > wmax_x:
    wx[n] =  wx[n-1] + (wx[n-1] - wmax_x)/B
  else:
    wx[n] = wx[n-1] + I
  ..

bic 的 cwnd 曲线形状如下:
在这里插入图片描述

加入下列 red 模拟:

for n in range(1, len(times)):
  ...
  if wx[n] + wy[n] > 1.5*C*R:
    if random.random() < 0.3:
      wmax_x = wx[n]
      wx[n] = (1 - beta)*wx[n]
    if random.random() < 0.3:
      wmax_y = wy[n]
      wy[n] = (1 - beta)*wy[n]
  if wx[n] + wy[n] > 2*C*R:
    if random.random() < 0.5:
      wmax_x = wx[n]
      wx[n] = (1 - beta)*wx[n]
    if random.random() < 0.5:
      wmax_y = wy[n]
      wy[n] = (1 - beta)*wy[n]
  while wx[n] + wy[n] > 4*C*R:
    wmax_x = wx[n]
    wx[n] = (1 - beta)*wx[n]
    wmax_y = wy[n]
    wy[n] = (1 - beta)*wy[n]

双流共存效果如下(忽略 z):
在这里插入图片描述

它极大解决了 reno 长流打开 cwnd 慢的问题,文初相同的环境,用 y-bic 和 x-reno 重跑结果如下(忽略 z):
在这里插入图片描述

但由于 bic 步进完全由 ack-selfclock 驱动,同为 bic 的不同流,对较大 rtt 不友好,用以下代码包裹 x 和 y 两条流,给出一个 4 倍的 rtt 关系:

for n in range(1, len(times)):
  if n % 5:
    # 流 x 的计算
  if n % 20:
    # 流 y 的计算

模拟如下(忽略 z):
在这里插入图片描述

于是抽离 rtt,就是 cubic,cubic 用一条式子里与 rtt 无关的 3 次曲线拟合 bic 折线:

w ( t ) = C ⋅ ( t − ( 1 − β ) ⋅ W m a x C 3 ) 3 + W m a x w(t)=C\cdot(t-\sqrt[3]{\dfrac{(1-\beta)\cdot W_{max}}{C}})^3+W_{max} w(t)=C(t3C(1β)Wmax )3+Wmax

公式看起来很复杂,实际就是个数学处理技巧:

  • 目标:拟合 bic 折线,平滑为曲线;
  • 候选项:有 2 阶拐点的奇数次曲线,简单选 3 次;
  • 用 bic 的 Wmax 坐标算 3 次曲线系数。

cubic 长下面的样子:
在这里插入图片描述

cubic 只与绝对时间有关,不管 rtt 如何,只要 ack 虽迟但到,公平性就毫无问题。重跑 bic 的例子:

for n in range(1, len(times)):
  ...
  if n % 5 == 0:
    wx[n] = wmax_x + G*(n - n_x - K_x)**3
  else:
    wx[n] = wx[n-1]

  if n % 10 == 0:
    wy[n] = wmax_y + G*(n - n_y - K_y)**3
  else:
    wy[n] = wy[n-1]
  
...
  beta = 0.3
  if wx[n] + wy[n] > 1.5*C*R:
    if random.random() < 0.3:
      n_x = n
      wmax_x = wx[n]
      tmp = wmax_x*(1 - beta)/G
      K_x = math.pow(tmp, 1/3)
      wx[n] = (1 - beta)*wx[n]
    if random.random() < 0.3:
      n_y = n
      wmax_y = wy[n]
      tmp = wmax_y*(1 - beta)/G
      K_y = math.pow(tmp, 1/3)
      wy[n] = (1 - beta)*wy[n]
  if wx[n] + wy[n] > 2*C*R:
    if random.random() < 0.5:
  ...

同样 4 倍 rtt 的关系,如下:
在这里插入图片描述

长肥管道同样比 reno 效率高:
在这里插入图片描述

然而在短瘦管道却不如 reno,理由很简单,cubic 曲线形状唯一由参数 C 确定,短瘦管道中 cubic 曲线片段更加矮胖,不如长肥管道中瘦高,以至于它矮胖到斜率还没有 reno 大:

在这里插入图片描述

实际的结果如下:
在这里插入图片描述

换句话说,cubic 在短瘦管道对 bic 折线拟合得不好,于是引入 tcp_friendliness,即在短瘦管道中至少保持与 reno 相图的性能,处理方式很简单:

for n in range(1, len(times)):
  ...
  if n % 1 == 0:
    wx[n] = wmax_x + G*(n - n_x - K_x)**3
    tmp = wx[n-1] + I
    if tmp > wx[n]:
      wx[n] = tmp
  else:
    wx[n] = wx[n-1]

  if n % 1 == 0:
    wy[n] = wy[n-1] + I
  else:
    wy[n] = wy[n-1]

效果如下:
在这里插入图片描述

差不多就这些东西。至少经理还有皮鞋。

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

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

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

相关文章

试填+组合数学,CF 1648C - Tyler and Strings

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1648C - Tyler and Strings 二、解题报告 1、思路分析 考虑枚举相同前缀…

MySQL约束:外键约束

下面先创建两张表用来作为实验样例 1.创建dept表 create table dept(id int auto_increment comment ID primary key,name varchar(50) not null comment 部门名称 ) comment 部门表;INSERT INTO dept (id, name) VALUES (1, 研发部), (2, 市场部), (3, 财务部), (4, 销售部…

【C语言软开面经】

C语言软开面经 malloc calloc realloc free动态分配内存malloccalloc函数&#xff1a;realloc 函数&#xff1a;free函数&#xff1a; 堆栈-内存分区栈区&#xff08;Stack&#xff09;&#xff1a;堆区&#xff08;Heap&#xff09;&#xff1a;全局&#xff08;静态&#xff…

哪个待办事项提醒软件推荐?待办事项提醒软件哪个合适?

在快节奏的现代生活中&#xff0c;我们每个人每天都会被各种待办事项所包围。从工作计划到个人生活&#xff0c;从学习任务到家庭琐事&#xff0c;这些事项往往繁杂且紧急&#xff0c;稍不留神就可能错过重要的截止日期。因此&#xff0c;选择一款合适的待办事项提醒软件&#…

Docker-2.如何保存数据退出

在使用Docker时&#xff0c;我们常常需要修改容器中的文件&#xff0c;并且希望在容器重启后这些修改能够得到保留。 0.简介 使用Docker时有一个需要注意的问题&#xff1a;当你修改了容器中的文件后&#xff0c;重启容器后这些修改将会被重置&#xff0c;深入研究这个问题。 …

如何高效运营知识产权,实现企业价值最大化?

知识产权的运营管理是指企业对其所拥有的专利、商标、著作权等知识产权进行规划、运用、保护和管理的一系列活动。这些活动旨在最大化知识产权的价值&#xff0c;促进企业的技术创新和市场竞争力的提升。通过有效的知识产权运营管理&#xff0c;企业可以实现技术成果的快速转化…

猝发传输和非猝发传输

猝发传输和非猝发传输是两种不同的数据传输方式&#xff0c;主要区别在于数据传输的连续性以及数据包的发送方式。 猝发传输 (Burst Transmission): 定义: 猝发传输是指在一段时间内&#xff0c;大量数据包集中发送&#xff0c;然后在一段时间内没有数据传输&#xff0c;这种…

全流程SWAP农业模型数据制备、敏感性分析及气候变化影响技术应用

SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型&#xff0c;它综合考虑了土壤-水分-大气以及植被间的相互作用&#xff1b;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程&#xff0c;使其能够精确的模拟土壤中水分的运动&#xff0c;而且耦合了W…

HAL+M4学习记录_1

一、简介 基于Arm Cortex-M4的STM32F4 MCU系列采用了意法半导体的NVM工艺和ART Accelerator™&#xff0c;在高达180 MHz的工作频率下通过闪存执行时其处理性能达到225 DMIPS/608 CoreMark&#xff0c;这是迄今所有基于Cortex-M内核的微控制器产品所达到的最高基准测试分数。 这…

奖金高达 110 万元,Spatial Joy 2024 全球 AR 应用开发大赛启动

今年是AR应用开发大赛第三届&#xff0c;恰逢Rokid成立十周年&#xff0c;我们推出全新的大赛品牌“Spatial Joy”&#xff0c;引领开发者享受开发乐趣&#xff0c;为其打造充满挑战和惊喜的开发之旅&#xff0c;逐渐成为空间计算时代全球最大AR应用开发大赛。回顾大赛发展&…

MWORKS.Sysplorer 2024b重磅推出同元基础库

一、引言 MWORKS.Sysplorer 是多领域建模与仿真平台&#xff0c;集成了Modelica标准库。该库由Modelica协会开发&#xff0c;是一款开源的通用基础模型库&#xff0c;支持机电、流体、控制等多个专业领域的建模与仿真。随着Modelica标准库的不断发展与更新&#xff0c;目前最新…

自建RustDesk服务器:详细步骤与操作指南

在远程办公和协作日益普及的今天&#xff0c;远程桌面软件成为了不可或缺的工具。然而&#xff0c;许多知名的远程桌面软件&#xff0c;在免费使用一段时间后&#xff0c;会通过限制连接数量、时长或在特定网络环境下的可用性来促使用户付费升级&#xff0c;而且其会员非常昂贵…

第L4周:机器学习|K-近邻算法模型

本文为&#x1f517;365天深度学习训练营 中的学习记录博客原作者&#xff1a;K同学啊 任务&#xff1a; ●1. 学习本文的K-邻近算法 ●2. 了解 KNeighborsClassifier 函数 一、基本概念 商业哲学家 Jim Rohn 说过一句话&#xff0c;“你&#xff0c;就是你最常接触的五个人的…

KEIL中出现encountered an improper argument的解决办法

当使用KEIL软件时&#xff0c;有时候会遇见encountered an improper argument的错误提示框。如下图所示&#xff1a; encountered an improper argument翻译为&#xff1a;遇到不恰当的争论。出现该错误的原因一般有以下几种&#xff1a; 1、在我们在调试完结束时候&#xff0c…

跨学科数字教学知识库的建设挑战与解决方案

随着知识经济的不断发展和教育改革的深入&#xff0c;跨学科教学逐渐成为培养具有综合素质和创新能力的关键途径。在这一背景下&#xff0c;搭建跨学科数字教学知识库显得尤为重要。然而&#xff0c;跨学科知识的复杂性和多样性给知识库的建设带来了诸多挑战。本文旨在探讨这些…

JAVA毕业设计185—基于Java+Springboot+vue3+小程序的校园网上商店小程序系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue3小程序的校园网上商店小程序系统(源代码数据库)185 一、系统介绍 本项目前后端分离(可以改为ssm版本)&#xff0c;分为用户、商家、管理员三种角色 1、用户…

体验通义灵码高阶能力:代码生成增强

通义灵码提供了基于企业代码库进行行间代码生成检索增强的能力&#xff0c;在开发者使用通义灵码 IDE 插件的行间代码生成时&#xff0c;可以结合企业上传的代码库作为上下文进行行间代码补全&#xff0c;使代码补全更加贴合企业代码规范、业务特点。 开通通义灵码企业版&#…

C语言:排序(1)

目录 一、排序的概念及应用 排序的概念 排序的运用 二、常见排序算法 插入排序 基本思想 直接插入排序 希尔排序( 缩小增量排序 ) 选择排序 基本思想 堆排序 一、排序的概念及应用 排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照…

【MySQL实战45讲3】事务隔离

文章目录 事务事务四大特性&#xff08;ACID&#xff09; 隔离级别可重复读的使用场景可重复读隔离级别的实现 事务 事务就是要保证一组数据库操作&#xff0c;要么全部成功&#xff0c;要么全部失败。在MySQL中&#xff0c;事务支持是在引擎层实现的。MySQL是一个支持多引擎的…

EasyCVR智慧公园视频智能管理方案:赋能公园安全管理新高度

随着城市化进程的加速&#xff0c;智慧城市建设已成为提升城市管理效率、增强居民生活质量的重要途径。智慧公园作为智慧城市的重要组成部分&#xff0c;其安全与管理水平直接影响着市民的休闲娱乐体验。EasyCVR智慧公园视频智能管理方案&#xff0c;正是基于这一背景应运而生&…