拥塞控制算法——BBR


目录

  1. BBR产生的背景

    1. TCP算法存在的问题
    2. BBR算法的特点及核心
  2. BBR算法基本原理
    1. BBR结构图
    2. 即时带宽的计算
    3. BDP
    4. BBR状态机
  3. BBR算法的优缺点
    1. 抗丢包能力强
    2. 低延迟/抢占能力强
    3. 平稳发送
    4. 收敛速度慢/高于一定丢包率吞吐量下跌
    5. 深队列竞争不过Cubic
    6. 算法公平性/抗抖动能力
  4. BBR应用在实时音视频领域
    1. BBR在实时音视频领域的优势
    2. BBR在实时音视频领域存在的问题
    3. 收敛速度/抗丢包能力解决办法
    4. ProbeRTT阶段问题解决办法
    5. Padding/RTT不公平问题
    6. Cubic与BBR对比
    7. BBR与GCC对比

1. BBR产生的背景

  1. 拥塞控制始于20世纪80年代,当时TCP是滑动窗口的算法,拥塞窗口固定,需要通过不断地响应报文推动滑动窗口前进。但在1986年TCP导致了拥塞崩溃,比如现在多端采用TCP发起报文,实际带宽达不到所能提供的最大带宽时网络出现拥堵,此时会有越来越多的TCP发起重试,进而加剧拥堵情况。
  2. 2000年之后伴随着互联网大爆发,各类应用特别是音视频应用数量大幅增加,TCP拥塞控制算法无法满足当前互联网应用对网络传输高实时性、高带宽利用率、高吞吐量的需求,在这种背景下BBR应运而生。

1. TCP算法存在的问题

  1. 在互联网发展的过程当中,TCP算法也做出了一定改变,先后演进了Reno、NewReno、Cubic和Vegas,这些改进算法大体可以分为基于丢包和基于延时的拥塞控制算法

  2. 基于丢包的拥塞控制算法以Reno、NewReno为代表,它的主要问题有Buffer bloat和长肥管道两种,基于丢包的协议拥塞控制机制是被动式的,其依据网络中的丢包事件来做网络拥塞判断。即使网络中的负载很高,只要没有产生拥塞丢包,协议就不会主动降低自己的发送速度。最初路由器转发出口的Buffer 是比较小的,TCP在利用时容易造成全局同步,降低带宽利用率,随后路由器厂家由于硬件成本下降不断地增加Buffer,基于丢包反馈的协议在不丢包的情况下持续占用路由器buffer,虽然提高了网络带宽的利用率,但同时也意味着发生拥塞丢包后,网络抖动性加大。另外对于带宽和RTT都很高的长肥管道问题来说,管道中随机丢包的可能性很大,TCP的默认buffer设置比较小加上随机丢包造成的cwnd经常下折,导致带宽利用率依旧很低。

  3. 基于延时的拥塞控制算法以vegas为代表,但当vegas出现时,基于丢包的拥塞控制算法在市面已经占据主流,vegas抢不到带宽出现“饿死”现象,因此也没办法与之抗争。

  4. 在BBR出现之前,TCP的拥塞控制一直逃脱不了这两个方向,另外优化TCP的拥塞控制难免涉及到内核的修改,这也是限制TCP继续优化的一大问题。

2. BBR算法的特点及核心

  1. **BBR(Bottleneck Bandwidth:瓶颈带宽 and Round-trip propagation time:往返传播时间)是一种基于带宽和延迟反馈的拥塞控制算法。**目前已经演化到第二版,是一个典型的封闭反馈系统,发送多少报文和用多快的速度发送这些报文都是在每次反馈中不断调节。在BBR提出之前,拥塞控制都是基于事件的算法,需要通过丢包或延时事件驱动;BBR提出之后,拥塞控制是基于反馈的自主自动控制算法,对于速率的控制是由算法决定,而不由网络事件决定,算法核心是“不排队”。

2. BBR算法基本原理

1. BBR结构图

  1. BBR算法的核心是找到最大带宽(Max BW)和最小延时(Min RTT)这两个参数,最大带宽和最小延时的乘积可以得到BDP(Bandwidth Delay Product), 而BDP就是网络链路中可以存放数据的最大容量。BDP驱动Probing State Machine(探测状态机)得到Rate quantum和cwnd,分别设置到发送引擎中就可以解决发送速度和数据量的问题。

2. 即时带宽的计算

  1. 一般情况下的即时带宽计算,很多人认为将发送报文和收到报文的时间点记录下来,发包数量再除以时间就可以得到带宽,但这样的计算方式是错误的。由于delay feedback表示一组报文的响应,一组报文之后会有一个延迟的相应来通知哪些报文没有收到,以及收到的时间差是多少。delay feedback容易受到网络影响,因此报文不会均匀发送,易发生聚合和丢包现象,在计算时要考虑发送的时间差和ack的时间差,公式为:bandwidth = delivered/max(send time,ack time),这样才能抵消掉延迟聚合和丢失的情况。

3. BDP

  1. BDP(带宽延迟积)是BBR算法中的核心,其中最大带宽和最小延迟不能同时得到。如图所示,横轴是网络链路中的数据量,纵轴分别是RTT和带宽,在RTT不变的时候,网络没有发生拥塞,带宽一直在上升,没有达到最大,而当带宽停止上涨的时候,网络开始拥塞,RTT持续变大,直到发生丢包。图中BDP所标识的点就是理想情况下最大带宽和最小延时。很明显只有在没有发生拥塞时才能得到RTT的数值,因此很难在同一时刻找到最小的RTT和最大带宽。

4. BBR状态机

  1. 既然最大带宽和最小延迟不能同时得到,必然存在探测最大带宽和最小RTT的过程。上图表示的是BBR的状态机,状态机分为Startup,Drain,ProbeBW,ProbeRTT4个阶段。Startup阶段类似于普通拥塞控制里的慢启动,以2/ln2的增益系数持续更新发包速率,带宽连续三次没有增长就可以判定达到最大带宽而进入Drain状态。

  2. 进入Drain状态时队列可能存在拥堵,因此需要把 Startup状态中产生的队列排空,排空的速率是ln2/2,如果inflight < BDP 说明此时网络由BBR造成的拥塞已经全部排空,如果 inflght > BDP 说明此时网络还有拥塞,不能进入下一个状态。

  3. 拥塞排空之后会进入探测带宽阶段,探测最大带宽的方法是在10个RTT中观测到的最大带宽,以此数据作为最大带宽。如果10s没有得到最小RTT,超时之后需要继续探测最小RTT。探测最小RTT需要尽量避免网络拥堵,降低拥塞窗口,发送比较少的报文。整个BBR的拥塞控制在启动之后,最终是在Drain和ProbeBW阶段之间切换。


3. BBR算法的优缺点

  1. BBR相对TCP的优点包括抗丢包能力强、延迟低、抢占能力强和平稳发送。在BBR算法之前的TCP Cubic,拥塞控制算法并没有平稳发送的说法,而只是判断发送与否的问题,BBR算法出现之后,会平稳的发送数据,不会突发流量冲击。BBR相对TCP的优点包括抗丢包能力强、延迟低、抢占能力强和平稳发送。

1. 抗丢包能力强

  1. 关于BBR算法的抗丢包能力可以用上图来说明,BBR算法不会因为一次或者偶然的丢包就大幅降低吞吐量,因此具有较强的抗丢包能力。

2. 低延迟/抢占能力强

  1. 对于BBR在低延迟方面的优势来说,由于目前关于拥塞控制的算法很多,BBR在运转时设备中可能会有多种拥塞控制算法同时作用的情况,BBR算法只能保证自己不排队。但在实际现行网络下,是否排队并不由BBR一个算法决定,运行过程中BBR算法不会加重网络拥塞。

  2. 在带宽探测阶段,BBR算法每一轮都会尝试上探更大的带宽,由此可以很快抢占其他拥塞算法让出来的带宽,这也是BBR算法抢占能力强的原因。

3. 平稳发送

  1. 之前提到在TCP算法中并没有平稳发送的说法,BBR算法后来引入了平稳发送的概念,不只解决了发送多少的问题,还解决了发送速率的问题,具体实现是使用cwnd控制发送数量,发送速度使用漏桶算法控制。BBR算法中的cwnd与TCP算法不同,TCP算法中的cwnd是对网络状态的模拟,分为发送窗口和接收窗口,而BBR算法只有发送窗口,且cwnd = 2*BDP。

4. 收敛速度慢/高于一定丢包率吞吐量下跌

  1. BBR算法在具备一些优势的同时也存在一定的缺点,比如原始的BBR算法收敛性受到pacing gain周期影响,带宽突降的时候,BBR需要多个轮次才会降到实际带宽。这其中的原因是BBR每轮只能降速一次,而pacing gain的6个RTT的保持周期大大加长了这个时间。由于pacing gain上探周期的1.25无法抵消掉25%以上的丢包,这会造成带宽反馈持续下降,BBR吞吐量就会断崖式下跌。

5. 深队列竞争不过Cubic

  1. BBR算法设计之初cwnd = 2*BDP,在此之前BBR算法要比Cubic强很多,但在实际的网络环境中,如果出现buffer很大的情况,BBR是比Cubic竞争性差的,因此在应用BBR算法时必须了解当前的网络状况。

6. 算法公平性/抗抖动能力

  1. 在算法公平性方面,BBR在与Reno竞争时可以占用90%以上的带宽,但在与多个BBR流竞争时,RTT高的流占用带宽更高,其中也暴露的漏洞是如果想占用更高带宽,可以人为调高RTT的值,这些并不是BBR算法的设计初衷。在抗抖动能力方面,RTT的抖动使BBR无法得到准确的BDP,探测带宽很有可能低于可用带宽。

4. BBR应用在实时音视频领域

1. BBR在实时音视频领域的优势

  1. 如果将BBR算法应用在实时音视频领域,需要满足带宽(特别是低带宽场景)探测准确,适合实时音视频传输的低延时需求,能够满足音视频传输码率平稳的需求以及快速响应带宽变化这四个要求。

2. BBR在实时音视频领域存在的问题

  1. 满足以上四个实时音视频需求的同时,BBR算法在应用时也存在着收敛速度慢、抗丢包能力无法达到预期的问题,另外实时音视频领域需要提供稳定的视频流,但BBR的ProbeRTT阶段只发4个包,发送速率下降太多会引发延迟加大和卡顿问题,最后BBR探测带宽需要Paddin有可能造成带宽浪费。

3. 收敛速度/抗丢包能力解决办法

  1. 针对BBR应用在实时音视频领域遇到的问题,目前已经有不少解决方案。对于收敛速度慢的问题来说,BBR V2提出在Probe Down一次排空到位(inflight < BDP),另外还可以随机化6个1x平稳发送周期,缩短排空所需要的时间。对于抗丢包能力不足的问题来说,目前BBR算法的抗丢包能力是足够的,但在一些极端网络条件下可以把丢包率补偿到pacing rate,有效提升抗丢包能力。

4. ProbeRTT阶段问题解决办法

  1. ProbeRTT并不适用实时音视频领域,因此可以选择直接去除,或者像BBR V2把probe RTT缩短到2.5s一次,使用0.5xBDP发送。

5. Padding/RTT不公平问题

  1. 为了保持带宽竞争性和平稳发送,BBR中的padding不可或缺,想要迅速感知带宽变化也必须有padding的存在。关于RTT不公平问题之前有提到RTT大占据的带宽多,但在排空阶段一次排空就可以缓解这个问题。

6. Cubic与BBR对比

  1. 由上图整体可以看出BBR带宽利用率要高于Cubic。

7. BBR与GCC对比

  1. 目前GCC控制算法在实时音视频领域占据主流,但WebRTC的GCC算法仍然有一些局限性,比如将带宽限制在300k,一段时间后取消限制的场景来对比,由图像对比可以得到,BBR比GCC的带宽估计更加准确(GCC:250k,BBR:300k),而在带宽限制取消后,GCC需要20s以上才能恢复到最大带宽,BBR仅需要2s就可以恢复。

  1. 如果将带宽限制在2.5Mbps,加入200ms delay,200ms jitter,此场景中GCC和BBR的表现如图所示,GCC带宽探测只有300k,而BBR带宽维持在2.5M附近波动,在如此恶劣的网络环境中BBR的表现已经是相当优秀了。

  2. 总结来看,BBR算法有很多优点的同时也有很多缺点,目前没有一个算法能够适用所有的网络状态,针对不同的网络状态选择不同的拥塞算法似乎是一个可行的办法,但基于当前拥塞算法,融合其他算法的优点也是可以实现的,在此希望能够涌现出更多有兴趣的人为实时音视频领域的拥塞算法出力。

转载:https://zhuanlan.zhihu.com/p/87375044

拥塞控制算法——BBR相关推荐

  1. TCP拥塞控制算法BBR源码分析

      BBR是谷歌与2016年提出的TCP拥塞控制算法,在Linux4.9的patch中正式加入.该算法一出,瞬间引起了极大的轰动.在CSDN上也有众多大佬对此进行分析讨论,褒贬不一.   本文首先对源 ...

  2. Ubuntu16.04 x64服务器配置最新tcp拥塞控制算法bbr

    BBR原理 不多说了,请看这篇博文! 配置步骤 用uname查看linux内核版本,只有4.9以上的才支持bbr这个算法. uname -ir# possible output4.10.0-26-ge ...

  3. Google BBR拥塞控制算法背后的数学解释 | 深度

    参加 2019 Python开发者日,请扫码咨询 ↑↑↑ 作者 | 赵亚 转载自CSDN网站 杭州待了一段时间,回到深圳过国庆假期,无奈温州皮鞋?厂老板过节要回温州和上海,不在深圳,也就没有见着,非常 ...

  4. Google BBR拥塞控制算法模型初探

    女主宣言 本文出自于ADDOPS团队,该文章是一篇兴趣触发的探索性文章,作者是一名刚毕业的小鲜肉,买新系统,去自己探索bbr算法,难能可贵,并且给出了详细的部署步骤,也能让大家在兴趣之余跟着步骤试一把 ...

  5. NS3运行Reno,BBR,CUBIC等拥塞控制算法

    从ns-3.33版本开始,NS3支持CUBIC. 从ns-3.34版本开始,支持BBR v1. 呜呜呜,感谢前人!!! 我用的是ns-3.34, 代码直接改自ns-3.34/examples/tcp/ ...

  6. Google's BBR拥塞控制算法如何对抗丢包

    我不知道该怎么说.总之,便舍船,从口入,我看不到黄发垂髫并怡然自乐!我不会说什么,除了咒骂!         在BBR之前,存在着两种拥塞控制算法,基于丢包的和基于时延的,不管哪一种都是基于探测的,换 ...

  7. 「深度好文」TCP BBR拥塞控制算法深度解析

    linux服务器开发相关视频解析: tcpip,accept,11个状态,细枝末节的秘密,还有哪些你不知道 徒手实现网络协议栈,请准备好环境,一起来写代码 c/c++ linux服务器开发学习地址:c ...

  8. 使用TCP时序图解释BBR拥塞控制算法的几个细节

    周六,由于要赶一个月底的Deadline,因此选择了在家VPN加班,大半夜就爬起来跑用例,抓数据...自然也就没有时间写文章和外出耍了...不过利用周日的午夜时间(不要问我为什么可以连续24小时不睡觉 ...

  9. 一键为VPS开启BBR拥塞控制算法加速你的VPS网络速度

    什么是BBR加速 BBR是Google在2016年开源的一套TCP拥塞控制算法,目的是最大程度的利用VPS的带宽,增加吞吐量,提高VPS网络速度. Google BBR项目地址:https://git ...

最新文章

  1. 【MM模块】Stock transfersTransfer posting 转储和调拨
  2. matlab硬接触,abaqus中的关于硬接触(Hard contact)、及其他接触
  3. jsp的jstl的foreach标签
  4. 面向对象编程OOP的三大特性
  5. java对外查询接口注意的地方_Java接口注意点
  6. python删除首行_Python删除文件第一行
  7. CocoaPods详解之----制作篇
  8. Java 9 又要延期?甲骨文撂狠话:强推!
  9. live555保存文件的问题
  10. 2021年5月CCAA注册审核员考试认证通用基础真题
  11. 深度学习岗位面试记录
  12. hulk入门使用——ddos攻击
  13. 黑客马拉松之家(devpost)
  14. 《稻盛和夫经营学》读后感心得体会3180字范文
  15. go开发报 A required privilege is not held by the client 错误
  16. 计算机图形学6--讨论多边形
  17. php参考文献博客,科学网—博客文章可否作为参考文献引用? - 王德华的博文
  18. 员工管理系统(完整版)
  19. 4g通信模块怎么连接sim卡_4G模块|合宙重磅推出虚拟SIM卡技术,告别卡座
  20. 怎么修复录音笔(设备)损坏的WAV或MP3文件0字节文件

热门文章

  1. 优盘删除恢复,小牛数据恢复
  2. oracle 删除表存过,oracle删除数据库中已存在表的实例代码
  3. 多项式拟合忆阻器的相关数据,超详细解决忆阻器数据的拟合问题(还有很大改进空间)
  4. 安装windows11,跳过联网激活,跳过登录微软账户
  5. 解决 “Word无法启动转换器mswrd632.wpc”
  6. 外盘期货开户_10月30日外盘期货晚间原油策略建议
  7. 小项目-网上购物商城(无代码)
  8. c#写的坦克大战源码
  9. 聊聊最近的面试感受,几点忠告
  10. 运维思索:如何纳管服务器实现统一登录