李 婷
(西安财经学院统计学院,陕西 西安 710061)
【摘 要】本文基于网络拥塞发生的原因,介绍了TCP拥塞控制流程。分析TCP网络拥塞控制的原理、控制机制及控制算法。最后,在TCP拥塞控制基本过程:慢启动、快速重传和快速恢复中提出改进建议,使TCP拥塞控制具备更高的网络转发能力。
教育期刊网 http://www.jyqkw.com
关键词 TCP;拥塞控制;网络拥塞
1 网络拥塞发生的原因
网络中的拥塞来源于网络资源和流量分布的不均衡性。一旦网络中存在过多的数据包,就会导致网络性能的下降,这种现象称为拥塞。拥塞会导致分组丢失率增加,从而增大端到端的延迟,累积到一定程度就是整个系统的崩溃。这样的例子在互联网发展史上曾经不止一次的出现过,当网络处于拥塞崩溃状态时,微小的负载增量都将使网络的有效吞吐量急剧下降。
网络拥塞发生的原因说起来也很简单,就是“需求”大于“供给”。网络本身无法根据现有资源的情况限制用户的数量;互联网络又是一个分散控制系统,无法控制用户使用资源的数量,不断增长的用户和应用的数量必然会导致网络发生拥塞。
2 TCP拥塞控制
研究拥塞控制的目的不是要完全避免拥塞,而是研究怎样的拥塞程度是合适的。TCP网络是可靠数据传输,采用分组交换技术来提高网络链路的利用率,也就是说,路由器队列缓存如果是满的,则网络利用率最高,但传输延迟大;队列始终是空的或不满,则网络利用率低,传输延迟小。所以拥塞控制的目标就是实现网络利用率和传输延迟等综合性能指标达到最优化,提高网络的总体性能,保证网络系统长期的稳定性和鲁棒性。
TCP的实现包含四个连续的基本过程,其实是四个不同的阶段,分别是:慢启动、拥塞避免、快速重传和快速恢复。
慢启动:当一个新的TCP连接建立时,发送方发送一个缺省大小为512字节的TCP报文段(segment),称为拥塞窗口(cwnd),该cwnd的值被初始化为一个数据包,因此每经过一个RTT,cwnd将指数增加。该算法的原理就是将能发送到网络的新数据包的发送速率对应从接受端返回的确认消息的速率。
拥塞避免:拥塞避免的触发条件是当发现接收方的ACK确认包超时到达或者收到了三个相同的ACK确认包时,TCP就认为网络中出现了拥塞,开始执行拥塞避免算法,这里的触发条件是有前提条件的,那就是TCP假设由于线路传输引起的数据包损坏和丢失的概率非常小,Jacobson V在1988年提出的值为小于1%时条件就成立。在这一阶段,慢启动阈值(ssthresh)设置为cwnd的一半,如果是超时,cwnd则被置1。如果此时cwnd<=ssthresh。TCP就重新进入慢启动,如果cwnd>ssthresh,TCP进入拥塞避免,发送方每收到一个ACK,则cwnd=cwnd+1/cwnd。可见慢启动阶段cwnd的增加是指数的,而拥塞避免阶段则是线性的。
快速重传和快速恢复:发送方不等到数据包超时,在收到三个或三个以上的重复ACK时就判断数据包已经丢失,这样不用等定时器超时后cwnd置1,就马上重传该数据包,同时将ssthresh的值置为当前cwnd的一半,这种算法来保证TCP保持足够的吞吐量。快速恢复的算法是:(1)当第三个重复的ACK到达,设置ssthresh=cwnd/2;重传丢失的报文;设置cwnd=ssthresh+3。加3是因为三个重复的ACK表示有三个数据包已经被接受方缓存了。(2)每次有一个更多的重复ACK到达,把cwnd加1并在可能的情况下传输一个报文段。(3)当确认新数据的下一个ACK到达时,设置cwnd=ssthresh,进入拥塞避免。
3 TCP拥塞控制算法的改进
3.1 慢启动的改进
随着Internet应用在互联网络中的占的比例逐步增大,Web数据流占了网络流量的相当部分,这些TCP连接的数据量一般都很短小,通过了解TCP拥塞控制原理,我们知道短TCP流主要工作的阶段是慢启动阶段,它不具备长TCP流的传输时间,无法达到拥塞避免阶段,所以短TCP流的问题是,如果一个分组丢失,按照拥塞控制算法,需要等待定时器超时重传,这在带宽竞争上就无法和长TCP流竞争,从而造成网络的拥塞节点处,长TCP流会挤掉短TCP流,使贷款分配不均。针对这些问题,研究者们提出了传统的慢启动存在的两个问题:(1)数据发送从一个数据包开始,要经过多个RTT才能达到较大吞吐量,这不利于流量小但是链路延迟又比较大的TCP流的传输;(2)采用指数增长的方式发送数据造成了数据突发,易引起瓶颈链路的拥塞。
针对第一个问题,大家提出了很多解决方法,比如采用大的初始窗口,将初始窗口从1MSS增加到4MSS,(Allman M.et al, 1998),这种方法虽然可以改善慢启动的性能,但是不能适应多变的网络带宽。还有就是将各个TCP连接的信息共享(Padmanabhan V.et al,1998;Touch J,1997;Savage S.et al,1999),后面的连接可以使用具有相同目的地址的连接信息,从而可以减少慢启动的时延,但是这样会使连接很快造成网络拥塞,而短TCP的长度只需要几个RTT就可以传输完毕,网络拥塞会造成额外的时延。再后来提出了将初始窗口设定为4个分组,而从以快速重传来减少重传超时造成的传输时延(Mellia M.et al,2001)。
解决第二个问题可以通过使用带宽时延的估计来设定初始慢启动阈值ssthresh(Hoe J,1996)。Smoot-start方法(Marchese M,2001)使发送方从慢启动阶段较为平滑的过渡到拥塞避免阶段,减少了数据包丢失和突发流,当拥塞窗口到达Smsthresh后,采用比较平缓的指数方式增长拥塞窗口,逐渐达到默认值或估算的ssthresh值。
3.2 快速重传和快速恢复的改进
有时发送端减少拥塞窗口值并不是因为分组丢失,而是分组数据传输中顺序错误引起的重复ACK。有限传输机制(Allman M,Balakrishman H.and Floyd S.2001)是一种改进方法,当发送端收到一个或两个重复的ACK后,如果被允许,发送端就发送一个新的分组。这种方式对错序的状况有较好的调节作用。还有D-SACK方式,是一种基于SACK的方式,通过给TCP发送端一个附加信息,来判断是否发生了不必要的重传,D-SACK通过接收端受用SACK选项来报告收到了重复的分组序列,D-SACK在容易引起错序的环境下提供更高的效率。
快速恢复的改进机制有SACK(Selective Acknowledgement),FACK(Forward Acknowledgement),TCP New-Reno等。SACK方式的接收端通过ACK向发送端通过所有正确的分组,发送端只需重传真正丢失的分组。FACK是基于SACK的改进,它们的问题都是增加了TCP的复杂性,对TCP版本的兼容性较差。TCP New-Reno不需要接收端的特殊支持,相对实现起来简单,但是数据传输效率相对不高。Rate-Halving(Allman M ,Dawkins S,Glover D,et al,2000)是FACK的一个比较新的版本。在快速恢复阶段,每收到2个ACK发送一个新的分组,从而在一个RTT里将拥塞窗口减小到网络能处理的分组数的一半大小,并保持了TCP的自计时特性。
目前,TCP基于窗口的拥塞控制策略被广泛的应用。各种改进的TCP控制策略在不同侧面解决了一定的问题,但是也有着局限性,有的实现起来过于复杂,有的解决了多个分组丢失的恢复问题,但对恢复过程中出现的分组丢失却无法得到解决。
4 结束语
在实际的应用中,针对不同特点的TCP网络,有着适合的改进策略,这些策略不用做到面面俱到,只要具有一定的针对性就可以。网络拥塞的改进是十分灵活的,方法也很非常多,其原因正式因为不同网络中传输的数据特点不同,从而选择合适的改进策略是关键。
教育期刊网 http://www.jyqkw.com
参考文献
[1]Allman M ,Hayes C ,Ostermann S.An Evaluation of TCP with Larger Initial Windows[J].ACM Computer Communication Review,1998,28(5):41-52.
[2]邓亚平,叶凌伟,陈雁.TCP/IP拥塞控制算法的改进[J].计算机科学,2001(4):110-113.
[3]王彬.TCP/IP网络拥塞控制策略研究[D].浙江大学,2004.
[责任编辑:杨玉洁]