当前的队列治理算法可以分为两大类:被动式队列治理(Passive Queue Management , PQM)和主动式队列治理(Active Queue Management , AQM) 。
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业务和视频会议等非常重要 。
推荐阅读
- 下 在CISCO路由器上配置NAT功能
- 4 Internet路由器主动式队列管理机制综述
- 3 Internet路由器主动式队列管理机制综述
- 关于路由器cpu利用率过高的解决
- 通过SSH实现Cisco路由器登录
- 无线路由器的设置步骤 新的无线路由器如何设置
- 解决路由器水晶头不亮的方法 路由器水晶头不亮
- 看宽带路由器的市场要点
- Cisco路由器上实现VoIP
- 过滤功能对路由器性能的影响
