目录
1.介绍
2.被动式队列管理机制
2.1 优缺点
2.1.1 TCP全局同步现象
3.主动式队列管理机制
3.1 RED算法概述
3.2 RED具体算法
3.2.1 计算队列平均长度
3.2.2 计算丢弃包的概率
1.介绍
由于路由器是基于包交换的设备,为了处理多个数据包同时向同一端口转发,其必须在端口维护一个或多个队列,而对队列的管理能力会直接影响路由器的性能。路由器有两类控制队列的算法,队列管理算法和队列调度算法,前者主要是在必要时通过丢包来管理队列长度。后者决定下一个要发送哪个包,主要用来管理各流之间带宽的分配。
由于Internet数据本质上是突发的,因此允许传输突发的数据包非常必要,而路由器中队列的重要作用就是吸收突发的数据包。较大的队列能够吸收更多的突发数据,提高吞吐量,但TCP机制往往会保持较高的队列占用,从而增加了数据包的排队延迟。因此需路由器对队列进行管理,维持较小的队列长度,降低排队延迟,提高吞吐量,保持较大的队列空间来吸收突发数据包。
队列管理算法可以分为两大类:被动式队列管理(Passive Queue Management,PQM)和主动式队列管理(Active Queue Management,AQM)。
2.被动式队列管理机制
这是一种传统的网络队列管理方法,它在网络节点的缓存(队列)达到最大容量时,才会采取行动丢弃数据包。
典型代表是 DropTail 算法,它在队列满时丢弃新到达的数据包,以此来指示网络拥塞。DropTail通常会与FIFO(First In First Out)相结合,数据报传送的顺序与封包进入队列的顺序相同,先进入队列的封包先传送出去,后进入队列的封包较晚传送出去。如果队列长度超过暂存空间的大小,就会把队列最尾端的数据报丢弃。DropTail在丢弃数据报时,并不会去考虑要丢弃的数据报属于哪个数据流,只是单纯的把超过暂存空间大小的数据流丢弃。
2.1 优缺点
优点:操作简单
缺点:
1.死锁(lock-out)问题:在某些情况下,该算法会让某个流或者少数几个流独占队列空间,阻止其他流的包进入队列。这
2.满队列(full queues)问题:由于该算法只有在队列满时才会发出拥塞信号,因此会使得队列在相当长时间内处于充满(或几乎充满)的状态。而队列管理最重要的目标之一就是降低稳定状态下队列的长度,因为端到端的延迟主要就是由于在队列中排队等待造成的。
3. TCP全局同步(global synchronization)问题:
2.1.1 TCP全局同步现象
由于Internet上数据的突发本质,到达路由器的包也往往是突发的。如果队列是满的或者几乎是满的,就会导致在短时间内连续大量地丢包。而TCP流具有自适应特性,源端发现包丢失就急剧地减小发送窗口,包到达速率就迅速下降,于是网络拥塞得以解除,但源端得知网络不再拥塞后又开始增加发送速度,最终又造成网络拥塞,这种现象常常会周而复始地进行下去,从而在一段时间内网络处于链路利用率很低的用状态,降低了整体吞吐量,这就是所谓地"TCP全局同步"现象。
除了DropTail外,另外两种在队列满时用得比较多的队列管理机制是Random Drop 和 Drop Front。当队列满时,前者从队列中随机找出一个包丢弃以让新来的包进入队列;后者从队列头部丢包,以便让新包进入队列。这两种方法虽然都解决了"死锁"问题,但仍然没有解决"满队列"问题。由于这几种方法都是在队列满了被迫丢包,因此称为被动式队列管理。
3.主动式队列管理机制
在队列充满之前丢包,这样端节点便能在队列溢出前对拥塞做出反应。这种方法便称为"主动式队列管理"(Active Queue Management)。
3.1 RED算法概述
RED(Random Early Detection)就是一种典型的主动式队列管理机制。
RED拥塞控制机制的基本思想是通过监控路由器输出端口队列的平均长度来探测拥塞,一旦发现拥塞逼近,就随机地选择连接来通知拥塞,使他们在队列溢出导致丢包之前减小拥塞窗口,降低发送数据速度,从而缓解网络拥塞。由于RED是基于FIFO队列调度策略的,并且只是丢弃正进入路由器的数据包,而且能够通过确保到来的包几乎总是有可用的队列空间,从而阻止"死锁"行为的发生。
3.2 RED具体算法
RED算法主要分为两个部分。1.计算平均队列长度(avg),决定了路由器队列容纳突发性数据的程度,以此作为对拥塞程度的估计;2.计算丢包概率(Pb),决定了在当前拥塞程度下,路由器丢弃分组的概率。
3.2.1 计算队列平均长度
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时,所有的包都被丢弃。
计算概率P的方法如下:
Pb = maxp×(avgQ-minth) / (maxth-minth)
P = Pb / (1-count×Pb)
P不仅和avgQ有关,而且还和从上一次丢包开始到现在进入队列的包的数量count有关。随着count的增加,下一个包被丢弃的可能性也在缓慢增加。这主要是为了在到来的包之间均匀间隔地丢包,避免连续丢包,从而避免产生全局同步现象。
阈值minth和maxth就是由理想的平均队长决定的。根据目前Internet上数据流的特点,可以将maxth设为minth的两倍。如何确定理想的平均队长仍是一个有待研究的问题。
参考资料:
DropTail与RED队列管理 (csdn.net)
主动、被动队列管理算法、RED - yyxxzz22 - 博客园 (cnblogs.com)
TCP全局同步 - yyxxzz22 - 博客园 (cnblogs.com)