主动、被动队列管理算法、RED
原文转自:http://blog.sina.com.cn/s/blog_6d2d9a5d0101u6to.html
1、引言
由于路由器是基于包交换的设备,每个端口采用带宽统计复用,所以路由器必须在端口上维护一个或多个队列,否则路由器无法处理多个数据包同时向同一端口转发以及端口QOS等问题。对队列进行管理直接影响路由器性能、拥塞管理能力以及QOS能力。路由器有两类和控制队列的算法:队列管理算法和队列调度算法。前者主要是在必要时通过丢包来管理队列长度。后者决定下一个要发送哪个包,主要用来管理各流之间带宽的分配。
由于Internet数据本质上是突发的,因此允许传输突发的数据包非常必要,而路由器中队列的重要作用就是吸收(absorb)突发的数据包。较大的队列能够吸收更多的突发数据,提高吞吐量,但TCP机制往往会保持较高的队列占用,从而增加了数据包的排队延迟。因此需路由器对队列进行管理,维持较小的队列长度。因为维持较小的队列长度除了降低排队延迟,提高吞吐量外,还能保持较大的队列空间来吸收突发数据包。拥塞控制机制就是要维持网络处于低延迟高吞吐量的状态。
当前的队列管理算法可以分为两大类:被动式队列管理(Passive Queue Management,PQM)和主动式队列管理(Active Queue Management,AQM)。
2、被动队列管理
2.1 被动式队列管理及其缺陷
管理路由器队列长度的传统技术是对每个队列设置一个最大值(以包为单位),然后接受包进入队列直到队长达到最大值,接下来到达的包就要被拒绝进入队列直到队长下降。这种技术也就是所谓的"去尾"(drop-tail)算法。虽然这个方法在当前Internet上得到了广泛的使用,但其存在几个重大缺陷:
其一,死锁(lock-out)问题:在某些情况下,"去尾"算法会让某个流或者少数几个流独占队列空间,阻止其他流的包进入队列。这种"死锁"现象通常是由于同步(synchronization)或其他定时作用的结果。
其二,满队列(full queues)问题:由于"去尾"算法只有在队列满时才会发出拥塞信号,因此会使得队列在相当长时间内处于充满(或几乎充满)的状态。而队列管理最重要的目标之一就是降低稳定状态下队列的长度,因为端到端的延迟主要就是由于在队列中排队等待造成的。
其三,全局同步(global synchronization)问题:由于Internet上数据的突发本质,到达路由器的包也往往是突发的。如果队列是满的或者几乎是满的,就会导致在短时间内连续大量地丢包。而TCP流具有自适应特性,源端发现包丢失就急剧地减小发送窗口,包到达速率就迅速下降,于是网络拥塞得以解除,但源端得知网络不再拥塞后又开始增加发送速度,最终又造成网络拥塞,而且这种现象常常会周而复始地进行下去,从而在一段时间内网络处于链路利用率很低的用状态,降低了整体吞吐量,这就是所谓地"TCP全局同步"现象。
除了"去尾"机制,另外两种在队列满时进行队列管理的机制是"随机丢弃"(random drop)和"从前丢弃"(drop front)机制。当队列满时,前者从队列中随机找出一个包丢弃以让新来的包进入队列;后者从队列头部丢包,以便让新包进入队列。这两种方法虽然都解决了"死锁"问题,但仍然没有解决"满队列"问题。由于这几种方法都是在队列满了被迫丢包,因此称为被动式队列管理。
2.2 主动式队列管理及其优点
在当前的Internet上,丢包是对端节点进行拥塞通知的重要机制,解决路由器"满队列"的方法便是在队列充满之前丢包,这样端节点便能在队列溢出前对拥塞做出反应。这种方法便称为"主动式队列管理"(Active Queue Management)。
AQM是一族基于FIFO调度策略的队列管理机制,使得路由器能够控制在什么时候丢多少包,以支持端到端的拥塞控制。AQM有以下优势:
其一,减少了路由器中丢弃的包的数量:Internet中数据包的突发本质是不可避免的,AQM通过保持较小的平均队列长度(average queue size),能提供更大的容量吸收突发数据包,从而大大减少了丢包数。进一步说,如果没有AQM,会有更多的包被丢弃,这主要是因为以下三个原因:
1) 由于使用共享的队列和PQM,会不可避免地产生全局同步,导致很低的平均带宽利用率,也即吞吐量很低。
2) TCP从突发包的丢弃中恢复要比从单个包丢弃中恢复更复杂。
3) 如果一个数据包在到达目的端之前被丢弃,则其在传输过程中所消耗的资源都被浪费,降低了网络带宽的利用率。因此,不必要的包丢弃也就意味着带宽的浪费。
其二,对交互式服务提供了更低的延迟:AQM通过保持较小的平均队列长度,队列管理能够减少包的排队延迟(queueing delay),而排队延迟是造成端到端延迟(end to end delay)的主要原因。这对交互式应用比如Web浏览、Telnet业务和视频会议等非常重要。
其三,避免了"死锁"现象:AQM能够通过确保到来的包几乎总是有可用的队列空间,从而阻止"死锁"行为的发生。也因为这个原因,AQM能防止路由器对低带宽高突发的流的偏见。
3 随机早期检测算法(Random Early Detection,RED)
RED拥塞控制机制的基本思想是通过监控路由器输出端口队列的平均长度来探测拥塞,一旦发现拥塞逼近,就随机地选择连接来通知拥塞,使他们在队列溢出导致丢包之前减小拥塞窗口,降低发送数据速度,从而缓解网络拥塞。由于RED是基于FIFO队列调度策略的,并且只是丢弃正进入路由器的数据包,因此其实施起来也较为简单。
3.1 随机早期检测的设计目标
RED主要试图达到以下目标: 最小化包丢失率和排队延迟
避免全局同步现象 避免对突发业务的偏见:网络中含有大量的突发数据,而传统的"去尾"算法对突发业务有很大的偏见。在采用"去尾"算法的路由器中,如果某个流的突发性越高,则当该流的包进入队列时越容易造成队列溢出,从而导致连续地丢弃大量的该流的包。即使在缺乏传输层协议有效配合的情况下也能控制平均队列长度,从而避免拥塞。为了达成以上目标,RED采用了基于时间的平均队列长度,并且随机地选择正进入路由器地包进行丢弃。这种方法能被有效地实施而无需在路由器中维持每个流(per-flow)的状态信息。
3.2 随机早期检测算法
RED算法主要分为两个部分。首先是计算平均队列长度,以此作为对拥塞程度的估计。另一个就是计算丢弃包的概率。
3.2.1 计算平均队列长度
由于Internet数据的突发性,如果一个队列很多时候是空的,然后迅速被充满,又很快被取空,这时就不能说路由器发生拥塞而需要向源端发送拥塞指示。因此,RED在计算平均队长avgQ时,采用了类似低通滤波器(low-pass filter)带权值的方法:
avgQ = (1-w)×avgQ+q×w
其中,w为权值,q为采样测量时实际队列长度。这样由于Internet数据的突发本质或者短暂拥塞导致的实际队列长度暂时的增长将不会使得平均队长有明显的变化,从而"过虑"掉短期的队长变化,尽量反映长期的拥塞变化。
在计算平均队长的公式中,权值w相当于低通滤波器的时间常数,它决定了路由器对输入流量变化的反应程度。因此对w的选择非常重要,如果w过大,那么RED就不能有效地过虑短暂的拥塞;如果w太小,那么avgQ就会对实际队列长度的变化反应过慢,不能合理地反映拥塞状况,在这种情况下,路由器就不能有效检测到早期的拥塞。w的值应根据不同情况预先设置,一般来说,它是由路由器允许发生的突发业务的大小和持续的时间所决定的。
3.2.2 计算丢弃包的概率
计算平均队长的目的就是为了反映拥塞状况,根据拥塞的程度来计算丢弃包的概率,从而有效地控制平均队列长度。 RED有两个和队列长度相关的阈值:minth和maxth。当有包达到路由器时,RED计算出平均队长avgQ。若avgQ小于minth,则没有包需要丢弃;当minth≤avgQ≤maxth时,计算出概率P,并以此概率丢弃包;当avgQ>maxth时,所有的包都被丢弃(如图1所示)。由于RED使用的是基于时间的平均队长,就有可能会发生实际队长大于平均队长的情况,如果队列已满,则到达的包只能被丢弃。
计算概率P的方法如下:
Pb = maxp×(avgQ-minth) / (maxth-minth)
P = Pb / (1-count×Pb)
我们注意到P不仅和avgQ有关,而且还和从上一次丢包开始到现在进入队列的包的数量count有关。随着count的增加,下一个包被丢弃的可能性也在缓慢增加。这主要是为了在到来的包之间均匀间隔地丢包,避免连续丢包,从而避免对突发流的偏见和产生全局同步现象。
对队列管理而言,吞吐量和排队延迟始终是一对矛盾的关系。如果平均队长能够充分权衡吞吐量最大化和延迟最小化之间的矛盾,从而在总体性能上得到较为理想的结果,则该队长称为理想的平均队长。阈值minth和maxth就是由理想的平均队长决定的。一般来说,maxth-minth应大于一个回路响应时间内平均队长的增加值,以避免由于路由器丢弃过多的包而导致全局同步。根据目前Internet上数据流的特点,可以将maxth设为minth的两倍。由于理想的平均队长依赖于不同的网络条件,因此,如何确定理想的平均队长仍是一个有待研究的问题。
4、结束语
主动式队列管理AQM技术是IETF推荐的基于路由器拥塞控制的关键技术,它和TCP端到端的拥塞控制相结合,是解决目前Internet拥塞控制问题的一个主要途径。不仅如此,在对IP QoS呼声越来越高的今天,AQM也是实现QoS的重要机制。AQM不仅可以通过减小丢包率、端到端延迟、提高吞吐量等支持QoS,而且还可通过对不同业务实施不同的AQM机制来达到区分服务的目的。因此,AQM已经成为目前的研究热点之一。 公平性是AQM需要解决的一个重要问题。如何使路由器不增加过多的额外负担,又能够提高公平性,一直是困绕广大研究人员的一个难题。参数设置问题是AQM需要解决的另一主要问题。虽然目前也提出了一些解决方法,如ARED等,但并没有完全解决这类问题。 另外,目前的AQM机制研究基本上都是基于仿真,然后根据经验进行改进,缺乏有效的理论来指导。因此,还需要建立一套系统的理论体系来指导AQM技术的研究。