TCP拥塞控制算法——BBR

1. BBR产生的背景

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

2. 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继续优化的一大问题。

3. BBR算法的特点及核心

  1. **BBR(Bottleneck Bandwidth:瓶颈带宽 and Round-trip propagation time:往返传播时间)是一种基于带宽和延迟反馈的拥塞控制算法。**目前已经演化到第二版,是一个典型的封闭反馈系统,发送多少报文和用多快的速度发送这些报文都是在每次反馈中不断调节 。在BBR提出之前,拥塞控制都是基于事件的算法,需要通过丢包或延时事件驱动;BBR提出之后,拥塞控制是基于反馈的自主自动控制算法,对于速率的控制是由算法决定,而不由网络事件决定,算法核心是"不排队"。
  2. BBR算法的核心是找到最大带宽(Max BW)和最小延时(Min RTT)这两个参数,最大带宽和最小延时的乘积可以得到BDP(Bandwidth Delay Product), 而BDP就是网络链路中可以存放数据的最大容量。BDP驱动Probing State Machine(探测状态机)得到Rate quantum和cwnd,分别设置到发送引擎中就可以解决发送速度和数据量(窗口大小)的问题。

4. BBR算法优缺点

  1. 优点:BBR相对TCP的优点包括抗丢包能力强、延迟低、抢占能力强和平稳发送。在BBR算法之前的TCP Cubic,拥塞控制算法并没有平稳发送的说法,而只是判断发送与否的问题,BBR算法出现之后,会平稳的发送数据,不会突发流量冲击。BBR相对TCP Cubic的优点包括抗丢包能力强、延迟低、抢占能力强和平稳发送。
  2. 缺点:
    1. 收敛速度慢/高于一定丢包率吞吐量下跌;
    2. 深队列竞争不过Cubic;
    3. 在算法公平性方面,BBR在与Reno竞争时可以占用90%以上的带宽,但在与多个BBR流竞争时,RTT高的流占用带宽更高,其中也暴露的漏洞是如果想占用更高带宽,可以人为调高RTT的值,这些并不是BBR算法的设计初衷。在抗抖动能力方面,RTT的抖动使BBR无法得到准确的BDP,探测带宽很有可能低于可用带宽。

5.总结

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

知乎:https://zhuanlan.zhihu.com/p/522223642

相关推荐
W.W.H.9 小时前
Ping 与 TCP:网络连通性探测的两种维度
网络·网络协议·tcp/ip
IpdataCloud10 小时前
担心IP查询泄露隐私?用离线查询工具安全查IP,数据不出内网
网络协议·tcp/ip·安全
北极星日淘10 小时前
Python代理池动态适配日淘爬虫|解决高频抓取IP封禁终极方案(含完整源码)
爬虫·python·tcp/ip
码农飞哥10 小时前
RocketMQ消费接口设计实战:为什么HTTP回调接口必须吞掉所有异常,始终返回成功?
网络协议·http·中间件·消息队列·rocketmq
行走__Wz11 小时前
【网工入门-04】局域网、城域网、广域网
网络协议
白露与泡影11 小时前
为什么 RPC 要比 HTTP 更快?我:之前项目只用过 HTTP...
网络协议·http·rpc
上海云盾-小余11 小时前
弱口令专项整治:批量检测与强制加固方案
网络协议·安全
大神157311 小时前
Jetty 6 HTTPS 配置指南
网络协议·https·jetty
KaMeidebaby12 小时前
卡梅德生物技术快报|噬菌体展示文库构建全流程解析 | 大豆球蛋白纳米抗体筛选实践
人工智能·python·tcp/ip·算法·机器学习
中科三方12 小时前
路由器DNS遭大规模篡改,对政企DNS安全防护有哪些启示?
安全·智能路由器