zoukankan      html  css  js  c++  java
  • BBR算法技术综述

    1.网络拥塞简述

    IP层是基于块状的Packet报文来分片发送的,因此,TCP协议需要将应用交付给它的字符流拆分成多个Packet(在TCP传输层被称为Segment)发送,由于网速有变化且接收主机的处理性能有限,TCP还要决定何时发送这些Segment。TCP滑动窗口解决了Client、Server这两台主机的问题,但没有去管连接中大量路由器、交换机转发IP报文的问题,因此当瓶颈路由器的输入流大于其输出流时,便会发生拥塞。如果发送方不管不顾,那么瓶颈路由器的缓冲队列填满后便会发生大量丢包,且此时RTT(报文往返时间)由于存在长队列而极高。

    如上图,最好的状态是没有队列,此时RTT最低,而State2中RTT升高,但没有丢包,到State 3队列满时开始发生丢包

    2.BBR技术简述

    TCP的拥塞控制便用于解决上述问题。在BBR出现前,拥塞控制分为四个部分:慢启动、拥塞避免、快速重传、快速恢复。它的意义是在不知道连接的瓶颈带宽时,以起始较低的发送速率,以每RTT两倍的速度快速增加发送速率,直到到达一个阈值,到该阈值后,进入线性提高发送速率的阶段,该阶段叫做拥塞避免,直到发生丢包,。丢包后,发速速率大幅下降,针对丢包使用快速重传算法重送发送,同时也使用快速恢复算法把发送速率尽量平滑的升上来。如果瓶颈路由器的缓存特别大,那么这种以丢包作为探测依据的拥塞算法将会导致严重问题:TCP链路上长时间RTT变大,但吞吐量维持不变。

    如CUBIC这样基于丢包的拥塞控制算法在图2中的第2条灰色竖线发生作用,这已经太晚了,因为此时瓶颈路由器已经达到上限,缓冲队列已经满载。更好的作用点是BDP上限开始发挥作用时,也就是第1条灰色竖线,是瓶颈路由器的缓冲队列刚刚开始积压时的节点。BBR通过检测RTprop和BtlBw来实现拥塞控制。
    RTprop:光信号从A端到B端的最小时延(其实是2倍时延,因为是一个来回),这取决于物理距离。
    BtlBw:在A到B的链路中,它的带宽取决于最慢的那段链路的带宽,称为瓶颈带宽。
    BDP:整条物理链路(不含路由器缓存)所能储藏的比特数据之和,BDP = BtlBw * RTprop
    TCP BBR协议定义的带宽(delivery rate)= 数据量/从发送出去至收到ACK的时长
    这里注意,RTporp和RTT是不一样的,RTT里含有报文在路由器队列里的排队时间、ACK的延迟确认时间等。TCP每个报文必须被确认,确认动作是通过接收端发送ACK报文实现的,但由于TCP和IP头部有40个字节,如果不携带数据只为发送ACK网络效率过低,所以会让独立的ACK报文等一等,看看有没有数据发的时候顺便带给对方,或者等等看多个ACK一起发,叫做延迟确认。所以,可以用下列公式表示RTT与RTprop的差别:

    RTT我们可以测量得出,我们只需要找到瓶颈路由器队列为空时多次RTT测量的最小值即为RTporo

    当RTprop升高时我们便得到了BtlBw,这便找到第1条灰色竖线最好的拥塞控制点,也有了后续发送速率的依据。基于BBR算法,由于瓶颈路由器的队列为空,最直接的影响就是RTT大幅下降,而因为没有丢包,BBR传输速率也会有大幅提升。
    除此之外,BBR会尝试周期性的探测新的瓶颈带宽,这个周期值为1.25、0.75、1、1、1、1,以此来应对链路发生了切换,新的瓶颈带宽变大或者变小的情况。1.25会使得BBR尝试发送更多的报文,而如果产生了队列积压,0.75则会释放队列。

    3.BBR算法与Cubic算法数据对比

    下图是10Mbps、40ms网络的慢启动阶段,该网络中未确认的字节数应为10Mbps*0.04s=0.05MB。棕色线条是CUBIC算法下已发送字节数,而蓝色是ACK已确认字节数,绿色则是BBR算法下的已发送字节数。显然,最初CUBIC与BBR算法相同,在0.25秒时飞行字节数显然远超过了0.05MB字节数,大约在 0.1MB字节数也就是2倍BDP。大约在0.3秒时,CUBIC开始线性增加拥塞窗口,而到了0.5秒后BBR开始降低发送速率,即排空瓶颈路由器的拥塞队列,到0.75秒时飞行字节数调整到了BDP大小,这是最合适的发送速率。

    当繁忙的网络出现大幅丢包时,BBR的表现也远好于CUBIC算法。下图中,丢包率从0.001%到50%时,可以看到绿色的BBR远好于红色的CUBIC。大约当丢包率到0.1%时,CUBIC由于不停的触发拥塞算法,所以吞吐量极速降到10Mbps只有原先的1/10,而BBR直到5%丢包率才出现明显的吞吐量下降。CUBIC造成瓶颈路由器的缓冲队列越来越满,RTT时延就会越来越大,而操作系统对三次握手的建立是有最大时间限制的,这导致建CUBIC下的网络极端拥塞时,新连接很难建立成功。

    4.总结

    BBR算法的优势:

    • 在有一定丢包率的网络链路上充分利用带宽。
    • 降低网络链路上的 buffer 占用率,从而降低延迟。
      BBR算法的不足:
      设备队列缓存较大时,BBR可能会竞争不过Cubic等比较激进算法。
      BBR算法适用范围:
      高带宽、高时延、有一定丢包率的长肥网络,可以有效降低传输时延,并保证较高的吞吐量。
  • 相关阅读:
    VysorPro助手
    Play 2D games on Pixel running Android Nougat (N7.1.2) with Daydream View VR headset
    Play 2D games on Nexus 6P running Android N7.1.1 with Daydream View VR headset
    Native SBS for Android
    ADB和Fastboot最新版的谷歌官方下载链接
    How do I install Daydream on my phone?
    Daydream Controller手柄数据的解析
    蓝牙BLE传输性能及延迟分析
    VR(虚拟现实)开发资源汇总
    Android(Java)控制GPIO的方法及耗时分析
  • 原文地址:https://www.cnblogs.com/yumiao9111/p/12486397.html
Copyright © 2011-2022 走看看