漫话拥塞控制:Capacity-Seeking 与 QoE

IETF117 CCWG 大会链接:IETF117-CCWG-20230725-2200,更详细信息以及讨论:https://github.com/ietf-wg-ccwg/wg-materials/tree/main/ietf117。

短评:

  1. 传统拥塞控制算法几乎都在不断冒险上探更多带宽,并在过程中忍受丢包,但真的需要更多带宽吗?
  2. 传统拥塞控制算法对公平性有严格要求,但真的需要在各个流之间均分带宽吗?
  3. 传统拥塞控制肇始于文件传输,那么今天互联网流量中,文件传输到底占据多大比重?

当谈到拥塞控制时,几乎所有拥塞控制算法都有一个默认假设:保证公平性的前提下占据更多带宽。

这也是 Capacity-Seeking 算法的基础。

但这个默认假设在当今的流量背景下要重新审视其必要性:

  • 当今带宽资源逐渐丰盈,而公平性在资源受限场景意义更大(贫穷才需要公平,所谓不患寡而患不均)。
  • 当今生产性流量越来越在乎 QoE,类似直播流量并不需要尽可能大的带宽,但需要保持低卡顿。
  • 无论从资源利用率还是公平性考虑,拥塞控制都需要重评估。

IETF117 CCWG 大会 上,有人提到 “拥塞控制” 这个词在当代容易引起误解,应换成类似速率优化器等其它词。算法应以避免饥饿为目标,而不应执着专注于几个连接获得完全公平的带宽,也不应执着于尽可能获得更大的带宽。确实,在大文件传输占比逐步下降的过程中,拥塞控制应该转移到 BoE-Based。

我的意思是,当然,即使采用了 QoE-Based 算法,以流媒体传输为例,人人都想看最高清,仍免不了 application 自行 probe up,试图找到更多带宽以增强 QoE,但和单纯 Capacity-Seeking 相比,去除了所有流公平均分带宽的拥塞控制约束,这是 QoE-Based 算法最大的意义,让所有流在自组织意义上去自行公平。这就好比高速公路上的汽车,车技好有急事的开得快些,新手或更注重安全距离的开得慢些,虽然大家没有公平共享车道资源,但总体上大家都很满意,这就是 QoE,主打一个主观感受,而非客观约束。

下面简单评价传统的和新式的拥塞控制算法。

10Gbps 剩余带宽,一条直播流只需 1Gbps,按传统拥塞控制观点,这是 application-limited 流,拥塞控制无用武之地,但在 cubic 治下,若不小心丢了一个包,inflight 依然会降 30%,在 bbr 治下,为支持 bbr 状态机,隔段时间 inflight 就主动下降,这无疑会影响 QoE。对于这条对带宽需求不大的流而言,掣肘的不是网络实际状况,而是拥塞控制算法。
对毫无 QoE 的 Capacity-Seeking 大文件传输,固定大小文件在逐渐增长的带宽看来越来越小。1Gbps 带宽下花 10 分钟下载完的文件在 10Gbps 带宽下只需要 1 分钟,没有对网络的总流量产生影响,人畜无害。

但对生产性流量,比如直播,编码流量随网络有效带宽变化而变化,而提供有效带宽的正是拥塞控制算法。以 bbr 为例,如果 bbr 高估有效带宽,直接结果是更多流量被注入网络,由于算法误判增加网络总流量,这是预期之外的。

传统算法对带宽高估,相比文件传输仅引入重传流量,生产性流量会直接引入额外正常流量,丢包重传流量可通过 RED 等大大缓解,但额外生产性流量却无法缓解,因为它是直接对算法结果的反馈。

生产性流量严重依赖传统算法的带宽预估结果,但传统算法由于可利用的信息量非常有限,对带宽的误估是一定的,传统算法对拥塞的反馈周期是 RTT 级,额外流量可在至多若干 RTT 内收敛,但生产性流量的反馈周期却长很多,至少要覆盖抗抖 buffer,额外注入的流量对网络整体拥塞的影响因此严重得多。

与基于传统算法的认知相反,生产性流量倾向于基于 QoE 指标指导数据生产速率,而不是基于传统算法的丢包,延时,抖动等指标,同样的,生产性流量关注 QoE 公平,而非带宽公平,大家都获得不错的体验,不必非要获得相同的带宽。
另一方面,IETF117 CCWG 大会 “Guidelines for Internet Congestion Control at Endpoints” 这一趴也提到,网络拥塞是统计复用网络上必然会发生的事件,没什么大不了的,而持续的网络拥塞却是应该避免的,换句话说,瞬时拥塞是常态,持续拥塞是灾难,这两件事应该分别被处理,然而一直以来的传统算法都没将这两件事分别对待。

这给出一个看起来矛盾但有用的启示,当拥塞发生时,如何判定它是瞬时的还是持续的,瞬时拥塞持续多久才需进行反应,当拥塞真正持续时,减少 “这次” 的发送量优于减少 “总” 发送量。但如果在相对较短但又不是瞬时的 “一小段时间” 时间内在减少了发送量后仍无法改善 QoE,说明这次拥塞事件事不关己,但拥塞控制是全局动作,所以又不能高高挂起,只需维持小发送量,不必继续无效收敛。

评论区谈到措辞问题,当试图用 “带宽优化” 替代 “拥塞控制” 时,在心理上更容易让人走向自私,谈到 “优化” 这个词,都是自私的,但拥塞控制却可以让人在心理上保持收敛。特别是 QoE-Based 算法,更要 “自觉” 进行某种控制,而不是一味地盲目优化。类比文处我举的高速公路的例子,QoE-Based 算法缺乏内在的全局收敛机制,结局并非某种资源的公平分配,而是大家感觉都还行,显然更不适合使用 “优化” 这个词,就好像高速公路上不提倡变道超车一样,但也并不阻止。

至于文件传输,也许可以将它纳入 QoE 范畴,比如最简单的限速措施,现代网络带宽已足够大,凭什么让贪婪的 Capacity-Seeking 算法独享。

最后说说重传,现代网络丢包很罕见,如果 QoE-Based 算法生效,重传亦可激进,因为拥塞丢包也罕见。
当然,对于传统算法领域内部,一叶以障目,传统算法就是全部。

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

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

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

相关文章

channel通道笔记

channel通道笔记 介绍 语法 1.一般使用make创建channel(常用) c : make(chan datatype),datatype是数据类型 2.直接显示声明,创建的值为空,一般没有太大意义 var c chan datatype 三种定义写法: 既可以收数据又可以发数据:chan datatype只可以收数据:chan <- datatype只可…

求解n阶勒让德多项式的值

描述 用递归方法求n阶勒让德多项式的值&#xff0c;递归公式为&#xff1a; 在主函数中输入一个整数n和一个实数x&#xff0c;调用函数 legendre(n,x)&#xff0c;并输出其返回值。 输入 第一行输入一个整数n&#xff0c;表示阶数&#xff1b;第二行输入一个实数x。 输出 …

python学习(廖雪峰的官方网站部分,自学笔记)

python学习 廖雪峰的官方网站强烈推荐 字符串 Python提供了ord()函数获取字符的整数表示&#xff0c;chr()函数把编码转换为对应的字符 ord( )先当与把字符转成整形&#xff0c;chr( ) 把编码转化成相应的字符 有些时候&#xff0c;字符串里面的%是一个普通字符怎么办&…

java-多线程简述

目录 1.实现多线程1.1简单了解多线程【理解】1.2并发和并行【理解】1.3进程和线程【理解】1.4实现多线程方式一&#xff1a;继承Thread类【应用】1.5实现多线程方式二&#xff1a;实现Runnable接口【应用】1.6实现多线程方式三: 实现Callable接口【应用】1.7设置和获取线程名称…

Photon之如何解决Photon Server无法在局域网使用的bug

前言 先介绍一下Photon的两个服务器服务: Photon Cloud 是一个完全托管的软件即服务 (SaaS) 解决方案。我们可以完全专注于应用程序客户端,而托管、服务器操作和扩展均由光子官方负责。 Photon Server 是一个本地服务器应用程序,我们可以在本地或指定的计算机上运行和托管。…

P5960 【模板】差分约束算法

【模板】差分约束算法 题目描述 给出一组包含 m m m 个不等式&#xff0c;有 n n n 个未知数的形如&#xff1a; { x c 1 − x c 1 ′ ≤ y 1 x c 2 − x c 2 ′ ≤ y 2 ⋯ x c m − x c m ′ ≤ y m \begin{cases} x_{c_1}-x_{c_1}\leq y_1 \\x_{c_2}-x_{c_2} \leq y_2 \\…

【机器学习】 贝叶斯理论的变分推理

许志永 一、说明 贝叶斯原理&#xff0c;站在概率角度上似乎容易解释&#xff0c;但站在函数立场上就不那么容易了&#xff1b;然而&#xff0c;在高端数学模型中&#xff0c;必须要在函数和集合立场上有一套完整的概念&#xff0c;其迭代和运算才能有坚定的理论基础。 二、贝叶…

Sequence 2023牛客暑期多校训练营6 E

登录—专业IT笔试面试备考平台_牛客网 题目大意&#xff1a;有一长度为n的数组a&#xff0c;有q次询问&#xff0c;每次要求将[l,r]的区间分成k个连续区间&#xff0c;满足每个区间和都是偶数&#xff0c;能满足要求就输出YES 1<n,q<1e5;0<ai<1e10;1<l<r&l…

Gson:解析JSON为复杂对象:TypeToken

需求 通过Gson&#xff0c;将JSON字符串&#xff0c;解析为复杂类型。 比如&#xff0c;解析成如下类型&#xff1a; Map<String, List<Bean>> 依赖&#xff08;Gson&#xff09; <dependency><groupId>com.google.code.gson</groupId><art…

在CSDN学Golang场景化解决方案(EFK分布式日志系统方案)

一&#xff0c;ElasticSearch 分布式集群部署 在 Golang EFK 分布式日志系统方案中&#xff0c;ElasticSearch 是一个分布式搜索引擎和数据存储库&#xff0c;它可以用于存储和搜索大量的日志数据。以下是 ElasticSearch 分布式集群部署的步骤&#xff1a; 下载 ElasticSearc…

MyBatis核心 - SqlSession如何通过Mapper接口生成Mapper对象

书接上文 MyBatis – 执行流程 我们通过SqlSession获取到了UserMapper对象&#xff0c;代码如下&#xff1a; // 获取SqlSession对象 SqlSession sqlSession sqlSessionFactory.openSession();// 执行查询操作 try {// 获取映射器接口UserMapper userMapper sqlSession.get…

vue SKU已知sku.tree算出sku.list类目值和id

已知sku.tree算出sku.list类目值和id <van-skuref"sku"v-model"showBase":close-on-click-overlay"closeOnClickOverlay":goods"skuData.goods_info":goods-id"skuData.goods_id":hide-stock"skuData.sku.hide_stoc…

数据结构---B树

目录标题 B-树的由来B-树的规则和原理B-树的插入分析B-树的插入实现准备工作find函数insert中序遍历 B-树的性能测试B-树的删除B树B树的元素插入B*树的介绍 B-树的由来 在前面的学习过程中&#xff0c;我们见过很多搜索结构比比如说顺序查找&#xff0c;二分查找&#xff0c;搜…

mac安装nacos,M1芯片

第一步&#xff0c;官网下载 》nacos官网 去github中下载对应的版本&#xff0c;本人下载的是1.4.1版本 在这儿选择其他的版本&#xff0c;下面这里选择 tar.gz 压缩包 解压后放到一个非中文的目录下&#xff0c;我选择在 user目录下面创建一个other目录&#xff0c;将使用的环…

初识Flask:Python轻量级Web框架入门教程

Flask是一个用Python编写的轻量级Web应用框架。由于其“微”性质&#xff0c;Flask在提供核心服务的同时&#xff0c;仍然提供了许多扩展的可能性。在这篇文章中&#xff0c;我们将从最基础开始&#xff0c;学习如何使用Flask构建一个Web应用。 一、安装与初次启动 首先&…

[回馈]ASP.NET Core MVC开发实战之商城系统(五)

经过一段时间的准备&#xff0c;新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始&#xff0c;在之前的文章中&#xff0c;讲解了商城系统的整体功能设计&#xff0c;页面布局设计&#xff0c;环境搭建&#xff0c;系统配置&#xff0c;及首页【商品类型&#xff0c;ba…

freeswitch的mod_xml_curl模块动态获取dialplan

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 mod_xml_curl模块支持从web服务获取xml配置&#xff0c;本文介绍如何动态获取dialplan配置。 环境 centos&#xff1a;CentOS release 7.0 (Final)或以上版本 freeswitch&#xff1a;v1.6.20 GCC&#xff1a;4.8.5…

人机融合智能中的事实与价值

在人机融合智能中&#xff0c;事实和价值分别扮演着不同的角色和功能。 事实是客观存在的真实描述&#xff0c;可以通过数据、观测和验证等方式获取。在人机融合智能中&#xff0c;人工智能通过处理和分析大量的数据来提供客观事实的支持。例如&#xff0c;在搜索引擎中&#x…

小乌龟(TortoiseGit)连接GitLab

目录 &#x1f35f;写在前面 &#x1f35f;实验目标 &#x1f35f;安装gitlab &#x1f37f;1、安装依赖 &#x1f37f;2、下载清华gitlab包 &#x1f37f;3、安装gitlab &#x1f37f;4、修改配置文件 &#x1f37f;5、管理命令 &#x1f35f;访问gitlab &#x1f35f;界面设置…

【WebRTC---源码篇】(二:一)PeerConnection详解

Track的添加 上图是整体流程图 RTCErrorOr<rtc::scoped_refptr<RtpSenderInterface>> PeerConnection::AddTrack(rtc::scoped_refptr<MediaStreamTrackInterface> track,const std::vector<std::string>& stream_ids) {RTC_DCHECK_RUN_ON(signal…