拥控算法BBR入门1

拥塞控制算法只与本地有关

一个TCP会话使用的拥塞控制算法只与本地有关。
两个TCP系统可以在TCP会话的两端使用不同的拥塞控制算法

Bottleneck Bandwidth and Round-trip time

Bottleneck 瓶颈
BBR models the network to send as fast as the available bandwidth and is 2700x faster than previous TCPs on a 10Gb,
100ms link with 1% loss.
BBR powers google.com, youtube.com and apps using Google Cloud Platform services.

旧网络拥塞:只要丢包就代表网络环境不好
在这里插入图片描述
tcp默认的cubic拥塞控制算法频繁上下调整滑动窗口大小,锯齿状
bbr倾向于平稳发送,在实际带宽比较平稳的场景下,吞吐量更大

tcp为什么没有解决这个问题:
tcp在linux内核里,升级太困难。
tcp的一些约束导致rtt算不准,比如ack delay、重传包的seq number不变

cubic: 基于丢包;锯齿形吞吐;事件驱动; tcp的重传包seqId不变,rtt算不准(tcp的ack delay时间影响rtt计算,默认40ms)
bbr: 基于延迟; 有平滑区间;根据rtt建立对带宽(窗口大小)的模型,再加上定时器;quic的重传包,seqId增加(编号id),rtt算得准。区分了具体的重传类型。

bbr:当rtt开始增长时,就达到了最大带宽
cubic:把缓存塞满一直到丢包;对丢包率的容忍非常低,即使只有极少的丢包,吞吐量也会急剧下降

相关命令

在Linux 下检查当前可用的拥塞算法:
sysctl net.ipv4.tcp_available_congestion_control
比如:reno cubic bbr bbr2 hybla highspeed htcp veno westwood vegas

当前使用了哪一种拥塞算法:
sysctl net.ipv4.tcp_congestion_control

sudo tc qdisc replace dev eth0 root netem latency 50ms
在两台服务器的收发每个方向增加50ms的延迟。

sudo tc qdisc del dev eth0 root
取消上述的设置

sudo sysctl -w net.ipv4.tcp_congestion_control=cubic
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr2
修改本机的拥控算法

sudo tc qdisc replace dev eth0 root netem loss 1.5% latency 50ms
在两台服务器的收发每个方向增加50ms的延迟 + 1.%的丢包

实验

作者在TCP上实验
作者这个图画的有点问题,应该是先确定loss,再传输特定数量包,统计不同拥塞控制算法的吞吐量和时延
Andree Toonk 在他的博客中验证了了使用不同拥塞控制算法、延迟和丢包参数所做的各种TCP吞吐量测试的全套测试,证明了在一定的丢包率(1.5%、3%)的情况下BBR的出色表现:
在这里插入图片描述
测试显示了丢包和延迟对TCP吞吐量的巨大影响。在一个高延迟的路径上,仅仅是少量的数据包丢失(1.5%)就会产生了巨大的影响。在这些较长的路径上使用除BBR以外的任何其他技术,当出现哪怕是少量的丢包时,都会造成很大的问题。也只有BBR在任何超过1.5%的丢包损失时都能保持一个不错的吞吐量数字。

BBR使用场景

网络在没有丢包的情况下,Cubic和BBR对于这些较长时延的链路都有很好的表现。而在中度丢包的情况下,BBR的表现就非常突出。

为什么要针对丢包情况而进行优化?
场景:在不同的地方放置有服务器,需要在系统或者服务器之间有源源不断的数据传输。例如日志文件、数据库同步、业务数据的异地备份等等。在复杂的网络环境下,会因为各种原因而出现丢包的情况。在这种场景下,BBR将会大放异彩,帮助维护更好的网络数据传输。

BBR对所谓的“长肥网络”(带宽延迟积大、丢包率高的网络)非常有效,在CDN和视频应用等场景下也被证明有很好的表现。
事实上,Youtube、Spotify和Dropbox大规模应用BBR已经有了很多的积累。这主要是因为BBR会积极地提升到最佳发送速率。

BBR缺点

wifi环境高抖动和波动导致网速变慢

(算不准实时可用带宽/RTT,就会导致流量偏大/偏小,说白了就是计划赶不上变化)

BBR算法以估测瓶颈带宽和RTT来调整发送速率,这种机制在高波动和不稳定的无线环境中可能表现不佳。
带宽估测误差:在WiFi环境中,实际的瓶颈带宽可能变化频繁,BBR的带宽估测如若不准确,会导致发送速率偏高或偏低。
RTT测量波动:高抖动和噪声引入的RTT测量误差,容易导致BBR无法准确捕捉真实网络状况,丢包和重传情况增加。

BBR依赖于精确的带宽估测和RTT测量来调整发送速率,但WiFi网络中的抖动(Jitter)和信号波动会对这些测量造成干扰
高实时抖动:WiFi信号质量因周围环境(如物理障碍、干扰设备、用户密度等)波动较大,导致RTT和带宽测量的不稳定
不可预测的丢包:WiFi网络中的随机丢包(而非拥塞引起的丢包)会导致BBR误判网络状况,影响其测量和调整

拥塞和无线信道竞争

(使用相同无线信道下的争抢,导致更糟)

WiFi网络中用户与用户之间使用相同无线信道,会出现频繁的竞争和碰撞,带来额外的传输延迟和带宽波动
共享信道:在高密度用户环境中,多用户竞争同一个无线信道资源,相互干扰,导致实际可用带宽降低。
复用性差:WiFi采用CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance),高负载下其复用性差,增加拥塞和排队时延

拥塞控制与公平性

(高效利用带宽,但挤占cubic算法带宽)

BBR设计目标:高效利用带宽
在WiFi环境中未必能与其它传统拥塞控制算法(如Cubic)的流量公平发挥作用

Aggressive的探测行为:BBR在初期阶段会探测更高的发送速率,可能导致瞬时拥塞,丢包率增加,反而影响到实际传输性能
对竞争流的不友好:BBR可能在多用户共享信道条件下显得不够温和,导致竞争流公平性问题,影响整体网络性能。

BBR会导致高重传率

拥塞窗口计算方式

BBR的拥塞控制逻辑基于其对网络带宽和RTT的估计,这与传统TCP拥塞控制算法如Cubic或Reno不同
发送速率高:BBR本质上是激进的,它尝试利用尽可能多的带宽。当BBR认为有较高带宽时,它会快速增加发送速率。如果网络没有足够的带宽来支持这个速率,就会导致队列溢出和丢包。
突发流量:由于BBR在探测瓶颈带宽的过程中可能会发送短时高峰流量,容易在网络中产生突发拥塞,导致包丢失和重传。

RTT估算的敏感性

BBR依赖于RTT的精确测量来调整发送速率,但在高抖动网络中,RTT的波动性会影响BBR的准确判断。
RTT波动:在高抖动的网络中,RTT测量的不稳定性会导致BBR频繁调整发送速率。如果RTT波动大,BBR可能会误判当前网络状况,导致不适当的发送速率调整,增加了丢包和重传的概率

带宽探测机制

BBR通过探测高带宽以尽可能利用网络链路,但是这种探测策略在某些情况下会增加丢包率和重传次数。
主动探测:BBR会定期发送探测包来评估网络带宽,这种主动探测行为在网络容量不足时会导致丢包。
过度带宽利用:BBR的设计目标之一是高效利用可用带宽,但在一些环境中(如共享宽带或限带宽环境),这个行为可能会引发频繁的拥塞和重传。

适应性反馈机制

传统TCP拥塞控制算法如Reno和Cubic基于丢包或延时来调整拥塞窗口,而BBR依赖于带宽和RTT估计,这使得它在某些情况下面对高丢包率时的反应可能不够迅速和适应。
过度探测:BBR的拥塞控制主要依据带宽估测,一旦带宽估测过高而实际网络容量不足,容易持续导致大量丢包。
反馈滞后:网络负荷变化频繁时,BBR的调整可能存在滞后。然而主流TCP算法在这种情况下可能会更快地收敛到较为稳定的状态。

优化建议

在WiFi环境中优化BBR算法

调整BBR参数
优化探测和测量周期,适应更高抖动的网络环境。

使用混合控制机制
在WiFi环境中,结合BBR和其他较为保守的拥塞控制算法(如Cubic或Reno),通过混合控制策略提高网络适应性

BBRv2

BBRv2的目标就是解决第一版中存在的一些主要缺点,其改进包括了还使用聚合/运行中的参数增强了网络建模,并增加了对ECN(显式拥塞通知)的支持等
在这里插入图片描述
ECN(显式拥塞通知)

附录

缓冲膨胀

网络设备/系统不必要地设计了过大缓冲区
当网络链路拥塞时,就会发生缓冲膨胀,从而导致数据包在这些超大缓冲区中排队很长时间
在先进先出队列系统中,过大的缓冲区会导致更长的队列和更高的延迟,并且不会提高网络吞吐量
bbr并不会试图填满缓冲区,所以在避免缓冲区膨胀方面有更好表现

弱网环境,引入1.5%的丢包:
cubic:吞吐量下降99.7%
bbr: 吞吐量下降45%

Cubic

一种较为温和的拥塞算法,它使用三次函数作为其拥塞窗口的算法,并且使用函数拐点作为拥塞窗口的设置值。
Linux内核在2.6.19后使用该算法作为默认TCP拥塞算法。
今天所使用的绝大多数Linux 分发版本,例如Ubuntu、Amazon Linux 等均将Cubic作为缺省的 TCP拥塞算法

iperf3

iperf3 是一个用于测量网路吞吐量的工具,可以在网络性能测试中生成 TCP 和 UDP 流量负载。它被广泛用于测试网络的带宽和性能。

iperf3 -c 10.0.1.196 -p 8080

iperf3
用于启动 iperf3 客户端或服务器

-c
表示客户端模式。iperf3 可以运行在客户端模式和服务器模式中。这里的客户端模式用于发送流量到指定的服务器。

10.0.1.196
服务器的 IP 地址。在客户端模式下,这个地址指定了要连接的 iperf3 服务器的 IP 地址

-p 8080
这个选项指定要连接的服务器的端口号

使用 iperf3 工具来启动一个客户端,并连接到 IP 地址为 10.0.1.196,端口为 8080 的 iperf3 服务器。
客户端会生成流量并发送到服务器,从而对网络带宽和其他性能指标进行测试。

以下是一些常用的 iperf3 选项,可以根据具体需求和测试目标来进行配置:
-t:指定测试的持续时间(例如 -t 10 表示进行10秒的测试)
-u:使用UDP而不是默认的TCP协议进行测试
-b:指定带宽,比如UDP模式下可以使用-b 10M限制带宽为10Mbps
-R:反向测试,在客户端接收流量,而不是发送流量
-f:指定输出格式(例如 -f m 表示输出以兆比特为单位的结果)

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

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

相关文章

Java | Leetcode Java题解之第414题第三大的数

题目: 题解: class Solution {public int thirdMax(int[] nums) {Integer a null, b null, c null;for (int num : nums) {if (a null || num > a) {c b;b a;a num;} else if (a > num && (b null || num > b)) {c b;b num;…

驱动器磁盘未格式化危机:专业数据恢复实战指南

认识危机:驱动器中的磁盘未被格式化 在日常的数字生活中,我们时常依赖于各种存储设备来保存重要的文件、照片、视频等数据。然而,当某一天你尝试访问某个驱动器或外接硬盘时,突然弹出的“驱动器中的磁盘未被格式化。您想现在格式…

floodfill+DFS(2)

文章目录 太平洋大西洋流水问题扫雷游戏迷路的机器人 太平洋大西洋流水问题 class Solution { public:vector<vector<int>> res;int m 0, n 0;vector<vector<int>> pacificAtlantic(vector<vector<int>>& heights) {m heights.size…

iOS 18 正式上線,但 Apple Intelligence 還要再等一下

在 iPhone 16 即將正式開賣之際&#xff0c;Apple 如約上線了 iOS 18。雖然今年的重頭戲 Apple Intelligence 還要等下月的 iOS 18.1 才會有&#xff0c;但自訂主畫面和全新的鎖定頁面、控制中心等特性已可在最新的版本中體驗。除此之外&#xff0c;相簿、訊息、地圖、Safari 等…

React学习day07-ReactRouter-抽象路由模块、路由导航、路由导航传参、嵌套路由、默认二级路由的设置、两种路由模式

14、ReactRouter续 &#xff08;2&#xff09;抽象路由模块 1&#xff09;新建page文件夹&#xff0c;存放组件 组件内容&#xff1a; 2&#xff09;新建router文件夹&#xff0c;在其下创建实例 3&#xff09;实例导入&#xff0c;使用 4&#xff09;效果 &#xff08;3&…

佛山网站制作与设计

佛山网站制作与设计 在当今数字化时代&#xff0c;网站已成为企业展示形象、推广产品和服务的重要窗口。佛山作为一个经济迅速发展的城市&#xff0c;其网站制作与设计也日益受到重视。优质的网站不仅能提升企业的品牌形象&#xff0c;更是实现商业价值的重要工具。 一、网站制…

cout无法正常显示中文

cout无法正常显示中文 虽然你使用了buf.length()来指定写入的字节数&#xff0c;但是在包含中文字符&#xff08;UTF-8编码下每个中文字符占用3个字节&#xff09;的情况下&#xff0c;直接使用length()可能不会正确反映实际的字节数&#xff0c;因为它给出的是字符数而非字节…

RK3568平台(文件系统篇)VFS虚拟文件系统

一.VFS虚拟文件系统简介 为什么 Linux 内核的文件系统类型那么多,都能挂载上呢?为什么系统里可以直接 mount 其他文件系统呢?为什么 Linux 的虚拟文件系统这么强大?这得益于它的数据结构设计得十分精妙。 为支持各种本机文件系统,且在同时允许访问其他操作系统的文件,L…

gitee远程仓库OPEN GIT BASH HERE从错误中学习

推荐一个ai软件&#xff08;搜索器搜索kimi&#xff09;&#xff0c;是一个ai&#xff0c;有什么错误跟着一步步解决就可以了 当你创建一个仓库 会出现这些 打开这个窗口跟着敲就行了 到这里为止我还没出现错误&#xff0c;后面我把remote add添加远程仓库的地址输错地址了 所…

C++第七节课 运算符重载

一、运算符重载 并不是所有情况下都需要运算符重载&#xff0c;要看这个运算符对这个类是否有意义&#xff01; 例如&#xff1a;日期减日期可以求得两个日期之间的天数&#xff1b;但是日期 日期没有意义&#xff01; #include<iostream> using namespace std; clas…

文档内容识别系统源码分享

文档内容识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

鸿蒙开发之ArkUI 界面篇 五

Image 图片组件&#xff0c;用专门用于显示图片 语法&#xff1a;Image(图片源)&#xff0c;这里可以是网络、也可以是本地的图片 例如&#xff1a;Image(https://wxls-cms.oss-cn-hangzhou.aliyuncs.com/online/2024-04-18/218da022-f4bf-456a-99af-5cb8e157f7b8.jpg)效果如下…

VTD激光雷达(5)——05_OptiX_GPU

文章目录 前言一、总结 前言 一、 1 2 3 总结

如何在自动化测试中应用装饰器、多线程优化自动化架构?

1、装饰器概念 装饰器是Python中用于修改函数或类的语法结构的工具。它以函数作为输入参数&#xff0c;并返回一个函数作为一个输出函数&#xff0c;在不改变原有函数的代码情况下&#xff0c;给函数增加功能或改变函数行为。 装饰器的使用方式是在函数定义的上方使用 decorato…

re题(30)BUUCTF-[HDCTF2019]Maze

BUUCTF在线评测 (buuoj.cn) 查一下壳&#xff0c;32位upx壳 脱完壳放到ida&#xff0c;shiftF12看一下字符串&#xff0c;是个迷宫&#xff0c;maze&#xff08;迷宫&#xff09; 这里有一个经典的花指令 (导致找不到main函数) 下方有个奇怪的jnz指令&#xff0c;它跳转到了下…

[数据结构]算法复杂度详解

文章目录 一、引言1、想象数据结构与算法的奇妙世界2、算法复杂度的轻松解读3、数据结构与算法的温馨寄语 二、轻松掌握复杂度基础1、时间复杂度&#xff1a;算法速度的衡量尺2、空间复杂度&#xff1a;算法占地的衡量尺3、常见的复杂度 三、复杂度的计算1、时间复杂度计算2、空…

加密与安全_优雅存储二要素(AES-256-GCM )

文章目录 什么是二要素如何保护二要素&#xff08;姓名和身份证&#xff09;加密算法分类场景选择算法选择AES - ECB 模式 (不推荐)AES - CBC 模式 (推荐)GCM&#xff08;Galois/Counter Mode&#xff09;AES-256-GCM简介AES-256-GCM工作原理安全优势 应用场景其他模式 和 敏感…

【CSS】选择器(基础选择器、复合选择器、属性匹配选择器、结构伪类选择器、伪元素选择器)

选择器 引入方式基础选择器复合选择器属性匹配选择器结构伪类选择器伪元素选择器 引入方式 1&#xff1a;外联 <!-- css引入方式1&#xff1a;外联 外联与内嵌优先级相同&#xff0c;取决于加载顺序 --><link rel"stylesheet" type"text/css" h…

echarts 自定义标注样式自定义tooltip弹窗样式

文章目录 1. 实现根据经纬度自定义标注图片样式2. 实现鼠标悬浮标注自定义弹窗样式内容 1. 实现根据经纬度自定义标注图片样式 设置 symbol 属性为 image://${require("/assets/img/dataView/point.png")} 图片地址即可&#xff0c;注意前面跟 image:// 特有的写法b…

【数一线性代数】007入门

Index 本文稍后补全&#xff0c;推荐阅读&#xff1a;https://blog.csdn.net/weixin_60702024/article/details/140939599分析实现总结 本文稍后补全&#xff0c;推荐阅读&#xff1a;https://blog.csdn.net/weixin_60702024/article/details/140939599 用两个栈来实现一个队列…