网络拥塞控制,对越远的流量越宽容

news/2024/5/19 19:33:33/

考虑下面的网络传输场景:
在这里插入图片描述
S1,S2,S3,S4 向 D 方向发送,R4 发生拥塞。R4 必须丢弃一些数据进行疏导反馈拥塞信号,否则谁也过不去。
优先丢掉离得最近的 S4 的数据,其次依次丢 S3,S2,S1。依据是 S1 已经走这么远了,丢掉 S1 流量的话,R1,R2,R3 的工作就浪费了,趁着 R4 刚上路,就丢 R4,此外,S4 距离 R4 最近,丢包反馈可更快到达,更快缓解拥塞。

以上是午饭后想到的。引申一下,可以根据 IP 头的 TTL 字段指示丢包决策,TTL 越大,丢包概率越大。

每经一跳转发,即经一次收敛,“收敛” 度量和其它流量共享带宽的程度。收敛次数越多,统计平均来看,特定一条流的占比越小,虽占比小拥有更大加速比,但获得的更大加速比被逐跳稀释。同时,每一跳拥塞是 “or” 关系,经由跳数越多,经历拥塞概率越大,显然这是一个漏桶。

综上,流量源越远,转发至此成本越高,丢弃后对全链路资源越浪费,但越远的流量属强弩之末,抢占力越差,对当前节点拥塞贡献越小。
在这里插入图片描述

策略显然是:丢包越早越好,拥塞通知越远越好,通知强度越近越低,因为缓解不了还能丢包。

  • 必须丢包时,丢掉始发站至此距离最近的报文。
  • 按照始发站至此由远而近强度递减通告 ECN。

尽量让已经被转发了很远的报文安全通过,否则前面的逐跳转发能耗就浪费了。对来自越远方的流量越宽容,给它们强烈 ECN 压力但尽量不丢弃,反之,对离得越近的流量越严格,ECN 压力不大,ECN 无效后则用丢包来提示拥塞,反正丢了对整体资源浪费也不大,对于这些距离拥塞源近的不幸流量,优先丢弃刚刚上路的报文,将拥塞尽量抑制在离源头近的地方意味着及时止损,不可惜,整体上能耗有效利用率反而较好。

在具体实践上,还可以让反向流量捎带 ECN。意思是用五元组倒置查询反向队列,命中后将 ECN 打入这些报文,可以加快 sender 感知,又不增加额外源抑制流量。

回到最初的午休图,虽合理,但凭什么丢 S4 的流量,这不公道。

看起来 S1~S4 都平等地向 D 的方向发数据,且拥塞看起来是 S1~S3 的汇聚流量导致,凭什么丢无辜的 S4。

首先,从技术上讲,不能无条件按 TTL 丢包,TTL 丢包应是级联的最后一个策略,在此之前应该先按流量加权公平排队以及其它可能的更公平排队规则。

其次,假设已经完成加权公平排队,如果 S4 流量 > S1,S2,or S3 流量,那理应丢 S4 流量,而上述衰减法则使 S4 流量 < S1,S2,or S3 流量概率极低,若发生,在 TTL 丢包前应发现,TTL 丢包的意义在于,如果 S1,S2,S3,S4 流量均匀相等,丢 S4 是有意义的。

并非对 S4 不公平,只能说 S4 很不幸,拥塞在 R4 已经发生,必须取舍,只能牺牲 S4,这样对全局能效最佳。拥塞控制作为一个整体,必须看全局意义。

上周末写过一些想法。去中心分布式网络本质上是有损的,丢包必存在,除端到端算法需高效且收敛,网络对丢包的决策也要在全局上保持高效。

文初场景,你可能觉得岂不是便宜了 S1?非也!如果 S1 有意激进发送,拥塞点大概率转移到 R1,按照相同的策略,被丢弃的就是 S1 的流量了。这策略足够公平且它本身就是个紧箍咒反馈环,所以别作恶。

值得一提的是,对于 capacity-seeking protocol,单跳 buffer 场景经过了普遍的分析和论证,但对于级联 buffer,N’ = N * T / (T + N) < N 逐级衰减将损害这些 protocol 的 probe 行为的公平性,比如 AIMD 的 AI 例程和 BBR 的 probeup 例程,而 TTL -based 丢包将缓解这种不公。

本文上述 TTL 并不单指 IP 的 TTL,vxlan 内可携带,自定义协议也可携带,大致只是借用 TTL 这个概念说个意思,此外,上述 ECN 也并不单指 TCP/IP 的 ECN,大致只是借这个概念说个主动拥塞通知的意思。

总结一下本文要旨,当损失只涉及单条流时,比如拥塞排队,那就排着吧,一旦损失涉及到他者,比如其它公共设施,就要全局考虑,让损失最小化,比方说不能造成其它公共设施由于做无用功而浪费资源。

还是现实中的例子。

医院挂号看病如果能照这个策略实施就好了,如果截止最后时间还剩下几个号,优先给远路过来看病的,因为来一趟太麻烦了,如果不这么做,难免会对公共设施造成不必要的消耗,如果病人返回家,来回这一趟就白跑了,这是对能源的损耗,如果病人选择住宿,就要占位置,也是对公共资源的消耗。距离医院近的,大不了第二天再来,也方便。

超市的情况看起来和 TTL 丢包策略相反,但其实类似,超市有小件物品快捷结账通道,越是路远的买的东西越多,越要排队,但排队是有平均排队时间的,和超市关门不一样。如果超市到了关门时间,往往会关闭小件快捷通道,分流大件物品排队,还是要照顾远道而来的,至于买小件的,不想排队,出门去便利店买也一样,虽然贵,但买的不多,也贵不到哪里。

拥塞控制的目标不是为了提高效率,而是为了最小代价止损,因为拥塞本身已经是损失了。在分布式网络中,网络比端到端连接更具有全局视角,做出的决策对止损更加有益。

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


http://www.ppmy.cn/news/47287.html

相关文章

ChatGPT会如何改变制造业?

来源 | Smart Industry Edgenesis编译 ChatGPT最新版本的发布成为热门头条。OpenAI表示该版本的ChatGPT能够在多个专业测试中达到“人类水平”的表现&#xff0c;例如司法考试和SAT考试。不过&#xff0c;在工业领域中&#xff0c;ChatGPT能够发挥怎样的作用呢&#xff1f;Sma…

计算广告(十七)

多渠道组合路径效率评价 ​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 分析背景&#xff1a; 电商归因分析通常以 last_click 为基准&#xff0c;将成交转化归功于用户完成转化前的最近一个广告系列。然而&#xff0c;在此之前&a…

HTTP的那些事儿

超文本传输协议&#xff08;Hyper Text Transfer Protocol&#xff0c;HTTP&#xff09;&#xff0c;它是在计算机世界中的两个点之间传递文本&#xff0c;图片&#xff0c;多媒体等超文本文件的协议。HTTP处在数据链路层&#xff0c;网络层&#xff0c;传输层&#xff0c;应用…

java 资料地址汇总

1 SpringBoot - 使用 Assert 校验让业务代码更简洁 SpringBoot - 使用 Assert 校验让业务代码更简洁 2 MyBatis-Plus 还手写 Join 联表查询&#xff1f;一个依赖轻松搞定&#xff0c;真香&#xff01; MyBatis-Plus 还手写 Join 联表查询&#xff1f;一个依赖轻松搞定&#…

中小企业面临怎样的数字化转型局面

当前&#xff0c;我国经济长期向好的基本面没有改变&#xff0c;但承受着“需求收缩、供给冲击、预期减弱”的三重压力&#xff0c;中小企业的数字化转型之路较之以往更加艰难、曲折。为帮助中小企业纾困解难、平稳渡过危机&#xff0c;需进一步优化政策“组合拳”&#xff0c;…

CMake

CMake定义 CMake是一个跨平台的安装&#xff08;编译&#xff09;工具&#xff0c;可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件&#xff0c;能测试编译器所支持的C特性,类似UNIX下的automake。只是 CMake 的组态档取名为 C…

背包问题——01背包|完全背包

目录 前言&背包问题的历史 01背包 1、题目 2、暴力解01背包 Ⅰ、代码 3、动态规划解01背包 Ⅰ、二维dp数组解01背包 1&#xff09;dp数组的含义 2&#xff09;递推公式 3&#xff09;dp数组的初始化 4&#xff09;遍历顺序的讨论 5、代码 Ⅱ、一维数组解01背包 1&…

[API]集合Collection常用方法集合遍历新循环泛型(三)

什么是集合&#xff1a; 集合和数组一样&#xff0c;可以保存一组数据&#xff0c;并且提供了操作数组元素的相关方法&#xff0c;使用用更加方便 集合框架中的相关接口&#xff1a; java.util.Collection接口&#xff1a;是所有集合的顶级接口&#xff0c;封装了所有集合所…

【理解 C++ 中的头文件和源文件的作用 】

include文件中定义 src文件中声明 头文件中应该只放变量和函数的声明&#xff0c;而不能放它们的定义。 在 C 中&#xff0c;头文件和源文件有着不同的作用。它们共同组成了 C 项目的基本结构。让我们逐个了解它们的作用。 头文件&#xff08;.h 或 .hpp 文件&#xff09;&a…

【从零开始学Skynet】实战篇《球球大作战》(十四):agent跨服务器版

至此&#xff0c;我们已完成了《球球大作战》的绝大部分功能&#xff0c;只剩下完 善agent &#xff0c;让它和 scene 服务联动了。 1、多个模块 一般而言&#xff0c;代理服务会承载很多系统&#xff0c;比如邮件、成就等&#xff0c;此处涉及的代码较多&#xff0c;容易混 乱…

初中级测试工程师,软件测试面试题总结大全(功能/接口/自动化测试)你要的都有...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 一般软件测试的面…

程序员只能吃青春饭?3条晋升之路帮你摆脱程序员中年魔咒!

作为一个程序员 尤其是在这些中 不管是中国 还是美国的这些大的公司里边呢 往往呢 有大概两条这样的一个境界之路 根据你自己个人的这种能力兴趣 其实你可以进行自己的选择 科技大佬们其实往往呢也都是从 这个比较年轻的时候对吧 归国创业也好 还是自己出自于草根 然后一下子凝…

【Python_Scrapy学习笔记(十三)】基于Scrapy框架的图片管道实现图片抓取

基于Scrapy框架的图片管道实现图片抓取 前言 本文中介绍 如何基于 Scrapy 框架的图片管道实现图片抓取&#xff0c;并以抓取 360 图片为例进行展示。 正文 1、Scrapy框架抓取图片原理 利用 Scrapy 框架提供的图片管道类 ImagesPipeline 抓取页面图片&#xff0c;在使用时需…

今天面了个字阿里拿38K出来的,真是纹身师闭眼,秀了我一脸啊

公司前段缺人&#xff0c;也面了不少测试&#xff0c;前面一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资在15-20k&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。看简历很多都是4年工作经验&#xff0c;但面试中&#xff0c;不提测…

【已解决】Field ‘id‘ doesn‘t have a default value 错误的解决办法

介绍 这里是小编成长之路的历程&#xff0c;也是小编的学习之路。希望和各位大佬们一起成长&#xff01; 以下为小编最喜欢的两句话&#xff1a; 要有最朴素的生活和最遥远的梦想&#xff0c;即使明天天寒地冻&#xff0c;山高水远&#xff0c;路远马亡。 一个人为什么要努力&a…

Qt 项目A调用项目B方法(项目架构管理)

前言 项目开发中&#xff0c;如果项目比较大&#xff0c;大多采用多项目的方式&#xff0c;主要是为了方便代码管理&#xff0c;也更开发变得更加方便。操作如下&#xff1a; 注&#xff1a;我用的版本是Qt 5.12.3 一、建立项目目录 要求&#xff1a; 1、项目A为主&#xff…

Java之~ Aop自定义注解日志

大纲步骤&#xff1a; 一&#xff0c;创建需要记录的日志表&#xff0c;创建基础方法。&#xff08;省略&#xff09; 二&#xff0c;在需要加记录日志的方法上加Aop注解1&#xff0c;创建一个注解类&#xff0c;Aop中定义一个注解import java.lang.annotation.*; /*** http 请…

Spring IoC注解开发

Component 组件 Controller 控制器 Service 业务 Repository 仓库 这四个标签是为了创建对象 其实他们四个本质都一样&#xff0c;只不过另外三个是Component的别名&#xff0c;在不同层使用容易区分 首先需要加入aop依赖&#xff0c;如果你事先加入spring-context依赖…

JS数组去重的12种方法

一、利用ES6 Set去重&#xff08;ES6中最常用&#xff09; Set对象是ES6中新定义的数据结构&#xff0c;类似数组&#xff0c;它允许存储任何类型的唯一值&#xff0c;不管是原始值还是对象引用。 Array.from()方法就是将一个类数组对象或者可遍历对象转换成一个真正的数组 …

【计算机视觉·OpenCV】使用Haar+Cascade实现人脸检测

前言 人脸检测的目标是找出图像中所有的人脸对应的位置&#xff0c;算法的输出是人脸的外接矩形在图像中的坐标。使用 haar 特征和 cascade 检测器进行人脸检测是一种传统的方式&#xff0c;下面将给出利用 OpenCV 中的 haarcascade 进行人脸检测的代码。 程序流程 代码 impo…