TCP CUBIC 曲线对 BIC 折线的拟合

news2025/7/10 1:09:13

bic 旨在对 reno 改进,用二分逼近替换线性遍历逼近,时间规模从 O ( W m a x ) O(W_{max}) O(Wmax) 下降到 O ( ln ⁡ W m a x ) O(\ln {W_{max}}) O(lnWmax),这是本质,而 cubic 可以看作对 bic 的 bugfix,解除了 rtt 依赖。在实现上,cubic 用一条以绝对时间 t 为自变量的数学曲线拟合 bic 绘制的折线。

因此,这条 cubic 曲线只能在大多数情况下拟合 bic,而不是所有情况,正如泰勒级数在某个点拟合任意曲线一样。用以下代码看究竟:

for n in range(1, len(times)):
  if n % 1 == 0:
    wx[n] = wmax_x + G*(n - n_x - 1 - K_x)**3
    if wy[n-1] < wmax_y and wmax_y - wy[n-1] > I:
      wy[n] = wy[n-1] + (wmax_y - wy[n-1])/B
    elif wy[n-1] > wmax_y:
      wy[n] =  wy[n-1] + (wy[n-1] - wmax_y)/B
    else:
      wy[n] = wy[n-1] + I
  else:
    wx[n] = wx[n-1]
    wy[n] = wy[n-1]

  rx = wx[n]/C1
  if rx < R:
    tmp_x = wx[n]/R
  else:
    tmp_x = C1
  x[n] = (1-a)*x[n-1] + a*tmp_x
  ry = wy[n]/C2
  if ry < R:
    tmp_y = wy[n]/R
  else:
    tmp_y = C2
  y[n] = (1-a)*y[n-1] + a*tmp_y

  beta = 0.7
  if inc1 and wx[n] > 2*C1*R:
    C1 *= 2
    inc1 = False
  elif inc1 == False and wx[n] > 2*C1*R:
    C1 /= 2
    inc1 = True

  if inc2 and wy[n] > 2*C2*R:
    C2 *= 2
    inc2 = False
  elif inc2 == False and wy[n] > 2*C2*R:
    C2 /= 2
    inc2 = True

  while wx[n] > 2*C1*R:
    n_x = n
    wmax_x = wx[n]
    tmp = wmax_x*(1 - beta)/G
    K_x = math.pow(tmp, 1/3)
    wx[n] = (beta)*wx[n]
  while wy[n] > 2*C2*R:
    wmax_y = wy[n]
    wy[n] = (beta)*wy[n]

我用不同的 bdp 模拟不同的 Wmax,展示其对曲线拟合效果的影响,x 为 cubic,y 为 bic:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

事实上,就二分逼近而言,bic 是准确的,cubic 是近似的,它只做到 “与 rtt 无关,按照上凸逼近 Wmax,按照下凸 probe”,而并未执行二分逼近。

cubic 脱离了二分逼近,但保留了上凸逼近下凸 probe 的精髓:

  • 上凸逼近保证逼近速度越来越慢,起初离 Wmax 远,快速逼近风险小,离 Wmax 越近风险越大越需要谨慎;
  • 下凸 probe 确保了得寸进尺的哲学,既然有,大概率还会有。

但这些优势需要有代价来兑换,即 cubic 对待不同 Wmax 的不可扩展性,以下是我模拟不同的 Wmax 的动图:
在这里插入图片描述

如图所示,只要 C(建议为 0.4) 确定,cubic 曲线形状就确定了,Wmax 越大,逼近的时间越久,初始力度越大,曲线越瘦高,Wmax 越小,逼近时间越短,初始力度越小,曲线越矮胖,这也正是参数 K 的几何含义。另一方面,不管 Wmax 如何,probe 的过程都是一致的。

由于 cubic 曲线形状仅和 C 相关,而曲线的位置却和 Wmax 和 K 相关,而 K 又由 Wmax 决定,因此曲线位置仅和 Wmax 相关,以上分析直接导出了 cubic 算法 tcp friendliness 问题,即,当 Wmax 小到一定程度,cubic 曲线 x = K 左边足够平坦,以至于它的增窗效果还没有 y = I*x 标准 reno 算法更强,cubic 在这种情况下是有劣势的,而这种情况仅在 Wmax 足够小即短瘦管道时发生,于是乎,在这种情况下,cubic 退回到 reno,这就是 tcp friendliness 之解法。

小经理只是小经理,饲料标准降了,啥也不是。

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

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

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

相关文章

新书速览|MySQL 9从入门到性能优化:视频教学版

《MySQL 9从入门到性能优化:视频教学版》 本书内容 MySQL是流行的关系数据库管理系统之一&#xff0c;由于其体积小、速度快、总体拥有成本低、开放源码等特点&#xff0c;一般中小型企业甚至大型互联网企业的应用开发都选择MySQL作为数据库。《MySQL 9从入门到性能优化:视频教…

【经验分享】自动化测试框架实战

一、什么是自动化测试框架 在了解什么是自动化测试框架之前&#xff0c;先了解一下什么叫框架&#xff1f;框架是整个或部分系统的可重用设计&#xff0c;表现为一组抽象构件及构件实例间交互的方法;另一种定义认为&#xff0c;框架是可被应用开发者定制的应用骨架。前者是从应…

「iOS」——KVC

iOS学习 前言KVC模式KVC设值KVC取值KVC使用keyPathKVC处理异常处理不存在的key处理nil异常 KVC处理字典KVC高阶消息传递 总结 前言 对KVC模式的简单学习和总结。 KVC模式 KVC&#xff08;Key-Value Coding&#xff0c;键值编码&#xff09;是一种通过字符串来访问对象属性的机…

详解Linux文件系统

先来研究一下磁盘&#xff1a; LBA 磁头面数 所有磁头是共进退的。 每个扇区的大小假设为&#xff1a;512 磁盘的总容量&#xff1a;盘面*t*s*512 数组的下标范围&#xff1a;盘面*t*s LBA&#xff1a;xxx 假设xxx为LBA地址 xxx/1000h 及为h号盘面 xxx/100c 及c号磁道…

国产化框架PaddleYOLO结合Swanlab进行作物检测

1. 项目介绍 粮食安全&#xff0c;作为人类生存与发展的基石&#xff0c;始终是全球关注的焦点。它不仅仅关乎粮食的充足供应&#xff0c;更涉及粮食的质量安全、营养健康以及可持续生产等多个维度。在全球化、气候变化和资源环境约束日益加剧的背景下&#xff0c;如何确保粮食…

ComfyUI物品移除讲解

实现效果 一、下载插件 comfyui inpaint nodes 提供重绘功能节点&#xff0c;效果比自带的好很多 官方介绍 使用ComfyUI更好地进行修补的节点&#xff1a;用于SDXL&#xff0c;LaMa&#xff0c;MAT和各种其他工具的Foocus修补模型&#xff0c;用于预填充修补和去除区域。 插件…

Android调用科大讯飞语音转写 API以及解析踩坑之旅

需求 需要对本地音频文件&#xff0c;调用科大讯飞的api进行转文字&#xff0c;本来呢&#xff0c;以为很简单&#xff0c;结果坑不少。 语音转写 API 文档 坑1&#xff1a;解析 下载demo&#xff0c;代码也挺简单&#xff0c;放到idea中&#xff0c;替换一下key&#xff0c…

基于Springboot+Vue的网上书店(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 在这个…

用户体验测试——21条UX设计原则

根据心理学的研究和发展,对应理论不断被完善到用户体验设计领域,以下21条UX设计原则即为心理学在用户体验设计中的应用,在设计和测试中应用这些原则,可以提高用户体验质量特性,如下所示: 21条UX设计原则 有效性 特斯勒定律(最小复杂度定律) 这个定律也被称为“复杂性…

数据转换新利器,开启企业高效之路

Maria是 S 公司的采购专员&#xff0c;最近需要进行公司设备的采购&#xff0c;这可让她犯了难&#xff1a;公司多个部门提交采购申请&#xff0c;但每个部门都有着不同的需求。一时间她就收到了大量的申请单&#xff0c;却难以高效整合处理&#xff08;比如哪些申请可以合并采…

环境变量

见一见环境变量&#xff1a; 查看环境变量的命令 命令行&#xff1a; echo &PATH echo &HOME env ps ajx ps aux ps -f -o pid code.c中获取环境变量 main&#xff08;char* env[]&#xff09; char* getenv&#xff08;env_name&#xff09; 本地变量 shell…

App模拟下载场景的demo

摘要 目的&#xff1a;提供一个稳定的下载场景&#xff0c;可以手动触发和定时触发下载&#xff0c;每次下载相同大小文件&#xff0c;研究下载场景的功耗影响 原理&#xff1a;把电脑当做服务器&#xff0c;手机测试App固定下载电脑存放的某个XXXMB的大文件&#xff0c;基于…

如何使用ssm实现校园体育赛事管理系统的设计与实现+vue

TOC ssm713校园体育赛事管理系统的设计与实现vue 绪论 课题背景 身处网络时代&#xff0c;随着网络系统体系发展的不断成熟和完善&#xff0c;人们的生活也随之发生了很大的变化。目前&#xff0c;人们在追求较高物质生活的同时&#xff0c;也在想着如何使自身的精神内涵得…

PE节表中是否存在misc.VirtualSize 比SizeofRawData还要大的情况

确实是存在的,这是win10自带记事本,可以看到 确实是大.所以在申请imagebuffer的时候,还是需要比较大小.但是在还原的时候.只考虑sizeofRawData即可>

【Android 14源码分析】WMS-窗口显示-第一步:addWindow

忽然有一天&#xff0c;我想要做一件事&#xff1a;去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…

项目管理专业资质认证ICB 3中关于项目经理素质的标准

项目管理专业资质认证ICB 3中关于项目经理素质的标准&#xff0c;的确很全面&#xff0c;下面摘录之&#xff1a;

三款专业的英文文献翻译工具,翻译论文不在话下

阅读英文论文文献时免不了要借用一些翻译软件来帮助理解&#xff0c;但因为论文文献的特殊性&#xff0c;普通的翻译软件不能很好的翻译一些专业名词和术语&#xff0c;所以这里给大家分享三款可以胜任文献翻译的专业翻译工具&#xff0c;可以快速准确的完成英文文献翻译工作。…

CDGA|2024年数据治理的六个关键建议

随着数字经济的快速发展&#xff0c;数据已成为企业运营和决策的核心资产。在2024年&#xff0c;做好数据治理对于提升企业的竞争力和运营效率至关重要。以下是六个关键建议&#xff0c;帮助企业有效应对数据治理的挑战。 1. 制定明确的数据治理策略 首先&#xff0c;企业需要…

遥感影像-实例分割数据集:iSAID 从切图到YOLO格式数据集制作详细介绍

背景介绍 开源数据集isaid标注包含实例分割&#xff0c;但是原始影像太大&#xff0c;很吃显存&#xff0c;一般显卡无法用原始影像直接训练&#xff0c;所以需要对影像进行裁剪&#xff0c;并生成对应的标签&#xff0c;因为想用yolo系列跑模型&#xff0c;所以将标签需要转为…

【设计模式-模板】

定义 模板方法模式是一种行为设计模式&#xff0c;它在一个方法中定义了一个算法的骨架&#xff0c;并将一些步骤延迟到子类中实现。通过这种方式&#xff0c;模板方法允许子类在不改变算法结构的情况下重新定义算法中的某些特定步骤。 UML图 组成角色 AbstractClass&#x…