谁该来负责拥塞控制

news2025/1/21 2:58:33

寻找一种 host 公平而非 packet 公平的方法,有趣的是,CSMA/CD 网络就体现了这种方法。

端到端拥塞控制算法(cca)准不准先不论,仅说让它们运行,被控制的流至少要持续 2 个 RTT,一条持续传输的流是多数 cca 的约束。持续的流才能为 sender 带来自反馈信息作为 cca 输入以识别和控制拥塞。

可很多流量是 request/response 这种 one shot pingpong 类型,显然无法使用类似 cubic,bbr 等 cca 对其进行拥塞控制。

这种困境下,各公司的能人于是想出各类启发式算法,且这类算法还都是连接内闭环的,不屑依赖任何外部信息和历史信息,然后拿着这些算法参加大会,做讲座,写公众号,提派驰,不亦乐乎。这都是纯扯淡,不看历史,预测未来,可以预测地震了。

各类端到端 cca 本就是读史知未来,用一个 RTT 前的状态策划一个 RTT 后的策略,本身就有滞后性,对于 one shot pingpong 流量更是无历史可借鉴,只能说任何预测都是凭空的。

还要从最初去寻找根源,CSMA/CD 网络需要拥塞控制吗?它真不需要,就算 host 激进发送,最终只是本地 queue 溢出,影响不到别的 host。任何 host 在发送前都要侦听并在冲突时退避,这些对每一个 host 公平,而不仅仅对每一个 packet 公平。

CSMA/CD 天然携带 host 公平性,这种公平性由网络层面的载波监听和冲突退避来保证,而不是由端到端的传输层算法来保证。

在 交换以太网的诞生 这篇随笔中,我用一种逐步发展的方法描述了 CSMA/CD 总线网络到交换式网络的平滑过渡,最终一个总线上所有 host 的 CSMA/CD 的控制器(也就是实施载波监听,冲突退避的那个东西)变成了交换机,而交换机由交换网络和 buffer 组成。

那么由交换机保证公平性就合理了。交换机确实也是这么做的,比如支持各种公平队列调度算法,但交换机却不是无条件保证这些配置一定是正确的,比如对于 UDP 流量,交换机往往采用一种粗旷的方式。此外,交换机识别每一个 host 来确保公平并控制拥塞会带来巨大的单点性能开销并影响可用性,交换式网络的拓扑结构意味着它需要更上层的交换机无关的拥塞控制方案。

端到端拥塞控制是 1980 年代的一个创举,但它固有的 RTT 滞后性也必须接受,这种端到端方案需要从流自身提取拥塞信息,就需要流的连续性,也就是文初的描述,它无法作用于 one shot pingpong 流量。

要把连续流和 one shot pingpong 流纳入同一个拥塞控制体系,还得从 CSMA/CD 中吸取经验。既然载波监听和冲突退避从分布式的网卡集中到了交换机,让交换机负责拥塞控制就是高尚的。

CSMA/CD 网络中 host 的本地溢出正好对应交换网络中交换机发出的源抑制报文,虽然源抑制报文的传播时延不可消除,但至少无需等满一个整 RTT 才能获得拥塞信息:
在这里插入图片描述

源抑制的方案和问题在 RFC 896 提到,彼时是一个端到端拥塞控制方案尚未被引入的干净时期,但现在却是端到端方案也出现了问题的浑浊时期,至少在数据中心,源抑制的思想早就落地,PFC,INT-Based cc 均是源抑制思想的体现,就像 CSMA/CD 反压本地 host,反压上一跳是一个意思。

想更高效精准进行拥塞控制,离不开交换机(包括一切转发节点)的协助,包括不限于公平队列,L4S,发送源抑制,甚至可以提前预测拥塞并广播。不要总被互联网瘦网胖端的模型冲昏头脑,也不要总以 “我们动不了交换机” 而执着于闭环端到端方案,闭环端到端方案的上限大概就在 cubic 和 bbrv1 中间的某个点。交换机明明是拥塞的目击者,却偏偏将其排除在事外,这是不高尚的。

但个中原因也并非不可理解,这又是程序员和网工之间反射出来的端和网之间的本质差异,程序员守着 host,当然看不到网络的细节,也就想在端到端闭环了。

幸运的是,数据中心网络已经越来越多将邀请交换机一起进行拥塞控制,而对于广域网,也有了 L4S 等方法,CDN 和 SDWAN 的部署事实上将用户相关的广域网局限在 lastlime,而随着带宽的增加和直播的发展,配合良好的编解码技术,永不拥塞的 application-limited 流量将越来越占主导地位。

如此背景下,拥塞控制确实要换一个思路,将避免拥塞崩溃为目标过渡到以提高带宽利用率为目标,bbr 已经在 2016 年走上了新路,但即便 bbr 也依赖一条持续足够久的长流。

皮鞋没有蹬上,露着白袜子。

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

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

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

相关文章

12. 自动化项目实战

目录 1. 登录测试 2. 测试首页的帖子列表数不为0 3. 帖子详情页校验 4. 发布帖子 5. 退出登录 自动化项目实施的基本流程如下图所示: 手工测试用例、自动化测试用例。 1. 登录测试 校验登录后主页显示的用户名称和登录时输入的用户名是否相等。 public class…

牛客小白月赛77 D-小Why的密码锁 双哈希做法

这道题没卡自然溢出的哈希&#xff0c;但mod为1e9的哈希被卡了。 双哈希只需把单哈希做法中的lst和ans转换成 <PII&#xff0c; int>类型的即可。 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing nam…

使用Docker安装和部署kkFileView

&#x1f388;1 参考文档 kkFileView官方文档 &#x1f680;2 安装kkFileView 拉取Redis镜像。 docker pull keking/kkfileview启动docker容器。 docker run -it -d -p 8012:8012 keking/kkfileview --restart always解释&#xff1a; docker run redis # 从kkfileview镜像运行…

ArcGIS Pro实践技术应用、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合

GIS是利用电子计算机及其外部设备&#xff0c;采集、存储、分析和描述整个或部分地球表面与空间信息系统。简单地讲&#xff0c;它是在一定的地域内&#xff0c;将地理空间信息和 一些与该地域地理信息相关的属性信息结合起来&#xff0c;达到对地理和属性信息的综合管理。GIS的…

c语言每日一练(13)

前言&#xff1a;每日一练系列&#xff0c;每一期都包含5道选择题&#xff0c;2道编程题&#xff0c;博主会尽可能详细地进行讲解&#xff0c;令初学者也能听的清晰。每日一练系列会持续更新&#xff0c;上学期间将看学业情况更新。 五道选择题&#xff1a; 1、程序运行的结果…

理解 std::thread::join

C多线程并发编程入门&#xff08;目录&#xff09; 本文用最简单易懂的实际案例&#xff0c;讲清楚了 join 的实际内涵&#xff0c;保证你过目不忘。 Hello join 示例 join 函数是我们接触C多线程 thread 遇到的第一个函数。 比如&#xff1a; int main() {thread t(f);t.…

苹果Mac系统如何优化流畅的运行?提高运行速度

Mac系统的稳定性和流畅性一直备受大家称赞&#xff0c;这也是大多数人选择Mac的原因&#xff0c;尽管如此&#xff0c;我们仍不时地对Mac进行优化、调整&#xff0c;以使其比以前更快、更流畅地运行。以下是小编分享给各位的Mac优化方法&#xff0c;记得保存哦~ 一、释放被过度…

linux深入理解多进程间通信(未完)

1.进程间通信 1.1 进程间通信目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程资源共享&#xff1a;多个进程之间共享同样的资源。通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xff09;发生了某种事件…

MySQL总复习

目录 登录 显示数据库 创建数据库 删除数据库 使用数据库 创建表 添加数据表数据 查询表 添加数据表多条数据 查询表中某数据 增insert 删delete 改update 查select ​ where like ​编辑 范围查找 order by 聚合函数 count max min sum avg g…

创建2个线程并执行(STL/Windows/Linux)

C并发编程入门 目录 STL 写法 #include <thread> #include <iostream> using namespace std;void thread_fun1(void) {cout << "one STL thread 1!" << endl; }void thread_fun2(void) {cout << "one STL thread 2!" <…

ip地址、LINUX、与虚拟机

子网掩码&#xff0c;是用来固定网络号的&#xff0c;例如255&#xff0c;255,255,0&#xff0c;表明前面三段必须为网络号&#xff0c;后面必须是主机号&#xff0c;那么怎么实现网络复用呢&#xff0c;例如使用c类地址&#xff0c;但是正常子网掩码是255&#xff0c;255,255,…

抽象轻松的C语言

#include <stdio.h> /* 预处理指令*/ /* 函数 */ int main() {int log 3.14;printf("hello word * %d\n easy", log);getchar();/* 获取键盘输入的字母&#xff0c;在这个程序中的作用是防止程序瞬间关闭 */return 0; } 上一篇说过&#xff0c;C程序是C语言的…

linux系统中串口驱动框架基本分析(经典)

第一&#xff1a;区分不同的终端类型 串行端口终端&#xff08;/dev/ttySn&#xff09; 串行端口终端&#xff08;Serial Port Terminal&#xff09;是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。 有段时间这些串行端口设备通常被称为终…

CXL寄存器介绍(2)- CXL DVSEC

&#x1f525;点击查看精选 CXL 系列文章&#x1f525; &#x1f525;点击进入【芯片设计验证】社区&#xff0c;查看更多精彩内容&#x1f525; &#x1f4e2; 声明&#xff1a; &#x1f96d; 作者主页&#xff1a;【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN&#xff0c…

4.0 Spring与Dubbo整合原理与源码分析

#Dubbo# 文章介绍 Dubbo中propertie文件解析以及处理原理Dubbo中@Service注解解析以及处理原理Dubbo中@Reference注解解析以及处理原理1.0 整体架构和流程 应用启动类与配置 public class Application {public static void main(String[] args) throws Exception {Annotation…

Idea中 css 、js 压缩插件会自动生成xxx.min.css、xxx.min.js文件

第一步&#xff1a;下载yuicompressor-2.4.8.jar 下载路径&#xff1a;打开搜索 YUI compressor Maven Repository: Search/Browse/Explore (mvnrepository.com)https://mvnrepository.com/ 找到点击下载即用&#xff08;如下图&#xff09; 创建文件夹&#xff0c;放入idea文…

进制转换(二进制、八进制、十六进制、十进制)

一、进制表示 二进制&#xff1a;每一位只有两种符号表示 -> 0,1 例如 (101011)₂&#xff0c;也可写作101011B&#xff0c;其中B是Binary英文的缩写。八进制&#xff1a; 每一位有8种符号表示(0~7)&#xff0c;例如(1652)₈&#xff0c;也可写作1652O&#xff0c;其中O是O…

如何查看Windows下软件使用的端口号和PID

文章目录 解决方法 解决方法 打开资源管理器&#xff1a;按下Win R&#xff0c;输入"resmon"&#xff0c;然后按Enter键 在资源监视器窗口中&#xff0c;切换到"网络"选项卡。 在"侦听端口"部分&#xff0c;你可以看到正在使用的端口号和PID…

Android——基本控件(下)(二十一)

1. 数据存储 1.1 知识点 &#xff08;1&#xff09;掌握Android数据存储的分类&#xff1b; &#xff08;2&#xff09;可以使用SharedPreferences存储数据。 1.2 具体内容 对于我们数据的存储而言&#xff0c;Android一共提供了5个数据存储的方式&#xff1a;SharedPrefe…

JS算法与树(二)

前言 二叉搜索树&#xff08;BST&#xff09;存在一个问题&#xff1a;当你添加的节点数够多的时候&#xff0c;树的一边可能会非常的深。而其他的分支却只有几层。 AVL树 为了解决上面的问题&#xff0c;我们提出一种自平衡二叉搜索树。意思是任何一个节点左右两侧子树的高度之…