一种自适应比例系数的TCP拥塞控制策略*
2011-02-28杜军恒
陶 洋,杜军恒,武 俊
(重庆邮电大学 软件技术中心,重庆400065)
21世纪以来,计算机网络发生了突飞猛进的发展,各种新业务在互联网上的应用也越来越广泛,这就给带宽有限的网络带来了巨大的负担,从而引发了严重的网络拥塞问题。
TCP是互联网上应用极其广泛的基于滑动窗口的拥塞控制协议。它使用了一种可靠的设计思路,这种思路具有较为简单、扩展性强等特点。它能够依据网络的实际具体情况自动地调整拥塞窗口的大小,使得TCP数据的发送能够依据网络的负担自适应地变化。但近年来,互联网上的用户越来越多,业务量也随之增加,网络拥塞问题亦越来越严重。因此,人们对拥塞控制的研究重视程度亦越来越高,先后提出了许多新的算法,如TCP Tahoe、TCP Reno、TCP New-Reno、TCP sack、TCP Vegas[1]。这些算法着重研究了快重传和快恢复机制,而慢开始和拥塞避免并无过多涉及。但慢启动和拥塞避免亦不能忽视,因为这些策略的好坏对拥塞控制机制的影响同样是巨大的。针对该问题,本文提出了一种自适应比例系数的拥塞控制策略。
1 TCP拥塞控制原理及相关算法
互联网拥塞控制主要由传输层完成,它通过改变一些主要的参数来降低发送端数据的发送速率。这些参数主要包括拥塞窗口cwnd(发送端一次最多发送的数据包的个数)和慢开始门限ssthresh(慢开始阶段与拥塞避免阶段的分界点)。
早期的拥塞控制协议中,发送端每发送一个报文就必须收到接收端返回的ACK后才能发送下一个报文。发送端在等待接收端发送ACK的期间内不发送任何报文;当报文丢失时,必须等到计时器超时后才能重发丢失的数据包。显然,这种策略严重地浪费了网络的带宽,网络传输数据的效率极其低下。
现在使用的拥塞控制协议采用了AMID[2]控制算法,能够达到较好的拥塞控制效果,提高了网络数据的传输效率,这种策略一般分为4个阶段[3],具体如下:
(1)慢开始阶段。在TCP建立连接之初,如果发送方将cwnd设置为较大值,发送方有可能将较大的数据字节全部注入到网络中,但此时并不清楚网络的状况,因此就有可能引起网络拥塞。经实际证明,最好的方法是试探一下,即由小到大逐渐增大发送端的cwnd数值。通常发送方在开始发送数据报文段时将cwnd设置为一个最大的MSS数值,发送方每接收到接收方发来的一个ACK,就把 cwnd增加一个值,直到 cwnd增加到 ssthresh(慢开始门限值),此时进入拥塞避免阶段,采取拥塞避免算法。在采取拥塞避免算法之前,拥塞窗口cwnd的值以指数方式增长。
(2)拥塞避免阶段。当 cwnd值达到 ssthresh(慢开始门限值)时,此后进入拥塞避免阶段,发送端的cwnd每经过一个 RTT(往返时延)就增加一个 MSS的大小(而不管在时间RTT内收到了几个接收端发送的ACK)。这样,发送端cwnd就不再像慢开始阶段那样进行指数增长 ,而是按线性规律增长(称为加法增大),这比慢开始算法的拥塞窗口增长速率缓慢得多。在没有丢包之前,该策略将一直持续下去。当假定cwnd的数值增长到N(N=24)时,网络出现超时(表明网络拥塞了)。ssthresh置为N/2(为发送窗口数值的一半,这种算法称为乘法减小),cwnd重置为1,并执行慢开始算法。当 cwnd=12时改为执行拥塞避免算法,拥塞窗口按线性规律增长,每经过一个RTT就增加一个MSS的大小。
(3)快重传阶段。前面的慢开始和拥塞避免算法是在TCP早期使用的拥塞控制算法,后来人们对其进行了改进,因此就有了快重传和快恢复。假设发送端发送了M1~M4这 4个报文段,当接收端收到M1和 M2后,就发出确认ACK2和ACK3。现假定M3丢失了,接收端收到下一个M4,发现其序号不对,但仍收下放在接收缓存中,同时发出确认,但发出的是重复的ACK3(不能发送ACK5,因为ACK5表示M4和M3都已经收到了)。这样发送端知道现在可能是网络出现的拥塞造成了分组丢失或是M3仍滞留在网络中某处,还需经过较长的时延才能到达接收端。发送端接着发送M5和M6,接收端收到了M5和M6后,还要分别发出重复的ACK3。这样发送端共接收到了4个ACK3,其中3个是重复。如果快重传算法规定,当发送端连续收到3个重复的ACK时即可断定有分组丢失了,就应立即重传丢失的报文而不必继续等待为M3设置的重传计时器超时。由此可知,快重传并非取消重传计时器,而是在某些情况下更早地重传丢失的报文段。
(4)快恢复阶段。与快重传配合使用的还有快恢复算法,当不使用快恢复算法时,发送端若发现网络出现拥塞就将拥塞窗口置为1,然后执行慢开始算法。但这样做的缺点是网络不能很快地恢复到正常状态。快恢复算法可以较好地解决这一问题。当发送端连续接收到3个重复的ACK时,就采用乘法减小设置ssthresh,与慢开始不同的是cwnd设置为ssthresh+3×MSS,然后执行拥塞避免算法,这样可以使网络快速恢复到正常水平(与cwnd设置为1相比),大大地提高了网络的吞吐量。
TCP拥塞控制算法效果图如图1所示。
2 乘法减小及其存在问题
当假定 cwnd的数值增长到 N(N=24)时,网络出现超时(表明网络拥塞了)。ssthresh置为N/2,ssthresh的新数值为12,这种算法称为“乘法减小”。进一步说,“乘法减小”是指不论在慢开始阶段还是拥塞避免阶段,只要出现一次超时(即出现一次网络拥塞),就将慢开始门限值ssthresh设置为当前的拥塞窗口值的1/2。当网络频繁出现拥塞时,ssthresh值就会下降得很快,以大大减少注入到网络中的分组数。但是网络拥塞极其频繁时,这种固定比例的减小策略就会存在问题,这种减小力度不够大,仍会造成网络十分拥堵,甚至使得网络发生崩溃;当网络很少出现拥塞时,这种固定的减小策略会使得注入网络的分组数不够多,从而造成网络带宽得不到充分利用,造成网络资源的浪费。
3 一种新的变比例因子的乘法减小策略
针对固定比例因子的“乘法减小”策略容易出现的一些问题,本文提出了一种新的变比例因子的策略,其主要思路是在数据传送初期设置4个参数:3个时间参数t1、t2、△t和比例因子p,依据 3个时间参数的变化来动态调整比例因子p的大小,从而使得比例因子p根据网络的状况自适应地变化。
具体思路:引入 3个时间参数 a、b、c和 p(0
0.8,则 p的值大小不变,将 t2-t的值赋给△t,t2的值赋给 t1,否则将p+0.2的值赋给 p,t2-t的值赋给△t,且将t2的值赋给t1。新策略的算法描述大致如下。
本文所提出的动态变化系数策略如上所述,新策略可以根据网络状态的好坏动态地调整系数p的大小。
4 仿真
4.1 仿真场景
为了证明新策略的有效性,本文使用NS2[4]网络仿真软件对未改进的策略与改进后的策略进行了仿真对比。本文使用的网络拓扑图如图2所示。
图 2中,s1、s2为发送端,t1、t2为干路的路由器,r1、r2为接收端。在上面的拓扑图中,建立了两条链路,一条为s1将数据通过干路路由器转发,将数据发送到r1;另一条为s2将数据通过干路路由器转发,将数据发送到r2。两条链路均采用基于TCP的FTP连接,传输速率为10 Mb/s,延迟为 2 ms,分组大小为 1 000 B。干路路由器t1、t2之间构成瓶颈链路,传输速率为1.5 Mb/s,延迟为 50 ms。
4.2 仿真结果分析
图3、图4是新旧策略包到达率和端到端延时比较,可以看到,新策略的到达率比原策略大,这是因为新策略可以根据网络状态的好坏动态调整乘法比例因子。当网络发生拥挤时,新策略降低乘法因子,减少数据包的发送,减小网络负担,因此数据包到达的可能性提高,封包端到端时延减小。
本文阐述了拥塞控制原理及算法并对算法做出了一些改进,提出了自适应比例因子乘法减小策略。通过NS2仿真分析可知,这种策略明显提高了网络的性能。
[1]王云涛,方建安,张晓辉,等.基于TCP Vegas的网络拥塞控制改进算法[J].计算机应用研究,2009,26(12):56-58.
[2]Yang Ming,Hang Fuyan.AIMD-based congestion control for layered multicast[S].IEEE.2002,02:833-837.
[3]谢希仁.计算机网络[M].北京:电子工业出版社,2006.
[4]徐雷鸣,庞博,赵耀.NS与网络模拟[M].北京:人民邮电大学出版社,2003.