基于吞吐率和丢包控制CWND的优化方法和系统
技术领域
本发明涉及TCP协议的防止网络拥塞技术,更具体地,涉及一种基于吞吐率和丢包控制CWND的优化方法和系统。
背景技术
CWND(Congestion Window,拥塞窗口)的计算是TCP协议防止网络拥塞,保证连接吞吐率的关键。因此,也是各种TCP算法优化和技术改进的焦点。
CWND代表在没有收到ACK的情况下所允许发送的最大数据报文段数量。显然,CWND被设置得越大,数据报文被发送得越快,但是也越有可能使网络出现拥塞。相反,如果CWND设置得越小,甚至设置为1,那么每发送一个数据报文都必须等待收到相应的ACK之后才能继续发送下一个数据报文,则显然网络不易出现拥塞,但导致发送效率低下。因此,各种TCP CWND算法优化就是要在发送效率和网络拥塞两个因素之间进行平衡,选取最优的CWND值,使得网络吞吐量最大化且防止发生拥塞。
目前现有技术中提出的TCP CWND算法有很多,如NewReno、CUBIC、Westwood、Vegas等。其中的多数是以丢包作为拥塞信号的AIMD(Additive-Increase/Multiplicative-Decrease,加法增大/乘法减小)算法。但Vegas及其派生算法另辟蹊径,以网络时延的增长作为拥塞信号而调整CWND。下面就现有技术中比较典型的几种TCP CWND算法进行介绍。
在互联网中最广泛应用的TCP CWND算法是NewReno和CUBIC。NewReno是最早的TCP CWND算法之一,因为是Windows,BSD,和2.6.19版以前的Linux默认采用的算法而成为使用最广泛的CWND算法。CUBIC在NewReno的基础上做了较大的改动,尤其集中在丢包后如何迅速逼近实际带宽的处理。CUBIC现在是Linux内核2.6.19版以上的默认算法,在Android设备和各种基于Linux的网络设备、服务器、云技术设备等场合应用广泛。
CUBIC是基于丢包的算法。它的出发点在于改进传统的AIMD算法,以便在丢包后CWND能够迅速地收敛到实际带宽的水平。传统的NewReno AIMD算法在丢包后,CWND大约降至丢包前的1/2。之后CWND只能线性增长,因而需要很长时间才能触及实际带宽,尤其是在偶然丢包的情况下。CUBIC对此进行了以下改进:(1)丢包后,CWND按固定比例降低:CWND=β*Wmax(例如Linux内核3.x中β=0.7,高于NewReno的0.5),其中将降低之前的CWND记为Wmax。(2)之后CWND依时间的三次方增长:CWND=C*(t–K)3+Wmax,这里C是一个缩放常数(Linux内核3.x中使用C=0.4),t是时间,将因丢包而降低CWND的时刻定为t=0,K是一个常数,K使得0时刻的CWND等于β*Wmax。由此可见,CWND在经历丢包降低后,先以三次曲线上凸的方式涨回Wmax(t≤K);如果没有丢包,又继续以三次曲线下凸的方式逐步加快CWND的增长。这样,如果实际带宽在β*Wmax至Wmax之间的话,由于三次曲线上凸区间的性质CWND不会一下冲出太多;如果实际带宽超过Wmax的话,三次曲线的下凸区间使得CWND能够加速增长,快速搜索带宽。CUBIC的另一个独特之处是CWND的增长与往返时延RTT无关。在同样Wmax下,长时延和短时延CWND增长的速度是一样快的。
Vegas算法定义了一个状态变量:BaseRTT(基础往返时延),理论值应为“无拥塞时连接的往返时延”,但实际上由于终端设备很难判断是否发生拥塞,这个变量在实际计算中也就被实现为使用测得的最小往返时延。Vegas算法计算预期吞吐率为:BE=CWND/BaseRTT。同时,它也在计算当前的实际吞吐率:BA=InFlight/RTT,其中InFlight是已发送但尚未被应答的报文数据量;RTT是当前被应答报文的往返时延。Vegas算法进而计算两者的差值:Δ=BE-BA,定义下限α和上限β。如果Δ<α,则提高CWND;如果Δ>β则降低CWND。由于使用时延,Vegas算法对网络拥塞的判断更加敏感,因而能够极大地降低网络的丢包率,在全部使用Vegas算法的网络中可以获得非常好的平均吞吐率。然而在与基于丢包的算法混合的网络环境中,由于时延的迅速上升总是发生在丢包之前,这样Vegas总是在基于丢包的算法之前收缩CWND而降低发送速度,导致总体性能逊色于基于丢包的算法。
现有技术存在的缺陷在于:CUBIC算法在较为稳定的网络条件下有非常优异的性能。“稳定”在这里指网络有效带宽相对恒定,往返时延的起伏不大。然而随着无线通信技术的爆炸式增长,无线通信信道中稳定的前提不复存在。信号衰落是无线信道中不可避免的问题,由此导致有效带宽和时延经常大幅度地变化。为了减少丢包率,无线通信网中常用加长包队列来缓冲传输数据。在这种部署下,一旦由于某些原因有效带宽突然下降,比如电磁干扰,4G降3G等,TCP的往返时延RTT会突然直线上升,经常会增加十倍以上,从数百毫秒上升到数秒甚至十秒以上。在这种情况下,由于CUBIC算法CWND的增长与RTT无关,会导致在RTT不断增长的同时,每一个ACK应答触发更多的数据包被送出,从而RTT增长失控,迅速增加了拥塞的危险性。RTT过大的另一个负面影响是一旦丢包进入恢复状态,重传的包很可能要经过至少当前的RTT才能被应答。在此期间CWND无法增长,导致吞吐率的滞后上升。在这种时延波动的环境中,Vegas算法可以更加有效地控制RTT的增长,平均吞吐率会优于CUBIC。然而如前所述,Vegas算法在与基于丢包的算法混合部署的时候在抢占带宽方面会处于劣势。
发明内容
基于现有技术中的上述缺陷,本发明提供了一种基于吞吐率和丢包控制CWND的优化方法和系统。本发明借鉴Vegas和CUBIC算法的精华,集中于解决无线通信环境下时延变化巨大,带宽浮动等恶劣环境下的CWND的计算,以保证最佳吞吐率。
本发明所述基于吞吐率和丢包控制CWND的优化方法,其特征在于,包括以下步骤:
针对收到ACK应答的数据报文,计算其实际的即时吞吐率;
根据所述即时吞吐率计算平滑吞吐率;
判断平滑吞吐率B的变化状态,并相应地控制CWND增长模式;
如果在任何时刻发生丢包,进入Recovery模式,在Recovery模式按照CWND收缩系数减小CWND。
优选的是,针对收到的ACK应答中具有最高序列号的数据报文,计算所述实际的即时吞吐率BC=FS/(T–TS);其中,T是当前时间;TS是该具有最高序列号的数据报文的发送时间;FS是该TS时刻已发送且尚未被ACK应答的数据总量;其中,所述TS和FS是在该具有最高序列号的数据报文被发送时记录的。
优选的是,所述平滑吞吐率B=(1–α)*B’+α*BC;其中α是常数参量,BC是所述实际的即时吞吐率;B’是在先的平滑吞吐率。
优选的是,所述CWND增长模式包括指数增长、线性增长以及停止。
优选的是,在初始状态及退出Recovery模式时将CWND增长模式设置为指数增长。
优选的是,如果平滑吞吐率比在先的平滑吞吐率增长超过吞吐率增长阈值,则CWND增长模式设置为指数增长。
优选的是,如果平滑吞吐率连续下降预定次数,且平滑吞吐率下降总量不少于吞吐率下降阈值,则进一步判断当前的平滑往返时延SRTT是否小于等于η*RTTMIN;其中RTTMIN是最小往返时延,η是常数参量;如果是,则CWND增长模式设置为线性增长;如果否,则CWND增长模式设置为停止。
优选的是,因发生丢包进入Recovery模式时,设置CWND=β*CWND,并且CWND收缩系数β=0.7。进一步优选的是,Recovery模式下设置CWND增长模式为停止。
本发明所述基于吞吐率和丢包控制CWND的优化系统,其特征在于,包括:
即时吞吐率计算单元,用于针对收到ACK应答的数据报文,计算其实际的即时吞吐率;
吞吐率平滑单元,根据所述即时吞吐率计算平滑吞吐率;
CWND增长模式设置单元,用于判断平滑吞吐率B的变化状态,并相应地控制CWND增长模式;
CWND收缩单元,用于在任何时刻因发生丢包进入Recovery模式的情况下,按照CWND收缩系数减小CWND。
优选的是,即时吞吐率计算单元针对收到的ACK应答中具有最高序列号的数据报文,计算所述实际的即时吞吐率BC=FS/(T–TS);其中,T是当前时间;TS是该具有最高序列号的数据报文的发送时间;FS是该TS时刻已发送且尚未被ACK应答的数据总量;其中,所述TS和FS是在该具有最高序列号的数据报文被发送时记录的。
优选的是,吞吐率平滑单元计算所述平滑吞吐率B=(1–α)*B’+α*BC;其中α是常数参量,BC是所述实际的即时吞吐率;B’是在先的平滑吞吐率。
优选的是,所述CWND增长模式包括指数增长、线性增长以及停止。
优选的是,CWND增长模式设置单元在初始状态及退出Recovery模式时将CWND增长模式设置为指数增长。
优选的是,如果平滑吞吐率比在先的平滑吞吐率增长超过吞吐率增长阈值,则CWND增长模式设置单元将CWND增长模式设置为指数增长。
优选的是,如果平滑吞吐率连续下降预定次数,且平滑吞吐率下降总量不少于吞吐率下降阈值,则CWND增长模式设置单元进一步判断当前的平滑往返时延SRTT是否小于等于η*RTTMIN;其中RTTMIN是最小往返时延,η是常数参量;如果是,则CWND增长模式设置单元将CWND增长模式设置为线性增长;如果否,则将CWND增长模式设置为停止。
优选的是,因发生丢包进入Recovery模式时,CWND收缩单元设置CWND=β*CWND,并且CWND收缩系数β=0.7。进一步优选的是,Recovery模式下CWND增长模式设置单元设置CWND增长模式为停止。
可见,本发明相比现有技术具有以下特点和进步:首先,基于吞吐率最大化的原则,在稳定的和变化的网络环境下,尤其是无线网络中,均能取得良好的吞吐率,性能不亚于广泛使用的其它TCP算法如CUBIC,NewReno等。而且这种算法也摈弃了不易准确测算的BaseRTT。其次,引入吞吐率和时延的控制CWND增加,但仍使用丢包作为收缩CWND的准则,因此在与基于丢包的算法混合部署时无劣势。第三,丢包恢复后采用吞吐率控制的指数增长,提高带宽搜索速度,优于CUBIC。第四,采用与CUBIC一致的CWND收缩系数,丢包时CWND收缩对比CUBIC不会有劣势。
附图说明
下面结合附图和具体实施方式对本发明作进一步详细的说明:
图1是本发明实施例所述基于吞吐率和丢包控制CWND的优化算法流程图。
具体实施方式
为了使本技术领域的人员更好地理解本发明的技术方案,并使本发明的上述目的、特征和优点能够更加明显易懂,下面结合实施例及实施例附图对本发明作进一步详细的说明。
本发明基于实际吞吐率和往返时延的因素控制CWND的增长模式。并且,本发明定义了平滑吞吐率,通过平滑吞吐率反映所述实际吞吐率和往返时延。本发明根据该平滑吞吐率的变化状态决定所采用的CWND增长模式,其中采用了吞吐率最大化的原则,只要发现增加CWND值对平滑吞吐率有提升,就继续增加CWND值。但是,本发明并不将平滑吞吐率作为CWND降低的依据。CWND的降低仍然由丢包决定。
在本发明中,CWND的增长可分为指数增长、线性增长以及停止三种模式。举例来说,指数增长模式下,假设当前CWND值为1,则经过第一次增长CWND值为2,经过第二次增长CWND值为4,经过第三次增长CWND值为8,以此类推。线性增长模式下CWND值每次增长增加一个固定的量值。停止状态下CWND值停止增长而保持不变。
参见图1,本发明的CWND优化算法具体包括以下步骤。需要指出的是,下面所指出的各种常数参量的取值都是示例性的建议值,本领域技术人员完全可以根据实际情况加以调整。
步骤1,初始状态下,设置平滑吞吐率B=0,并且设置CWND增长模式GM=指数增长。
步骤2,每发送一个新的数据报文时,记录该报文的发送时间TS和在该时间已被发送且尚未被ACK(应答)的数据总量FS。
步骤3,每收到一个ACK(应答),如果该ACK应答了一个或多个已发送的数据报文且其中没有重传的数据报文话,针对被应答的数据报文当中具有最高SEQ(序列号)的数据报文,计算以下参数:
a.即时吞吐率BC=FS/(T–TS)。其中,T是当前时间;TS是该具有最高SEQ的数据报文的发送时间;FS是该TS时刻已发送且尚未被ACK的数据总量;如上面所述,TS和FS是在该具有最高SEQ的数据报文被发送时记录的。可见,这里计算即时吞吐率的算法和Vegas算法也有区别。Vegas的“实际吞吐率”是计算获得RTT时刻的未被ACK的数据量与RTT的商,因而是“先验”性的即时吞吐率。而本发明这里计算的即时吞吐率是“后验”性的,即反映了经过所述具有最高SEQ的数据报文检验的实际的吞吐率数值。
b.平滑吞吐率B=(1–α)*B’+α*BC。其中α是常数参量,可以设定为α=1/4,B’是初始状态下设置的或者上一次计算获得的在先平滑吞吐率。这里本发明用一阶指数平滑公式计算平滑吞吐率,这是因为网络时延经常由于各种原因而不停地变动,导致即时吞吐率上下波动。这样平滑后消除一些高频噪声,对网络的吞吐率估计更加准确一些。Vegas算法并不采用平滑。
步骤4,判断平滑吞吐率B的变化状态,并相应地控制CWND增长模式GM。具体分为以下几种情况:
a.如果B比初始状态下设置的或者上一次计算获得的在先平滑吞吐率增长超过γ,则GM=指数增长;常数参量γ=1/32。
b.如果B连续3次下降,且三次下降总量不少于Δ,则进一步判断SRTT:如果当前的SRTT≤η*RTTMIN,则GM=线性增长;否则,GM=停止。这里Δ=1/16,η=10。其中SRTT是平滑往返时延,SRTT的概念和算法在TCP协议中属于公知,例如其在RFC793(tools.ietf.org/html/rfc793)中具有相应的说明;RTTMIN是最小往返时延;RTTMIN也是TCP协议的标准概念和算法。
步骤5,如果在任何时刻发生丢包,则进入Recovery(恢复模式)时,设置CWND=β*CWND;设置GM=停止;其中β=0.7,该数值0.7是一个经验数值,本领域技术人员可以根据实际情况设置其它数值。
步骤6,随着从拥塞状态恢复而退出Recovery(恢复模式)时,设置GM=指数增长,执行与上述初始状态类似的操作;但从Recovery模式退出后所述平滑吞吐率B不清零,而是在原有的平滑吞吐率的基础之上继续执行与初始状态类似的操作。
本发明相应的提供了所述基于吞吐率和丢包控制CWND的优化系统,包括:即时吞吐率计算单元,用于针对收到ACK应答的数据报文,计算其实际的即时吞吐率;吞吐率平滑单元,根据所述即时吞吐率计算平滑吞吐率;CWND增长模式设置单元,用于判断平滑吞吐率B的变化状态,并相应地控制CWND增长模式;CWND收缩单元,用于在任何时刻因发生丢包进入Recovery模式的情况下,按照CWND收缩系数减小CWND。以上各个单元执行功能的具体算法已经在上文的方法中详加介绍,在此不再赘述。
可见,本发明相比现有技术具有以下特点和进步:首先,基于吞吐率最大化的原则,在稳定的和变化的网络环境下,尤其是无线网络中,均能取得良好的吞吐率,性能不亚于广泛使用的其它TCP算法如CUBIC,NewReno等。而且这种算法也摈弃了不易准确测算的BaseRTT。其次,引入吞吐率和时延的控制CWND增加,但仍使用丢包作为收缩CWND的准则,因此在与基于丢包的算法混合部署时无劣势。第三,丢包恢复后采用吞吐率控制的指数增长,提高带宽搜索速度,优于CUBIC。第四,采用与CUBIC一致的CWND收缩系数,丢包时CWND收缩对比CUBIC不会有劣势。
以上所述,仅为本发明的具体实施方式,本发明还可以应用在其它设备中;以上描述中的尺寸和数量均仅为参考性的,本领域技术人员可根据实际需要选择适当的应用尺寸,而不脱离本发明的范围。本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求所界定的保护范围为准。