②路由器缓存不足。当多个源端发送数据时,传输的分组会在路由器的缓存中排队,而当队长超过路由器缓存的容量时,路由器就会丢失分组。简单的扩充路由器的容量不能改善这种现状,因为当路由器容量扩大时,处于队列头部的分组早已超时,使得发送端进行超时重传,加剧了网络拥塞。
③处理器的速度慢。当路由器的cpu在进行排队缓存以及路由表更新操作时,速度低于高速链路,就会造成网络拥塞现象。
而随着网络应用需求的增加,人们对因特网服务质量的要求也与日俱增,不仅需要更高的传输带宽,还要求更大的安全性,这对网络拥塞控制机制提出了更高的要求。同时,由于多媒体的广泛应用,网络中除了传统的web、ftp流外,出现了越来越多的多媒体流,而这些多媒体流往往并不支持传统的端到端控制,在路由器中极易造成拥塞,使得网络拥塞的问题日益严重,这给网络拥塞控制提出了更高的要求,使得多媒体流可以与传统的TCP流共存,并适应TCP的控制机制。
鉴于上述分析,理想中的网路拥塞控制机制应该具有以下几个特点:
①稳定性:即控制算法应该具有一个平衡点,且该算法能够收敛于该平衡点。
②高效性:要求控制算法不仅能够保证网络的效率,而且算法本身也应当快速收敛到平衡点。
③公平性:即算法不仅保证了主流的TCP传输协议内的公平,还要保证不同协议间的TCP友好。
④鲁棒性:该要求需要控制算法可以抵御恶意用户,对其进行隔离从而保证其他网络用户的满意程度。
1.2 拥塞控制算法的发展进程
1.2.1 TCP拥塞控制机制
TCP的拥塞控制主要包括四个阶段,分别是慢启动阶段、拥塞避免、快速重传以及快速恢复阶段[2]。早期的网络拥塞控制策略主要是通过对TCP中流量控制进行,该方法属于端到端的方法,且基于滑动窗口,对于保证网络的鲁棒性有着至关重要的作用。在很长时间里,它被所有主机支持,是仅有的可行拥塞控制算法。1988年,Van Jacobson 指出了TCP在控制拥塞方面的缺陷,提出了慢启动以及拥塞避免算法[3],为后续的TCP流量控制奠定了基础。在此基础上,研究人员不断探索,相继诞生了Tahoe, Reno, NewReno, SACK, Vegas等五个版本,这些版本均遵守加性增加倍乘减少(AIMD)的原则,可以用增量常数以及倍减参数来刻画这些算法。
1.2.2 IP层拥塞控制策略
随着网络规模的扩大以及网络应用的丰富,传统的仅仅依靠端系统的拥塞控制方法很难满足服务质量(Qos)的要求,因此,研发人员着眼于网络中间节点,希望通过加强路由器的拥塞控制功能来弥补端系统的不足。路由器的拥塞控制方法有两种:分组调度、队列管理。调度直接指定下次发哪个分组并对各个流带宽进行分配。而队列管理算法是通过分组丢弃策略管理路由器缓冲区中分组队列的长度,即通过在适当的时候丢掉一些分组,实现网络的控制[4]。队列调度有FIFO、WRR、WFQ等策略,而队列管理算法又可分为被动队列管理以及主动队列管理两种算法。
早期拥塞控制采用被动队列管理——丢尾(DropTail)方法。即,数据包在路由器缓存中排队等待输出,当缓存满时,路由器将丢掉排在队尾的分组。该方法使用简单,早期得以广泛应用,但该方法有三个严重缺陷[5]:一是持续的满队列状态,原因在于丢尾算法只在满队列时才发送拥塞信号。二是存在死锁现象,可以导致某几个业务流利用链路而其他业务流无法传送。三是产生全局同步现象,源端在检测到丢包时降低发送速率,而当网络空闲时又会增加发送速率,造成拥塞。这使得网络吞吐量剧烈抖动,影响网络通信性能。 NS2基于控制原理的网络拥塞控制设计(2):http://www.youerw.com/tongxin/lunwen_29471.html