梁剑
【摘 要】 随着网络技术的发展,网络的带宽越来越大,并且无线设备应用越来越广,传统的拥塞控制算法无法很好地适应这一变化。BBR是由谷歌公司提出的新的拥塞控制算法,它使用往返时延和带宽控制拥塞窗口。本文通过研究其原理及在Linux中的实现,以及相关实验,评估了BBR算法的性能,包括吞吐量、往返时间、公平性,并提出了进一步研究的方向。
【关键词】 拥塞控制;BBR;Linux
【中图分类号】 TP393 【文献标识码】 A
【文章编号】 2096-4102(2019)03-0097-03 开放科学(资源服务)标识码(OSID):
1前言
TCP(Transmission Control Protocol)是因特网协议中最重要的协议之一。作为传输层的主要协议,TCP实现了可靠传输、流量控制、拥塞控制等功能。由于网络层的IP协议是尽最大努力交付的非连接协议,因此其不能有效地分配网络资源,这使得IP网络中的拥塞控制变得非常难。TCP作为IP网络的上一层,承担者拥塞控制的任务,确保因特网不会因拥塞而瘫痪。
TCP基本的拥塞控制算法有四种,分别是慢 开始、拥塞避免、快重传、快恢复。无论什么样的拥 塞控制算法,都可以归结为设置拥塞控制窗口。传统的拥塞控制算法通过丢包来感知拥塞的,事实上这已经比拥塞的发生晚了许多。及早将路由器缓存的情况报告给发送者,是减少丢包的好方法。方法一是使用ECN(显式拥塞通告),当路由器发生拥塞时,把减速的信号发给数据发送者。这种方法的问题是需要对现有的路由器做出较大的改造,并且会加重路由器的负担。另一种方法是测量RTT(数据包往返时延)值,当RTT值增大时,就减小发送的数据。其中的代表是Vegas算法,但它的问题在于当路由器缓存被占据时,Vegas会主动减速,这时会把带宽让给其他TCP数据发送者。
2 BBR算法的工作原理
BBR是一种TCP新的拥塞控制算法,它不再把 丢包作为拥塞产生的信号,而是和Vegas一样基于RTT来检测拥塞。相比于丢包,检测RTT能更早地发现拥塞,进而采取减速的措施。在BBR算法中通过周期性地检测RTT和带宽来发现网络的拥塞情况。如图1所示:
在第一个竖线之前,路由器有充足的带宽,因 为不会出现排队,RTT的值是个恒定的值,实际传 输的数据就是注入的数据量。当到达第一个竖线点时,实际带宽将不再增加,注入更多的数据只会增加RTT。在这点,发送方就不能再增加注入网络的数据量了。当到达第二个竖线时,路由器的缓存就会被填满,丢包就会出现。
在理想情况下,拥塞窗口内的数据等于已注入网络的数据。这个值就是时延带宽积,记作BDP(Bandwidth-Delay Product),时延记作RTT,带宽记作BtlBw,于是就有:
BDP=BtlBw*RTT
BBR拥塞控制算法的核心在于控制注入网络 的数据量,即控制拥塞窗口,拥塞窗口记作Cwnd, 引入参数增益值gain,于是拥塞窗口就有:
Cwnd=BtlBw*RTT*gain
通过控制增益值gain的大小,就能控制实际数 据包的发送速度。
BBR拥塞控制算法有四个阶段分别是STARTUP、DRAIN、PROBE_BW、PROBE_RTT。相比其他的拥塞控制算法,BBR没有传统意义的慢开始阶段,STARTUP可以看作是等效于慢开始。
在STARTUP阶段,gain会取一个比较大的值,默认是2/ln2,大约是2.885,在这个阶段注入网络的数据量会从一个较小的值开始快速增加,一直到带宽不再增长,则退出STARTUP阶段,进入DRAIN階段。
在DRAIN阶段,将设置一个较小的gain值,默认是ln2/2,大约是0.3466,在这个阶段先前注入的到网络中过多数据包被排空后,将会进入PROBE_BW阶段。
正常情况下,BBR的多数时间将处于PROBE_BW阶段,在这个阶段发送方会试探性地向网络中多注入一些数据包,以检测是否有多余的带宽。具体方法是在第一个RTT时间内将gain增加到1.25,探测是否有多余带宽,在第二个RTT,将gain减少到0.75排空多余的数据包,接着6个RTT时间内,将gain设置为1,持续外送数据。这样每8个RTT作为一个周期,探测带宽。
一般情况下,在没有数据排队的情况下,测得 的RTT值最小,BBR会在每10秒的传输中消耗200ms探测最小RTT值,这就是PROBE_RTT阶段。在此阶段,将窗口缩小为4个MSS,可以检测出最小的RTT,这同时也是带宽礼让的过程,让其他的TCP连接有机会占用带宽。
3 BBR算法的仿真
3.1 BBR行为仿真
文献使用Netem实现了BBR仿真,但是数据量取得不够多。本实验使用MiniNet仿真。只有一个TCP连接,使用BBR算法,带宽设置是10Mbit/s,链路延时为250ms,前20秒的数据发送量如图2所示。
由图2可以看出初始阶段数据发送量增长很快,在第6秒进入稳定状态,并且多次探测有更大窗口的可能,在第11.5秒,发送量快速减少进入RTT探测阶段。
图3显示的是实际完成的吞吐量,由于中间路由器系统的限制,超过8Mb/s的部分就被截掉了。
图4中数据说明,当注入网络中数据量大时,则RTT就变大,当数据量小时,RTT变小,但不会小于链路的延时。
3.2 BBR与CUBIC的对比
设置瓶颈带宽是10Mb/s,网络延时是250ms,CUBIC实际RTT如图5所示。
从图5中可以看到CUBIC更倾向于占用缓存,从而导致RTT的值偏大。
圖6是设置瓶颈带宽是10Mb/s,网络延时是250ms,一个BBR连接,一个CUBIC连接的情况。
从图6中看出,BBR的带宽抢占能力非常强,其原因是BBR不区分拥塞丢包和误码丢包,丢包时对发送速率影响小,而CUBIC会在丢包时大幅度减速。
3.3 BBR协议的公平性
正如前面所述,BBR与CUBIC之间不具备公平性。图7是设置瓶颈带宽是10Mb/s,网络延时是250ms,两个BBR连接的情况。
图7中在20秒时,第二个BBR连接开始发送数据,从图中分析可知,当多个BBR流同时传送时,后发的BBR流是可以获得带宽的,关键在于BBR的RTT探测阶段会释放所占用的带宽,这种退避机制保证了其他的TCP流能获得发送数据的机会,但这个过程比较长。
4结论
BBR作为一个新的拥塞控制算法主要体现在 对TCP传输中基于延时来调整发送速率,由于 BBR对丢包不敏感,因此在一些误码率较高的网络上有积极意义。比如说在卫星网络中,延时和丢包率都比较高,在这样的网络中部署BBR具有较高的效果。
BBR拥塞控制算法在网络延时上有一定的减 小,但当整个网络中出现因拥塞而导致丢包时,BBR算法不会快速降低发送速度,使得部署BBR的计算机能抢得更多的带宽,这使得其在公平性上存在严 重问题,这将是下一步的研究方向。
【参考文献】
[1]Xu LS,Rhee I.CUBIC:A new TCP-friendly high-speedTCP variant[J].ACM SIGOPS Operating System Review,2005,42(5):64-74.
[2]BrakmoL,O’Malley S.TCP vegas:New techniques forcongestion detection and avoidance[J].Conference onCommunications Architectures,1994,24(4): 24-35.
[3]Cardwell N,Cheng YC.BBR:Congestion-based congestioncontrol[J]. ACM Queue,2016,14(5):20-53.
[4]李振涛,任勇毛,周旭,等.BBR-TCP协议实验性能评价[J].计算机系统应用,2018,27(9):229-235.