• 产品与解决方案
  • 行业解决方案
  • 服务
  • 支持
  • 合作伙伴
  • 新华三人才研学中心
  • 关于我们

广域网优化之TCP拥塞控制算法技术白皮书-6W100

手册下载

广域网优化之TCP拥塞控制算法技术白皮书-6W100-整本手册.pdf  (774.27 KB)

  • 发布时间:2024/2/1 22:37:35
  • 浏览量:
  • 下载量:

广域网优化之TCP拥塞控制算法技术白皮书

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Copyright © 2022 新华三技术有限公司 版权所有,保留一切权利。

非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。

除新华三技术有限公司的商标外,本手册中出现的其它公司的商标、产品标识及商品名称,由各自权利人拥有。

本文中的内容为通用性技术信息,某些信息可能不适用于您所购买的产品。



概述

1.1  产生背景

TCPTCP/IP体系中的传输层协议,它为应用提供面向连接的、可靠的服务。TCP通过序号、确认应答和超时重传来确保TCP报文传输的可靠性。如1所示,TCP数据传送过程大致如下:

(1)     发送端的应用进程不断产生数据(数据块的大小可能各异),并将数据块写入到TCP的发送缓存中。

(2)     TCP将所要传送的数据块看成一个个字节组成的数据流,并为每个字节分配一个序号。TCP协议栈从发送缓存中取出一定数量的数据,将其组成MSSMaximum Segment Size,最大报文段长度)发送出去。

(3)     接收端收到TCP报文段之后,将其暂存在接收缓冲区中。

(4)     接收端的应用进程从接收缓存中将数据块逐个读取。

图1 TCP发送报文段示意图

 

如果发送端发送数据过慢,会浪费网络带宽,影响应用进程间的通信,甚至导致应用进程间通信失败。所以,我们希望尽快将数据传送给接收端。但如果发送端把数据发得过快,接收端就可能来不及接收,从而造成数据丢失。拥塞控制算法通过一套复杂的机制来控制TCP报文发送端可发送报文的数量,让发送方的发送速率不要太快,要让接收方来得及接收,同时也不能发送太慢,以免浪费带宽、影响业务。从而实现在无丢包或者少丢包的情况下,最大化地利用网络带宽,提高传输效率;尽快将TCP报文送达接收端,降低传输时延。

1.2  拥塞控制算法在广域网中的应用

2所示,当Host A通过Telnet协议访问Host B时,Host AHost B之间会建立TCP连接,Router ARouter B转发TCP报文。通常,局域网带宽充足,即便不运行拥塞控制算法,也可保证TCP通信的性能;而对于广域网,因为组网复杂,物理传输距离长,传输速率相对局域网低等问题,导致广域网时延高、带宽利用率低、丢包率高,使得TCP的通信性能在广域网大打折扣。为了解决这个问题,我们在广域网接入设备(Router ARouter B)上部署拥塞控制算法,可实现:不管TCP会话的发送端是否支持拥塞控制算法,Router ARouter B均可确保原始TCP报文在穿越广域网期间,能尽可能地利用广域网带宽,又不会造成网络拥塞,快速到达接收端。

本文主要讲述拥塞控制算法在广域网中的应用。

图2 使用拥塞控制算法进行广域网TCP优化

 

1.3  广域网拥塞控制算法运行机制

2所示,广域网拥塞控制算法部署在广域网接入设备Router ARouter B上,用于控制Router ARouter B可发送的TCP报文数量,其运行机制为:

(1)     管理员在Router ARouter B配置广域网优化策略、部署拥塞控制算法后,Router ARouter B分别自动创建TCP Proxy

(2)     Host AHost B发起TCP连接请求,创建TCP连接。

(3)     Router ARouter B上的TCP Proxy根据配置的规则匹配到Host AHost B之间的TCP连接建立请求,在Router ARouter B之间创建代理TCP连接。

(4)     Router A收到Host A发往Host B的原始TCP报文,Router A上的TCP Proxy将该原始TCP报文作为数据块封装成新的TCP报文,在代理TCP连接上传输。Router A上的拥塞控制算法会控制代理TCP连接上本端可发送的TCP报文的数量。

(5)     Router B收到Host B发往Host A的原始TCP报文,Router B上的TCP Proxy将该原始TCP报文作为数据块封装成新的TCP报文,在代理TCP连接上传输。Router B上的拥塞控制算法会控制代理TCP连接上本端可发送的TCP报文的数量。

发送端每次可以发送的报文数量,由拥塞控制算法决定。RenoBICBBRComware支持的三种主流TCP拥塞控制算法。不同算法的原理不同,使用场景也不同。

说明

本文仅从理论上阐述了RenoBICBBR算法的基本原理机制及优缺点,以帮助用户选择合适的拥塞控制算法。实际应用中,不同厂商会对算法的参数取值进行调整,请以实际情况为准。

 

1.4  拥塞控制算法指标

计算机网络环境复杂,瞬息万变,TCP拥塞控制算法也在不断地演进,来寻求带宽、丢包、时延的更优解决方案。衡量拥塞控制算法的优劣,有两个重要指标:

·     带宽利用率:即当网络空闲时,算法能否尽快找到发送端每次最大可发送报文的数量,最大化地利用网络带宽,提升传输速率,提高通信效率。

·     公平性:即算法能否在各TCP连接间公平地分配带宽。例如,当新会话加入、争抢网络带宽时,算法应能使现有的各TCP连接让出部分带宽,让新连接可以和旧连接公平地分享带宽。

带宽利用率高、公平性好的算法更优。

TCP基础知识

拥塞控制算法基于TCP确认应答、滑动窗口等机制,拥塞控制算法中会频繁提及序号、MSS等重要概念。为便于理解RenoBICBBR拥塞控制算法的技术实现,我们先来回顾一下和拥塞控制算法密切相关的TCP基础知识。

2.1  概念介绍

1. 序号

序号是TCP报文首部中的一个字段,用来表示本报文段所发送的数据的第一个字节的序号。

TCP是面向数据流的,TCP传送的报文可以看成为连续的数据流。TCP把在一个TCP连接中传送的数据流中的每一个字节都编上一个序号。整个数据流的起始序号在TCP连接建立时设置。

2. 报文段

TCP以报文段为单位来传送应用层生成的数据流,报文段封装在TCP报文的数据部分,一个报文段可以包含多个字节的应用层数据。

3. MSSMaximum Segment Size,最大报文段长度)

MSS表示设备可接收的报文段的最大长度为MSS个字节。TCP连接建立时,发送端和接收端会将各自的MSS值写入本端生成的TCP报文头的选项字段,用于告诉对方本端的处理能力。双方选择较小的MSS作为本次TCP通信的MSS值。

为了描述方便,本文也用MSS代替报文段。

4. RTTRound-Trip Time,往返时延)

一个TCP报文从发送端到接收端往返一次所需的时间。RTT通过TCP报文的交互,计算得出。

5. RTORetransmission Timeout,超时重传时间)

发送端从发送一个报文段开始,到重新发送这个报文段之间的间隔时间。通常,发送端会将RTO设置为一个略大于RTT的值。

6. 发送窗口

发送窗口是发送端在操作系统内开辟的一块缓冲区,用来存放当前需要发送的数据,也称为发送缓存。发送端使用发送窗口进行流量控制。

7. 接收窗口(RWNDReceiver Window

接收窗口是接收端在操作系统内开辟的一块缓冲区,设备会将收到的来不及处理的报文放入接收缓冲区,也称为接收缓存。接收端使用接收窗口进行流量控制。

8. 拥塞窗口(CWNDCongestion Window

拥塞窗口是发送端根据自己估计的网络拥塞程度而设置的窗口值。发送端使用拥塞窗口进行流量控制。

2.2  TCP确认应答机制

TCP是面向连接的、可靠的流协议。它通过序号、确认应答提高可靠性。TCP的确认应答机制如下:

(1)     发送端将业务流分割成最合适当前网络传输的数据块,并对每个字节编号(即添加序号)后,以MSS为单位进行发送,并开启发送定时器。

(2)     接收端收到报文段MSS后,回复携带确认序号的ACK报文(确认序号=连续收到报文中最大的序号N+1)。确认序号表示序号N及之前的报文均已收到,请发送序号为N+1的报文。

(3)     发送端收到ACK后,才能发送下一个MSS,期间需要等待的时间为一个往返时延RTT。如果在发送定时器超时时未收到ACK报文,则重发该MSS

3所示,假设MSS1000字节,发送端每次发送一个MSS的数据,且在收到接收端回复的确认应答(ACK)报文后,才能发送下一个MSS。这样,经过一个往返时延RTT,发送端才发送一个MSS。当往返时延RTT值越大,网络的吞吐量会越差,发送端的大部分时间都在等待ACK。为解决这个问题,TCP引入了滑动窗口机制。

图3 TCP确认应答机制

 

2.3  滑动窗口机制

2.3.1  滑动窗口机制介绍

为了解决确认应答机制导致TCP传输速率低的问题,TCP引入了滑动窗口机制。

滑动窗口是一段用于存放报文段的内存。窗口的大小就是指无需等待确认应答可以继续发送报文段(MSS)的个数。

滑动窗口的核心思想:TCP通过并行发送滑动窗口内的报文段,来提升TCP的传输速率。

滑动窗口的具体做法为:

(1)     发送端的应用层将生成的数据存入滑动窗口。

(2)     发送端发送数据时,不再是一次只发送一个报文段(MSS),而是只要处于发送窗口范围中的报文段都可以被发送,不需要等待前面数据包的ACK

(3)     每当收到一个报文段的确认应答后,TCP便将这个报文段从发送窗口中移除,窗口向前滑动一个报文段的长度,以便发送端可以发送下一个报文段;对于已发送但未收到确认应答的报文段,还必须保留在窗口中,以便在重传时使用。

4所示,假设滑动窗口的大小是4MSS,每个MSS1000字节,则发送端在未收到确认应答的情况下,可以发送Data 1234。等收到ACK 1001,滑动窗口向前滑动一个MSS,可以发送Data 5

图4 使用滑动窗口后的确认重传机制

 

2.3.2  发送窗口、接收窗口和拥塞窗口

滑动窗口机制中涉及三个重要概念:

·     发送窗口

发送窗口是发送端在操作系统内开辟的一块缓冲区,用来存放当前需要发送的数据,也称为发送缓存。发送端使用发送窗口进行流量控制。

·     接收窗口(RWNDReceiver Window

接收窗口是接收端在操作系统内开辟的一块缓冲区,设备会将收到的来不及处理的报文放入接收缓冲区,也称为接收缓存。接收端使用接收窗口进行流量控制。

·     拥塞窗口(CWNDCongestion Window

拥塞窗口是发送端根据自己估计的网络拥塞程度而设置的窗口值。发送端使用拥塞窗口进行流量控制。

通常TCP通信是双向的,所以,每台设备会同时存在发送窗口和接收窗口。

滑动窗口的大小是如何确定的呢?

·     接收窗口的大小等于接收端目前接收缓冲区的大小,表示接收端当前可以接收报文的能力。接收端将此窗口值放在TCP报文首部中的窗口(WIN)字段,传送给发送端。

·     拥塞窗口的确定原则为:如果网络没有出现拥塞,发送端就使拥塞窗口增大一些,以便将更多的数据发送出去;如果网络出现拥塞,发送端就使拥塞窗口减小一些,以便减小数据的发送。如何判断网络是否出现拥塞,拥塞窗口增加和减小的幅度,均由拥塞控制算法决定,下文将详细描述。

·     大部分情况下,发送端和接收端之间通过交换机、路由器等网络传输设备相连,这些传输设备的接收、处理能力各不相同,各设备之间链路的速率也不一样,所以,发送窗口大小由接收端的接收能力(即接收端接收窗口的大小)以及网络的传输能力(即拥塞窗口大小)共同决定。

发送窗口的大小=Min[接收窗口RWND, 拥塞窗口CWND],即发送窗口的大小取接收窗口和拥塞窗口中值较小的那个。

¡     当接收窗口小于拥塞窗口时,接收端的接收能力限制发送窗口的大小;

¡     当拥塞窗口小于接收窗口时,网络的拥塞限制发送窗口的大小。

说明

对于广域网设备之间建立的TCP连接,因为发送端和接收端均为广域网设备,广域网设备的接收缓冲区足够大(从几十到几万KB,用户可以通过命令行配置),会远大于拥塞窗口的大小。所以,广域网设备的发送窗口只受拥塞窗口的约束,发送窗口的大小直接取拥塞窗口CWND的大小。

 

2.4  TCP重传机制

TCP有两种报文重传机制:超时重传和快速重传。

1. 超时重传

发送端将报文段发送出去时,会创建报文重传定时器,并开始计时。第一次设置的超时重传时间RTO会略大于报文从发送端到接收端的往返时间RTT。如果直到重传定时器超时,仍未收到该报文段的确认应答(ACK)报文,发送端会认为该报文段已丢失,于是重新发送一次该报文段。如果这个重传报文继续超时,发送端会认为网络条件恶化,从而将超时重传时间加倍。

TCP协议的超时重传机制可为应用提供可靠性传输。但如果网络拥塞,尤其在丢包率和传输时延双高的广域网,确认等待和报文重传会大大降低网络吞吐量和传输效率,加剧网络拥塞,甚至导致传输中断。

2. 快速重传

快速重传(Fast Retransmit)机制,它不以时间为驱动,而是以数据驱动重传。

发送端将报文段发送出去时,会创建报文重传定时器,并开始计时。第一次设置的超时重传时间略大于报文从发送端到接收端的往返时间。如果接收端在指定的时间内未收到预期的报文段,则会向发送端连续发送三个确认序号相同的ACK报文。发送端收到三个相同的ACK报文时,会在超时重传定时器超时前,重传丢失的报文段,大大提升了重传的效率。

5所示,假设MSS1000字节,发送端的滑动窗口为4MSSData 2丢失,接收端会回复ACK 1001,要求重传Data 2。发送端连续收到3ACK 1001后,启动快速重传机制,重新发送Data 25

图5 TCP快速重传机制

 

RenoBIC技术实现

3.1  RenoBIC算法原理

RenoBIC算法基于丢包反馈,让发送端被动调整拥塞窗口CWND的大小来控制本端可发送的报文段MSS的数量,从而提高带宽利用率,避免网络拥塞。这两种算法均包含慢启动、快速重传、快速恢复和拥塞避免四个阶段。

3.1.1  慢启动阶段

TCP连接建立后,算法启动并进入慢启动阶段。慢启动的原理为:当发送端开始发送数据时,如果立即将较大的发送窗口中的全部报文段都直接发送到网络中,由于这时还不清楚网络的状况,可能会引起网络拥塞。于是,慢启动采用探测的方法,由小到大逐渐增大发送端的拥塞窗口数值,来找到适合当前网络传输的最佳拥塞窗口CWND的大小。

慢启动的具体做法为:

·     TCP进程以较低速率开始发包(对应的拥塞窗口CWND为一个MSS),然后每经过一个往返时延RTT,拥塞窗口CWND加倍,以便快速探测到最佳CWND

·     同时,算法设置了慢开始门限ssthresh(初始值为256MSS)。ssthresh用于防止拥塞窗口CWND无限制过快增长引起网络拥塞,如果CWNDssthresh,网络仍无丢包,则直接进入拥塞避免阶段,开始慢增长拥塞窗口CWND

3.1.2  快速重传阶段

拥塞窗口CWND不断增加,势必会引起网络拥塞导致丢包。如果发送端连续收到三个确认序号相同的ACK报文,TCP进程会认为当前网络拥塞导致丢包。算法进入快速重传阶段,并立即重传对方尚未收到的报文段,而不用等到ACK报文超时再重传。

3.1.3  快速恢复阶段

快速恢复通常和快速重传配合使用。快速重传后,算法进入快速恢复阶段。在未使用快速恢复处理机制时,发送端一旦发现网络出现拥塞,就将拥塞窗口降低到1MSS,然后开启慢启动阶段。这种做法比较极端,实际上网络并没有拥塞到只够传输一个MSS的程度,它导致TCP传输速率不能很快地恢复到正常状态。为了解决这个问题,TCP发展出了快速恢复处理机制。在快速恢复阶段:

·     算法将拥塞窗口CWND减小到丢包时拥塞窗口CWND的一半,来快速解除网络拥塞,恢复网络畅通。

·     同时,算法将慢开始门限ssthresh设置为丢包时拥塞窗口CWND的一半,以便进入拥塞避免阶段。

3.1.4  拥塞避免阶段

在拥塞避免阶段,慢开始门限ssthresh保持不变,拥塞窗口CWND≥慢开始门限ssthresh,若网络无丢包,则拥塞窗口CWND缓慢增加,用于探测链路中是否存在富余带宽;若网络出现丢包,RenoBIC均会再次进入快速重传、快速恢复和拥塞避免阶段。

3.2  RenoBIC算法差异

RenoBIC算法最根本的差异在于:拥塞避免阶段探测最佳拥塞窗口CWND时,拥塞窗口CWND的增长幅度不同。

·     Reno采用线性加一法,收敛慢。

¡     无丢包情况下,Reno每经过一个往返时延RTT,拥塞窗口CWND1,线性探测更大的拥塞窗口CWND

¡     若不断增加拥塞窗口CWND值后,引起了网络丢包,此时会再次进入快速重传、快速恢复和拥塞避免阶段。

·     BIC采用二分搜索法和乘性增加法,收敛快。

a.     BIC先采用二分搜索法,探测当前最佳拥塞窗口CWNDBIC每经过一个往返时延RTT,拥塞窗口CWND的增加值依次减半(拥塞窗口CWND的增加值依次为:丢包折半后的拥塞窗口CWND/2、丢包折半后的拥塞窗口CWND/4、丢包折半后的拥塞窗口CWND/8),直到出现如下两种情况中的一种时二分搜索法结束:

-     采用二份搜索法不断增加拥塞窗口CWND值后,引起了网络丢包,此时会再次进入快速重传、快速恢复和拥塞避免阶段。

-     CWND的增加值多次折半取整后(只保留整数位)等于1,网络仍未丢包,则说明网络带宽存在空闲,需要通过更高效的方式继续探测当前最佳带宽。

b.     若通过二分搜索法未找到当前最佳带宽,则需要进一步采用拥塞窗口CWND的增加值加倍的方式来快速探测出当前最佳带宽。拥塞窗口CWND的增加值依次为:1248、……2N次方,直到出现丢包或者达到算法设定的增长门限。

6所示,假设当前网络最多可传输30MSSRenoBIC算法的处理机制如下:

(1)     TCP连接建立,进入慢启动阶段,拥塞窗口CWND的初始值为1(个MSS)。按照指数增长规律,拥塞窗口CWND逐步增长到12481632RenoBIC处理相同。

(2)     发送端以拥塞窗口CWND 32发包,出现网络拥塞(当前网络最多可传输30MSS),发送端收到三个重复的ACK报文,立即重传发送失败的报文段。RenoBIC处理相同。

(3)     发送端进行快速恢复,将慢开始门限ssthresh和拥塞窗口CWND均减少到32/2=16MSSRenoBIC处理相同。

(4)     发送端进入拥塞避免阶段,缓慢增加拥塞窗口CWNDRenoBIC处理不同。

¡     Reno的拥塞窗口CWND16增长到30,需要14RTT

¡     BIC的拥塞窗口CWND16增长到30,需要3RTT(比Reno节省11RTT),3个探测点对应的拥塞窗口CWND2416+8)、2816+8+4)、3016+8+4+2)。

由此可见,当链路空闲时,BIC能迅速利用带宽,抢占能力明显高于Reno

图6 RenoBIC算法原理示意图

 

3.3  RenoBIC算法总结

当网络带宽越大,或者RTT越大,BIC的优势比Reno更明显。所以,BICReno更适合通信网络,BIC一经推出,即替代Reno作为Linux的缺省拥塞控制算法。

基于RenoBIC的原理,我们可以发现RenoBIC均存在以下使用约束:

·     算法会将传输过程中产生的错包、随机丢包误认为是拥塞丢包,从而大幅减小拥塞窗口CWND,降低发送速率,浪费了网络带宽。

·     为最大化利用带宽,只要未丢包,RenoBIC就会持续增大拥塞窗口CWND,并尽力发送报文。这一方面会导致报文突发,增加丢包的风险;另一方面会导致来不及处理的报文堆积在网络设备的接收缓冲区,使得传输时延增大。

BBR技术实现

4.1  概念介绍

1. BtlBw(瓶颈带宽)

瓶颈带宽指一条传输链路的最大传输能力。BBRBottleneck Bandwidth and RTT,瓶颈带宽和往返时延)使用瓶颈带宽BtlBw来控制发送端可发送的报文数量以及发包速率。发送端使用报文送达率(即一段时间内送达的报文数/对应的时间间隔)来计算即时带宽,再根据即时带宽和Kathleen Nichols算法,来估计瓶颈带宽BtlBw

2. RTprop(往返时延RTT极小值)

RTprop指链路中没有排队且无丢包时,一个包在链路中一个来回所需的时长,即往返时延RTT的极小值。

3. 增益系数

BBR定义了两个增益系数:

·     发送速率增益系数pacing_gain:表示发送速率的调整倍数。

·     发送窗口增益系数cwnd_gain:表示发送窗口的调整倍数。

BBR算法定义了StartUp(启动阶段)、Drain(排空阶段)、ProbeBWBtlBw探测阶段)、ProbeRTTRTprop探测阶段)四个状态机,并为不同状态机指定了不同的增益系数,通过调整各状态机下的增益系数来调整网络中的报文数量,以便感知带宽、RTT的变化。

·     StartUp阶段:pacing_gain取值为2.89cwnd_gain取值为2.89

·     Drain阶段:pacing_gain取值为0.35cwnd_gain取值为2.89

·     ProbeBW阶段:ProbeBW阶段又分为8个小区段,在这8个小区段内,pacing_gain取值分别为5/43/4111111cwnd_gain取值为2

·     ProbeRTT阶段:pacing_gain取值为1cwnd_gain取值为1

4.2  BBR算法原理

BBR算法基于测量反馈来主动调整拥塞窗口CWND和报文发送速率,从而提高带宽利用率,避免网络拥塞。BBR主要使用报文发送速率控制发送端发送报文的速度,以免报文发送过快,导致接收设备来不及处理报文,导致报文积压;BBR辅助使用拥塞窗口CWND控制发送端发送的报文总量,以免发送端发送的报文总数过多造成网络拥塞。

BBR算法的基本原理为:

·     发送端根据发送的报文段以及收到的ACK反馈持续测量往返时延RTT,并计算网络即时带宽BW将当前获得的即时带宽BW、往返时延RTT和历史瓶颈带宽BtlBw(初始值为0)、历史往返时延RTT极小值RTprop(初始值较大,为64位十六进制数全f)比较,并根据Kathleen Nichols算法,得到当前瓶颈带宽BtlBw和当前往返时延RTT极小值RTprop

·     BBR使用得到的瓶颈带宽BtlBwRTT极小值RTprop,乘以发送速率增益系数pacing_gain、发送窗口增益系数cwnd_gain,计算出下次发送的拥塞窗口CWND和发包速率。

¡     实际发包速率pacing_rate=pacing_gain * BtlBw

¡     拥塞窗口CWND=max(cwnd_gain * BtlBw * RTprop, 4)

·     BBR找到瓶颈带宽BtlBwRTT极小值RTprop后,大部分时间会以瓶颈带宽BtlBw作为实际发包速率平稳发包。然后小幅增大或减少实际发包速率,来探测新的BtlBwRTprop,以便适应网络环境的变化。

4.3  BBR的实现过程

BBR通过以下四个状态,来交替循环探测,得出BtlBwRTpropStartUp(启动阶段)、Drain(排空阶段)、ProbeBWBtlBw探测阶段)、ProbeRTTRTprop探测阶段)。

说明

为了获得瓶颈带宽BtlBwBBR会增加发包数量,可能会造成报文被缓存在链路的队列中,导致往返时延RTT增加;而为了测量RTT极小值RTprop,需要清空当前链路队列中的缓存。因此,不能同时探测得出瓶颈带宽BtlBwRTprop,需要交替循环探测得出瓶颈带宽BtlBwRTprop

 

4.3.1  StartUP(启动阶段)

TCP连接建立后,BBR算法启动并进入StartUP状态。StartUP状态对应BBR算法的启动阶段,目标是获得当前瓶颈带宽BtlBw

为了快速探测到最佳发包速率,StartUP状态下,BBR规定发包增益系数为pacing_gain=2.89,当前发包速率=pacing_gain*BtlBw=2.89*BtlBw

BBR探测瓶颈带宽BtlBw的流程如下:

(1)     初始情况下,发送端以一个较低发包速率向接收端发送报文,获得当前的即时带宽BWBW>当前的瓶颈带宽BtlBw(初始值为0),更新瓶颈带宽BtlBw=即时带宽BW

(2)     更新发包速率,当前发包速率=pacing_gain*BtlBw=2.89*BtlBw。发送端以更高的发布速率发包。

(3)     BBR继续更新瓶颈带宽BtlBw,使用新的瓶颈带宽BtlBw计算新的发包速率,用新的发包速率发送报文。

如果BBR连续3次探测、计算得到的即时带宽BW均小于当前瓶颈带宽BtlBw1.25倍,则说明已经获得了当前瓶颈带宽BtlBw,且链路可能出现了发包缓存现象,BBR进入Drain状态。

4.3.2  Drain状态(排空阶段)

因为在StartUP状态BBR2.89倍速增加发包速率,随着发包速率的不断增长,链路中可能出现发包缓存现象(网络传输设备、接收端将来不及处理的报文存放到接收缓冲区)。发包缓存意味着报文到达接收设备时不能立即被处理,这会导致往返时延RTT增大,当越来越多的报文被缓存,可能会导致接收设备的接收缓冲区被占满,报文被丢弃。TCP需要重传报文,导致传输性能急剧恶化。

BBR追求带宽利用率最高,即以瓶颈带宽BtlBw发包,同时,链路中尽量不要出现发包缓存,以便报文能以最快速度、最短时间送达接收端。于是在StartUP状态后,BBR会进入Drain状态,用于排空StartUP状态下,链路中缓存的报文。

BBR排空链路中缓存报文的流程如下:

(1)     为了排空链路中缓存的报文,BBR需要降低发包速度。Drain状态下,协议规定发包增益系数pacing_gain=0.35,发包速率=pacing_gain*BtlBw=0.35*BtlBw

(2)     BBR0.35*BtlBw速率发包,直至BBR检测到链路中正在传输的报文数小于BtlBw*RTprop。此时BBR认为链路队列中缓存的报文已经排空,进入ProbeBW状态。

4.3.3  ProbeBW状态(BtlBw探测阶段)

探测到瓶颈带宽BtlBw,并排空链路中缓存的报文后,BBR进入ProbeBW状态。在该阶段,BBR大部分时间以瓶颈带宽BtlBw作为发包速率平稳发包,小部分时间会小幅调整发包速率,来探测新的瓶颈带宽BtlBw

BBR绝大部分时间处于ProbeBW状态。该状态以8RTT为周期循环滚动,包括6个平稳周期、1个上升周期、1个减少周期:

·     6个平稳周期:为了充分利用网络带宽,BBR6RTT内进行平稳发包。此时的发包增益系数pacing_gain=1,发包速率=pacing_gain*BtlBw1*BtlBw

·     1个上升周期:为了探测更高的BtlBwBBR1RTT内短暂地提高发包速率。此时的发包增益系数pacing_gain=1.25,发包速率=pacing_gain*BtlBw1.25*BtlBw

·     1个减少周期:为了排空链路队列中可能缓存的报文,BBR1RTT内短暂地降低发包速率。此时的发包增益系数pacing_gain=0.75,发包速率=pacing_gain*BtlBw0.75*BtlBw

4.3.4  ProbeRTT状态(RTprop探测阶段)

RTprop指链路中没有排队且无丢包时,一个包在链路中一个来回所需的时长,即往返时延RTT的极小值。通常情况下,链路创建后,RTprop即为固定值。但传输网络是共享网络,链路中没有本连接发送的报文,但是可能有其它会话发送的报文,所以,为了确保RTprop值的可靠性,BBR会检测RTprop值的刷新状态。若超过10RTprop还未更新,则无论当前BBR处在StartUPDrainProbeBW中的哪个状态,均进入RTprop状态。

进入RTprop状态后,BBRCWND拥塞窗口CWND减小到4并持续200毫秒,通过断崖式减少发包来清空链路中缓存的报文,以便探测新的RTprop

4.4  BBR算法总结

相比RenoBICBBR的优势主要体现在以下方面:

·     BBR基于周期探测结果来调整拥塞窗口CWND,不以丢包为触发拥塞控制的条件,比RenoBIC更合理,更高效。

·     RenoBIC使用拥塞窗口CWND控制发包,它的尽力发送势必导致链路中报文被队列缓存,报文在网络中的传输时延增加。队列缓存越大,时延越严重。BBR使用发包速率和拥塞窗口CWND双重参数控制发包,能将突发报文平滑发送。而且BBR会定期降速发包,清空链路中队列里缓存的报文,能够有效地降低网络时延。

·     BBR绝大部分时间平稳发包,而RenoBIC需要循环探测、丢包、快速恢复、探测,BBR带宽利用率更高,吞吐量更大。

当然,BBR也有使用约束:由于BBR的周期性特点,以及ProbeBW状态增加周期的增速限额(1.25* BtlBw)和减少周期的减速限额(0.75* BtlBw),导致当网络带宽增加或者减少时,BBR的抢占能力不如BICBIC反应迅速,如果链路中大部分为持续时间短的TCP连接,则使用BIC的传输效率更高。

7所示,BBR经过StartUpDrain阶段后,进入相对平稳的发包阶段,相同时间段内BBR的吞吐量要大于RenoBIC。当网络传输能力提高,最佳拥塞窗口CWND30MSS提升到48MSSBIC最少只需5RTT即可达到最佳拥塞窗口CWND,而BBR需要7RTT,拥塞窗口CWND才上升到1.25*30=37.5(取37MSS),BBR再经过8RTT,拥塞窗口CWND上升到1.25*37=46.25(取46MSS)。

图7 RenoBICBBR算法原理示意图

 

4.5  BBRv2简介

标准BBR的实现称为BBRv1,为了弥补BBRv1在多种算法(BBRBIC算法)共存的网络中带宽抢占能力方面的使用约束,BBR又衍生出了BBRv2BBRv2是对BBRv1的优化,优化的方面包括但不仅限于:

·     BBRv2Startup状态,增加了丢包退出判断条件。为避免更严重地丢包,在Startup状态,只要检测到丢包,则退出Startup状态,而不用等到“连续3次探测计算得到的即时带宽BW均小于当前瓶颈带宽BtlBw1.25倍”。

·     为了快速响应网络变化,TCP需要及时调节拥塞窗口CWND,通过加快ProbeRTT的更新可实现拥塞窗口CWND值的快速调节。BBRv2将进入RTprop状态的触发条件从10秒减小到2.5秒。即若持续2.5RTprop一直未更新,则BBRv2立即进入ProbeRTT状态,来探测新的RTprop

·     为了减小进入ProbeRTT状态带来的带宽波动,进入ProbeRTT状态后,BBRv2将拥塞窗口CWND减少到0.5*BtlBw*RTprop,而BBRv1将拥塞窗口CWND减少到4

拥塞控制算法比较

RenoBIC通过拥塞窗口CWND来控制发送端可发送的报文的数量,BBR通过网络最大带宽BtlBwRTprop(极小RTT)控制发送端发送报文的速度和数量。它们最大的差别在于链路最大带宽的探测机制不同。总体趋势来说:

·     收敛速度(从快到慢):BBR>BIC>Reno

·     公平性(深缓存场景下的抢占能力,从强到弱):BIC>BBR>Reno

·     抗丢包能力(从强到弱):BBR>BIC>Reno

·     网络排队时延(从低到高):BBR<Reno<BIC

说明

深缓存指链路中具有比较大的缓存,例如接收缓存、中间设备的缓存队列等。

 

各算法的关键技术和推荐使用场景如1所示。

表1 RenoBICBBR拥塞控制算法比较

算法

关键技术

推荐使用场景

Reno

·     将丢包作为拥塞控制的触发条件,不区分丢包原因是错包还是真正的网络拥塞,容易误判

·     检测到丢包时,拥塞窗口CWND减半

·     线性增长探测拥塞窗口CWND,每经过一个RTT,拥塞窗口CWND1

低丢包率、低带宽、对时延要求低的场景

BIC

·     将丢包作为拥塞控制的触发条件,不区分丢包原因是错包还是真正的网络拥塞,容易误判

·     检测到丢包时,拥塞窗口CWND减半

·     用二分搜索法和乘性增加法探测拥塞窗口CWND

低丢包率、高带宽、对时延要求低的场景

BBRv1

不将丢包作为拥塞控制的触发条件,以周期探测的时延和带宽为依据,计算拥塞窗口CWND和发送速率,平稳发包

存在一定丢包率、高带宽、对时延要求高、BBR算法单独使用的场景

BBRv2

相比于BBRv1

·     BBRv2Startup状态,只要检测到丢包,则退出Startup状态,来避免更严重地丢包

·     BBRv2将进入RTprop状态的触发条件从10秒减小到2.5秒(若持续2.5RTprop一直未更新,则BBRv2立即进入ProbeRTT状态,来探测新的RTprop),来及时调节拥塞窗口CWND,以便快速响应网络变化

·     BBRv2进入ProbeRTT状态后,BBRv2将拥塞窗口CWND减少到0.5*BtlBw*RTpropBBRv1将拥塞窗口CWND减少到4),来减小进入ProbeRTT状态带来的带宽波动

存在一定丢包率、高带宽、对时延要求高、各种算法共存的场景

 

新华三官网
联系我们