(1)存储空间不足。从理论上来说,如果存储空间足够大,能够完全容纳下正在排队的封包的话,那么将不会产生封包丢弃,自然也不会形成网络拥塞。但是,存储空间的大小不能无限的提升,一的增加存储空间的大小也无法完全消除网络拥塞的发生。过大的存储空间也会导致封包在队列中等待时间过长进入到发送超时的状态中,导致源端重复发送超时的封包,降低网络性能,加重网络拥塞的情况。
(2)带宽容量不足。当链路的带宽小于数据传输速率的时候,必然会有封包进入到队列中去,如果长时间保持这种状况,封包将会将队列充满并溢出,形成网络拥塞。反过来说,如果能够保证链路带宽大于数据传输的速率,那么缓存队列将几乎不会存在封包,网络拥塞更是不会出现。但是,考虑到现在网络的规模和网络的发展速度以及网络环境的复杂性,能够适应一切情况的链路带宽是几乎无法实现的,起码以现在的技术水平难以实现。即使如此,增加带宽容量也是网络拥塞控制的有效手段和所作出的必要努力。
(3)处理器处理能力弱。处理器处理能力不足更多的是体现在进行队列管理的速度不够迅速,导致进入队列的封包不能快速地发送出去,使封包积攒在队列中,最终使封包发送超时甚至形成网络拥塞。[1]
存储空间和带宽容量的问题主要在于硬件和材料,在没有技术突破的前提下,不太可能有大幅的提升。如此一来,改善处理能力便成了首要选择,也就是改变源端和中间节点的算法。本文主要研究两种算法就是属于中间节点队列管理机制的算法。
1.2 网络拥塞控制研究现状
网络拥塞控制从控制理论分类可以分为两类:开环控制和闭环控制。而由于开环控制不适用于突发流量频繁出现、流量特征难以准确描述、系统不提供资源预留的现今网络情况,所以在网络拥塞控制方面更多的采用闭环控制。闭环控制在控制拥塞的过程中大致分为三个过程:(1)检测拥塞发生。(2)获取拥塞信息并传输到控制单元。(3)根据拥塞信息采取控制方案。[2]
由此可见,闭环控制能够动态地根据网络状况改变控制策略,但是也由于以上的三个过程,闭环控制往往有着或多或少的延时,控制精度也不高。为了改进闭环控制,那么就需要引入控制理论,设计出新的网络拥塞控制方法。
网络拥塞控制算法从控制位置上分类可以分为基于源端的拥塞控制(源控制算法)和基于中间节点的拥塞控制(链路控制算法),源控制算法负责根据拥塞信息调整发送速率,链路控制算法负责检测网络拥塞和发送拥塞信息。不同的算法能够生成不同的拥塞信息和不一样的对拥塞信息进行响应。
1.2.1 基于源端的拥塞控制
由于在源端大部分网络采用的是TCP协议中的拥塞控制算法,只存在基于窗口的流量控制机制而没有拥塞控制。因此,在源端仅能够根据拥塞程度,通过控制窗口来调节传输速率。
TCP拥塞控制算法经历了多个发展,1988年,Jacobson首次提出的TCP Tahoe;Stevens提出同时也是目前广泛应用的TCP Reno;Floyd在1999年提出的TCP New Reno算法;以及Lawrence S等人提出的TCP Vegas等。目前TCP拥塞控制策略有四个核心算法:慢启动(Slow Start)、拥塞避免(Congestion Avoidance)、快速重传(Fast Recovery)、快速回复(Fast Retransmit)。
(1)慢启动。慢启动是一种试探型的拥塞控制机制,这种算法设置了拥塞窗口cwnd并作为发送端发送速率的限制,且设置其初始值为1。每当接收端接收到一个数据包后,将送回一个确认字符ACK,发送端接收到确认字符ACK后拥塞窗口cwnd将增加一个,直到拥塞窗口cwnd达到限制。如此一来,通过慢启动算法逐步增加数据的传输速率,对网络的带宽进行试探,这样就避免了一开始就大量发送封包导致封包溢出队列,形成网络拥塞。 网络拥塞控制中丢尾算法与PI算法的分析比较(2):http://www.youerw.com/tongxin/lunwen_18892.html