基于BBR的拥塞控制的基本原理

传统的TCP-RenoTCP-Cubic 都是基于丢包的拥塞控制,而这些的拥塞控制具有以下的缺点:

  1. 不能区分是拥塞导致的丢包还是错误丢包.
  2. 引起缓冲区膨胀(在网络中会设置一些缓冲区,用于吸收网络中的流量波动,基于丢包的拥塞控制方法倾向于填满缓冲区。当瓶颈链路的缓冲区很大时,需要很长时间才能将缓冲区中的数据包排空,造成很大的网络延时,该情况称之为缓冲区膨胀).

因此2016年Google提出通过检测路径特征的两个参数(RTprop(最小延迟)BtlBw(最大瓶颈带宽))的拥塞控制算法–BBR,其主要关键特征为:

  1. 不考虑丢包作为拥塞判断的一部分。
  2. 保证最大瓶颈带宽(btlBw)的同时,获得最小延迟(RTprop)。

其设计的基本思路主要如下,BBR分为4种状态分别为启动(startup)排空(DRAIN)带宽探测(PROBE_BW)时延探测(PROBE_RTT).

  • 启动(startup) 状态,作为bbr的加速阶段,类似于慢启动阶段,startup状态以指数的增益速度增加发送速率,希望快速探测到Btlbw瓶颈带宽(增益系数为2/ln2),当判断到连续三个往返时间连接的带宽未增加时(提升小于25%),表示瓶颈带宽已到达,STARTUP阶段结束,状态切换至DRAIN阶段。
  • 排空(DRAIN)状态,该阶段主要是为了排空STARTUP阶段造成的网络缓存,使inflight大小等于BDP。在该阶段,bbr使用一个小的增益系数(STARTUP状态增益系数的倒数)计算pacing rate(btlBw * 增益系数)和cwnd,使得网络队列缓存被迅速排空。
  • 带宽探测(PROBE_BW)状态,该状态是bbr的一个稳定状态,bbr的大部分时间都在该状态运行,当bbr测量到瓶颈带宽和最小rtt,并且inflight等于BDP后,便开始以一个稳定的匀速维护着网络状态,偶尔小幅提速探测是否有更大带宽,偶尔小幅降速公平的让出部分带宽。这里的幅度即为增益系数[5/4, 3/ 4, 1, 1, 1, 1, 1,1]。
  • 时延探测(PROBE_RTT),该状态下,每过10秒,如果估计延迟不变(未测量到比上周期最小RTT更小或等于的RTT值),就进入延迟探测阶段,该状态下,cwnd被设置为4个MSS,并对RTT重新测量,持续200ms,超时后,根据网络带宽是否满载决定状态切换为STARTUP或PROBE_BW。

bbr状态机如下图所示:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值