目前,互联网上已经广泛使用TCP滑动窗口进行端到端的拥塞控制。但是,随着网络用户的增加和所承载业务流的多元化,端到端拥塞控制正面临着严峻的挑战。而路由器是互联网的核心实体,也是网络拥塞状态最直接的感受者,因而充分发挥路由器在拥塞控制中的作用也是解决拥塞控制问题的有效思路。而且路由器可能更及时,甚至能够提前了解网络的状态,并依此实施有效的资源管理策略,保证网络能有效地避免拥塞或尽早从严重的拥塞状态中恢复过来。
本文研究的重点是路由器拥塞控制中的队列管理,队列管理通过选择何时丢弃何种业务流分组来控制队列长度。
1 主动队列管理
1.1 Tail Drop
路由器中最常用的队列管理策略是“尾丢弃”(Tail Drop),从拥塞控制的角度分析,它是一种拥塞恢复机制,也是一种被动队列管理。但它有3个严重缺陷:持续的满队列状态;业务流对缓存的死锁;业务流的全局同步。针对这些问题,提出用“首丢弃”和“随机丢弃”对死锁和全局同步比较有效,但没有解决持续的满队列问题。近年来有学者提出主动队列管理AQM(Active Queue Management)[1-2]让路由器在拥塞发生前就采取一些预防措施,使得满队列问题比较有效地得到解决。
AQM策略试图通过估算在某点的拥塞并且在缓冲区满之前通过丢弃数据包来进行标记。相应的拥塞控制策略能够减小它的传输速率。这样可以避免更加严重的拥塞,且试图降低包的丢失率,保持较低的平均队列长度。一个AQM算法由两部分组成:判断拥塞的发生和决定该丢弃哪些包。所以它的性能依赖于是积极的还是保守的判断拥塞的发生,怎样根据判断结果主动地丢弃数据包。
1.2 RED
去尾算法考虑的是拥塞发生后如何恢复,如果在拥塞发生前就采取措施,则可以解决满队列问题。AQM正是设计用来克服网络中的Tail Drop队列的缺点。而RED是最早提出的一种AQM算法。
RED算法是基于拥塞避免的思路,不是等缓存满后再丢弃到达的分组,而是利用标记概率事先丢掉部分分组来预防拥塞的发生。同时,RED 算法不是采用源抑制策略,立刻把反馈信息返回给发送端,而是通过设置标志位提示接收端,再由接收端传递给发送端;而且,RED通过平均队列而非即时队列来调整分组的丢失率,以尽可能地吸收部分短暂的突发流。在队列频繁接近于满缓存时, RED的丢包率明显小于丢尾队列。