端到端拥塞控制的本质

昨天整理了一篇 bbr 的微分方程组建模(参见 bbr 建模),算是 bbr 算法终极意义上的一个总结,最后也顺带了对 aimd 的描述,算是我最近比较满意的一篇分享了。那么接下来的问题,脱离出具体算法,上升到宏观层面,拥塞控制的本质是什么。

拥塞控制的本质就是对有效资源的自适应,这里的有效资源包括带宽但不包括 buffer。这个自适应分为两个层面,在局部意义上,要对时延负反馈做适应,在全局意义上,要做公平收敛,要说本质,就是以上这些。

用微分方程描述拥塞控制非常直观,因为它本身就是描述变化的,而拥塞控制就是要对变化做响应,变化主要指全局流量的波动,有流量加入,就出让一些资源,有流量退出,就抢占一些资源,出让多少,抢占多少,不光看能力,还要看全局,所有这一切都非常容易用微分方程描述。拥塞控制更多的意义在于适应多流,单流还不容易吗,传统 slow start or bbr startup 就够了。

我们看迄今为止具有代表性的 3 类拥塞控制算法,基于丢包的 reno/cubic,基于时延的 vegas,基于 bdp 模型的 bbr,它们无外乎都在描述 cwnd/pacing rate 的变化。

虽然 reno/cubic 的 aimd 依赖外部事件(丢包)而显得不连续,但它依然可以用连续的方程描述,只需要把丢包事件等价到丢包率即可:

d W d t = ( 1 − p ) ∗ a W − p ∗ b ∗ W \dfrac{dW}{dt}=(1-p)*\dfrac{a}{W}-p*b*W dtdW=(1p)WapbW

而对于 vegas,只需要盯紧时延变化,下面是我给出的一个模型,简陋,但能说明问题。设 x(t) 为发送速率,y(t) 为期望 rtt,z(t) 为实际测量 rtt,w(t) 为 cwnd,则 vegas 的行为可由下列一组方程描述:

z ( t ) = 实际实时采样 z(t)=实际实时采样 z(t)=实际实时采样
d x d t = k 1 ( z − y ) \dfrac{dx}{dt}=k_1(z-y) dtdx=k1(zy)
d y d t = k 2 ( y − z ) \dfrac{dy}{dt}=k_2(y-z) dtdy=k2(yz) 【实则移动指数平均】
d w d t = x ⋅ y \dfrac{dw}{dt}=x\cdot y dtdw=xy

我用 sin 函数模拟采样波动,数值解法代码如下:

x = np.zeros_like(times)
y = np.zeros_like(times)
z = np.zeros_like(times)
w = np.zeros_like(times)

x[0], y[0], z[0] = x0, y0, z0
t = np.arange(0.0, T, 0.1)
for n in range(1, len(times)):
    x[n] = x[n-1] + dt * (-k1*(z[n-1] - y[n-1]))
    y[n] = y[n-1] + dt * (-k3*(y[n-1] - z[n-1]))
    z[n] = 1 + 1*np.sin(2 * np.pi * t[n-1])
    w[n] = x[n]*z[n]

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

可观察到这些量之间的关系,就是负反馈,阻止 rtt 变化,此消彼长。

资源限定场景,参与者多则收,参与者少则放,装进一个瓶子,晃一段时间就不再拥挤,这就是拥塞控制。

很多人都有体验,刚挤进一辆满载公交车或绿皮火车,似乎每个人都被压得喘不过气,但车子颠簸一阵子后,奇迹般宽松了,另一例,医院,景区,购物等不管排队多长,似乎最终都会得到服务。

总有人会往宽松的地方主动挪,有人挪就有人让,总有人觉得没希望而离开,但很少有人主动挤,这就是拥塞控制。端到端拥塞控制与此类似,都是没有全局上帝视角的自发自组织博弈。

自 1986 年第一次肉眼可见的大范围网络拥塞后,范雅各布森(Van Jacobson,任何 cc 都应引用他)引入拥塞控制机制后迄今诞生了越来越多的拥塞控制算法,但具有部署意义的依旧是 reno/cubic,vegas,bbr 这 3 类,其它的诸多算法大多数都上不了台面。

近几年各类 cc 如寒武纪大爆发(各顶会一年 n 多论文,n 多 cc,基本都是瞎 jb 扯淡),但多数上不了台面,主流 cc 还是老 3 样,实际部署的就是 cubic vs. bbr,vegas 都不行,别的都只能自己玩玩,内卷罢了。强调端到端却又没什么好招数获得更加详细的信息,上限到了,信息量已达极限,还折腾个啥。至于 dcn,只呵呵。

大多数都是为了升职加薪,包括 G 家。rack 早在 1994 年 vegas 论文中就展现了,然而无人问津,直到 bbr 前夕… 其实业内早就采用了。业内一般不管你实际效果,而在乎总结性只言片语,曾有位自诩资深的经理说 “拥塞控制的本质就是端到端的 qos”,这就纯扯犊子了。

端到端信息量极限的根因在于 “测不准”。测不准又怎样,大数定律,中心极限定理上场啊,任何事物在足够符合它自己尺度的那个度量精度,一定有规律,这就是统计学两大定律的前提,而分组交换互联网本身就是统计复用网络,它遵循统计律。

但大多数程序员看不上统计律。可统计律才是有效的拥塞控制的核心基础,不然呢?你试试看。

艹,本来不卷,求别卷!鸡屎,经理。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

百度“文心•跨模态大模型”又有新动态,支持内容分析时输出自定义标签库

大模型真正的价值在于应用。 一、基本概念 AI大模型具有强大的表征学习能力,能够在海量数据中提取有用的特征,为各种复杂任务提供解决方案。例如GPT-4o、BERT等模型的出现,不仅展示了大规模参数和复杂计算结构的优势,还在自然语…

Android Studio - adb.exe已停止运作的解决方案

adb.exe 是Android Debug Bridge 的缩写,它是Android SDK 中的一个调试工具,允许开发者通过命令行界面与设备进行交互,执行各种操作,如运行设备的shell、管理模拟器或设备的端口映射、在计算机和设备之间上传/下载文件、将本地APK…

如何申请抖音本地生活服务商?3种方式优劣势分析!

随着多家互联网大厂在本地生活板块的布局力度不断加大,以抖音为代表的头部互联网平台的本地生活服务商成为了创业赛道中的大热门,与抖音本地生活服务商怎么申请等相关的帖子,更是多次登顶创业者社群的话题榜单。 就目前的市场情况来看&#x…

微信小程序,订阅消息

微信小程序,订阅消息,完整流程 1.选择需要的模版 2.前端调用订阅消息 注:tmplIds:模板ID模版id,这里也可以选多个 wx.requestSubscribeMessage({tmplIds: [7UezzOrfJg_NIYdE1p*******],success (res) { console.log(res);wx.g…

为什么要使用加密软件?

一、保护数据安全:加密软件通过复杂的加密算法对敏感数据进行加密处理,使得未经授权的人员即使获取了加密数据,也无法轻易解密和获取其中的内容。这极大地提高了数据在存储、传输和使用过程中的安全性。 二、遵守法律法规:在许多国…

axios 下载大文件时,展示下载进度的组件封装——js技能提升

之前面试的时候,有遇到一个问题:就是下载大文件的时候,如何得知下载进度,当时的回复是没有处理过。。。 现在想到了。axios中本身就有一个下载进度的方法,可以直接拿来使用。 下面记录一下处理步骤: 参考…

一款好用的特殊字符处理工具

跟mybatis代码的时候,偶然发现的一款特殊字符处理工具java.lang.StringTokenizer。平常,我们看到的mybatis mapper.xml里面各种换行各种缩进,但日志文件里面的sql都是整整齐齐的。没有换行符,缩进等。就是利用该工具做的格式化处理…

Web前端知识视频教程分享

资料下载地址: https://545c.com/f/45573183-1323561488-e4957b?p7526 (访问密码: 7526)

《前端开发实战 · videojs 视频需求开发》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

026-GeoGebra中级篇-曲线(2)_极坐标曲线、参数化曲面、分段函数曲线、分形曲线、复数平面上的曲线、随机曲线、非线性动力系统的轨迹

除了参数曲线、隐式曲线和显式曲线之外,还有其他类型的曲线表示方法。本篇主要概述一下极坐标曲线、参数化曲面、分段函数曲线、分形曲线、复数平面上的曲线、随机曲线、和非线性动力系统的轨迹,可能没有那么深,可以先了解下。 目录 1. 极坐…

docker学习笔记-03

docker学习笔记 ---每特教育 docker命令 1.docker images 镜像缓存 docker images 镜像缓存 REPOSITORY 存储库名称 Tag 镜像的标签 不写版本号码 默认下载最新latest镜像 IMAGE ID 镜像id CREATED 创建时间 SIZE 大小 docker images 查看本地镜像…

【常见开源库的二次开发】基于openssl的加密与解密——Base的编解码(二进制转ascll)(二)

目录: 目录: 一、 Base64概述和应用场景 1.1 概述 1.2 应用场景 二、Base16 2.1 Base16编码 2.2 Base16编解码 三、Base64 四、OpenSSL BIO接☐ 4.1 Filter BIOs: 4.2 Source/Sink BIOs: 4.3 应用场景: 4.4 具体使用&…

平替ChatGPT的多模态智能体来了

在人工智能领域,多模态技术的融合与应用已成为推动技术革新的关键。今天,我们用智匠AI实现了完全由国产模型驱动的多模态智能体——智酱v0.1.0,它不仅能够媲美ChatGPT的多模态能力,更在联网搜索、图片识别、画图及图表生成等方面展…

EMQX开源版安装

一、EMQX是什么 EMQX 是一款开源的大规模分布式 MQTT 消息服务器,功能丰富,专为物联网和实时通信应用而设计。EMQX 5.0 单集群支持 MQTT 并发连接数高达 1 亿条,单服务器的传输与处理吞吐量可达每秒百万级 MQTT 消息,同时保证毫秒…

flutter实现语言的国际化

目录 前言 一、GetX实现国际化(推荐) 1.安装Getx 2.创建国际化的文件 3.使用国际化字符串 4.配置GetMaterialApp 5.更改语言 6.系统语言 ​编辑 7.原生工程配置 1.iOS工程配 1.打开iOS工程,在Project的info里面添加语言 2.创建String File文件 2.andr…

vi 编辑器快捷生成 main 函数和基本框架

step1: 执行 sudo vi /etc/vim/vimrc &#xff08;修改vimrc需要管理员权限&#xff1a;sudo&#xff09; step2:输入用户密码&#xff0c;回车, 编辑vimrc文件 step3:在尾行输入以下代码&#xff08;可复制&#xff09; map mf i#include<stdio.h><ESC>o#includ…

uniapp 实现上传文件的功能

上传单个文件 <script setup>const handleUploadClick () > {console.log("上传文件")uni.chooseImage({success: (chooseImageRes) > {const tempFilePaths chooseImageRes.tempFilePaths;console.log("用户选择的图片&#xff1a;", temp…

数据结构(复杂度)

复杂度 算法在编写成可执行程序后&#xff0c;运⾏时需要耗费时间资源和空间(内存)资源。因此衡量⼀个算法的好 坏&#xff0c;⼀般是从时间和空间两个维度来衡量的&#xff0c;即时间复杂度和空间复杂度。 时间复杂度主要衡量⼀个算法的运⾏快慢&#xff0c;⽽空间复杂度主要…

VsCode 与远程服务器 ssh免密登录

首先配置信息 加入下列信息 Host qb-zn HostName 8.1xxx.2xx.3xx User root ForwardAgent yes Port 22 IdentityFile ~/.ssh/id_rsa 找到自己的公钥&#xff0c;不带pub是私钥&#xff0c;打死都不能给别人。复制公钥 拿到公钥后&#xff0c;来到远程服务器 vim ~/.ss…

vue的学习--day1

一、软件的安装 首先&#xff0c;安装vscode,这个安装好像没有什么需要注意的点&#xff0c;如果不放心的话就网上找个博客&#xff0c;跟着步骤安装即可。 安装完成之后&#xff0c;在组件&#xff08;下图&#xff09;中安装相应的插件。首先建议英文和我一样不好的&#x…