cubic与bbr性能实测

自1988年第一代TCP算法Tahoe诞生依赖,相继出现了reno、new reno、sacks、cubic、bbr等多种拥塞控制算法,在较常见的有reno、cubic以及linux 4.9以上内核搭载的bbr算法,在ubuntu 16.04包括之前的系统版本之前,默认使用cubic算法,在19.04之后的版本已经切换为默认bbr算法了,以这两大经典算法为例,分析一下优劣。

1.cubic

      谈到cubic算法,就不得不谈谈它的前世:bic算法,bic算法是在ack的驱动下,对窗口的最大值进行二分查找,传输过程中首先会记录拥塞窗口的一个最大值点w1,那么理论上实际窗口最大值应该在w1以下,同时记录一个rtt周期内没有出现丢包时的最小窗口大小w2,将拥塞窗口设为二者中间值,如果没有出现丢包,说明窗口值还可以增加,将窗口值设为w2,持续用二分法寻找最佳窗口值,并在最佳窗口值之间不断震荡,除了这个基本机制之外,bic还包括最大值探索阶段以及丢包时乘性缩小因子和步长等等,这里就不一一展开了,bic窗口探测过程图如下所示。
在这里插入图片描述
      cubic是bic的下一版本,由于bic算法和rtt强相关,如果发生丢包等事件会严重影响探测过程,那么如何让二者解耦并且保持这样一个斜率成u型的趋势呢,就是让所有tcp连接的探测曲线的趋势都保持相同,利用一个固定的三次方程使得窗口增长速率保持与bic一致,带宽探测公式如下所示:
在这里插入图片描述
      其中,C是常数因子,β是乘性减小因子,Wmax是最近一次发生丢包时的窗口大小,可以看到窗口探测过程不再与rtt强相关,修正了丢包时探测异常的问题。
在这里插入图片描述
      cubic拥塞窗口增长曲线如上图所示:在初始阶段,斜率逐渐降低,逐步逼近最大带宽(不丢包时),中点Wmax附近开始缓慢的探测网络最大带宽(因为上一次拥塞发生点在Wmax),越过Wmax后进入最大带宽探测阶段(越过中线意味着网络最大带宽应当在Wmax之上),直到发生丢包后乘性减小,重新开始此过程。

2.bbr

      在bbr诞生以前,所有拥塞控制算法都是基于抢占带宽的耍流氓模式去探测最佳发送窗口,想要获取最大带宽就必须不断的增加发送窗口,使得信道及相关缓存区堆满发生丢包,再通过快速恢复与快速重传等极致弥补这个短板,后续的几类算法也都是希望基于一种温和的形式去获取最大窗口,并没有从根源上解决问题,直到googlez在16年底提出bbr算法,极大的提高了TCP吞吐量。
      BBR的核心思想就是在TCP整个连接过程中不断的探测网络的最大带宽和最小RTT来控制发送端的发包间隔和数据包个数,较传统传输控制算法不同的是,不再探测缓存溢出丢包时的节点,而是探测缓存开始堆积的节点。在数据传输过程中主要分为四个阶段。
      1.Startup阶段,类似Reno算法中的慢启动,此阶段中pacingrate和cwnd都是以2-3之间的增益进行增长,当连续三轮测得的有效带宽的增长不超过25%以上时,表明数据包开始占用缓存区,缓存区出现堆积,此时要退出startup阶段,进入drain阶段。
       2.Drain阶段主要是为了解决startup阶段堆积的数据包问题,startup阶段的退出条件具有一定程度的滞后性,导致缓存区数据包堆积,此阶段中pacing rate的增益系数为1000/2885,cwnd的增益系数为1000/2005+1,直到inflight(在途数据量)小于BDP(带宽时延乘积)时,认为此时数据链路中已经不再存在堆积问题,退出drain阶段,进入PROBE_BW阶段。
      3.PROBE_BW是整个bbr算法中持续时间最长的阶段,此阶段会以5/4,3/4,1,1,1,1,1,1的增益系数温和的探测最下rtt和最大带宽。
      4.上述三种状态就是bbr算法的主流程,除此之外还有一个异步的流程贯穿始终,这个阶段被称为PROBE_RTT。如果在10秒内没有采集到新的最小RTT,就会进入PROBE_RTT阶段,此阶段中cwnd会骤降为4个MSS,持续时间最少200ms,强行清空网络管道。

3.性能实测

在这里插入图片描述
                                                                                          图一
在这里插入图片描述
                                                                                                图二
      实验过程中,购买了芝加哥服务器进行远程测试,图一是ubuntu 16.04系统,cubic算法,图二是将ubuntu升级到19.04系统,linux内核升级至5.3,系统已经默认开启了bbr算法。通过speedtest-cli测速工具进行测试,可以明显看到bbr算法比cubic带来的增益高很多,bbr算法只对服务器方有效,所以上行速度的增益比下行速度要高很多。

4.综述

      虽然从结果上看,bbr传输速度较cubic有所提升,但是由于probe_rtt阶段cwnd强制降为4MSS,导致传输几乎陷入中断的情况,此阶段带宽利用率也会降低,收敛也慢。
      cubic不存在bbr的probe_rtt阶段,是以探寻缓存溢出导致丢包点为目标,所以带宽利用率整体上会优于bbr。
      bbr在处理丢包情况时较cubic更优,原因是cubic在丢包时会被tcp拥塞控制所接管,而bbr则会全权接管拥塞控制过程,快速重传丢失数据包并且cwnd不会骤降。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
CubicBBR都是TCP拥塞控制算法,用于在网络中实现拥塞控制和调整发送速率。它们在拥塞控制的策略和机制上有一些区别。 1. 拥塞控制策略: - CubicCubic采用了拟三次函数的增长曲线来调整发送速率。它通过监测网络的拥塞情况并根据RTT(往返时间)估算拥塞窗口大小。Cubic具有慢启动、拥塞避免和快恢复等阶段,通过调整拥塞窗口大小来逐步增加发送速率,并在网络拥塞时快速减少发送速率。 - BBRBBR(Bottleneck Bandwidth and RTT)是一种基于带宽和往返时间的拥塞控制算法。BBR通过测量网络链路的带宽和RTT,并根据这些信息来推断网络的可用带宽,以达到最佳的发送速率。BBR的目标是尽可能地充分利用网络带宽,同时避免引入过多的排队延迟。 2. 带宽估计和延迟反馈: - CubicCubic主要通过观察丢包事件来判断网络拥塞,然后相应地调整发送速率。它没有直接的机制来测量带宽和延迟,而是通过拥塞窗口大小的调整来间接反映网络状态。 - BBRBBR使用了延迟和带宽的反馈信息来进行拥塞控制。它通过测量数据包的发送和接收时间以及传输时延,估算网络链路的带宽和RTT。BBR利用这些信息来调整发送速率和拥塞窗口,以实现更高的带宽利用率和更低的延迟。 总体而言,CubicBBR在拥塞控制策略和机制上有所不同。Cubic采用了拟三次函数的增长曲线来调整发送速率,而BBR基于测量的带宽和延迟信息来达到最佳的发送速率。BBR相对于Cubic在某些情况下可以实现更高的带宽利用率和更低的延迟。然而,选择使用哪种算法取决于具体的网络环境和应用需求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

挖你家服务器电缆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值