Feng等人针对RED算法参数难以设置的问题,提出了一种参数自适应配置的SC-RED(Self-Configuring,RED)算法[15],其主要思想是根据网络中负载的变化对参数 (最大丢弃/标记概率)的值进行动态调整,从而获取更好的性能。当网络负载减少的情况下,平均队列长队会在 附近振荡,说明拥塞控制过于激进,此时调整 ;当负载增加的情况下,平均队列长度会在 附近振荡,说明拥塞机制过于保守,此时调整 。该算法虽然解决了RED中参数设置的敏感性问题,但是这种参数调整给最大丢包概率带来的波动较大,导致队列波动也较大。文献[16]提出的自适应ARED算法(Adptive-RED)同样是对 的值进行动态调整,同SC-RED算法相比更精确地设置了平均队列长度的上下界和丢弃概率的参数调整范围,能够在负载变动的情况下保持队列的稳定。
上述RED及其改进算法都采用平均队列长度来衡量网络的拥塞程度,然而队列长度并没有提供足够的拥塞信息。2000年,Feng等人提出了BLUE算法[19],它采用丢包和空链路事件而非队列长度来动态调整包的丢弃率,当丢包事件发生时,增加包的丢弃率,当空链路发生时,减小包的丢弃率。该算法能够对网络拥塞信息做出快速响应,却无法避免队列缓冲区的溢出,会导致端到端延迟的增加。当网络负载变化时,路由器的队列长度会发生大幅振荡。随着网络运用的多样化,特别是其中的很多运用是基于非响应流的,如何解决非响应流和响应流共享网络的公平性问题成了研究重点。作者在BLUE算法的基础上提出公平性算法SFB(Stochastic Fair Blue),能识别非响应流,并对其进行限速,从而保护响应流。
SRED(Stabilized RED)算法[17]是由Lakshman等人提出的,作者设计了一种数据结构,称为“僵尸”列表(Zombie List)。这个列表作为数据流的缓存,里面记录了M个最近经过路由器队列的流的信息,僵尸列表中每一个僵尸等价于一个数据流,它还记录了每个流的一些额外信息。僵尸列表在最初是没有记录的,在满队列之前每个新到达包的信息都会被记录,队列一旦满载将以如下方式工作:每一个新到达的包会和僵尸列表中随机选出来的一个僵尸进行比较,如果它们属于同一个流,则称为“击中”,如果它们不属于同一个流,则称为“未击中”,此时这个包的信息会以概率P来取代被选出来的僵尸。通过这个僵尸列表的信息可以对活跃流数目进行有效估计,在此基础上丢弃概率不仅同队列长度相关还同活跃流的数目相关。这种算法降低了丢包率,提高了链路利用率,改善了网络性能,但需要额外的计算,加大了路由器的负担。
Lin和Morris提出了自适应虚拟队列AVQ(Adaptive Virtual Queue)算法[20],它在路由器上文护一个虚拟逻辑队列,其链路容量 小于实际链路容量 ,队列缓冲大小同实际队列缓冲大小一样。当有新分组到达实际队列时,虚拟队列长度也同样进行更新来表示这一变化,如果虚拟队列发生溢出,那么对应的分组被丢弃或者标记。虚拟链路容量 根据数据流输入速率和实际链路容量的差值进行动态调整,从而提高链路使用率。
Bartek和Moshe在文献[21]中提出了GREEN算法,GREEN算法通过预估数据到达速率 来衡量网络的拥塞程度,如果预估速率小于目标链路容量,那么减少丢包概率,如果预估速率大于目标链路容量,那么增大丢包概率,通常设定的目标链路容量仅略小于实际链路容量。选用速率而非队列长度作为网络拥塞衡量指标的好处是队列长度比较短和排队延时比较小,然而链路使用率比较低。
1.2.2 基于优化理论的拥塞控制
基于优化理论的拥塞控制主要采用控制方法和优化方法来建立网络模型,通过最大化效用函数来设计具有稳定性、公平性和保证相应服务质量的拥塞控制算法。效用函数是网络的服务质量和网络用户的满意度,通常是分组丢失率、带宽、时延的函数,用户愿意为更大的效用值支付更高的价格。网络的通信量可分为实时通信量(real-time traffic)和弹性通信量(elastic traffic),它们拥有不同形式的效用函数[35]。实时通信量需要数据在一定的时延内到达,时延的大小决定着网络的服务质量,因此实时通信量的效用函数跟时延相关。弹性通信量对时延不敏感,拥有的带宽越多表现的性能越好,因此其效用函数是带宽的递增函数。 基于神经网络的自适应RED算法及其仿真研究(3):http://www.751com.cn/zidonghua/lunwen_5482.html