简单的FIFO(先进先出)队列存在一个缺点,无法对包的优先级做出反应,即相当于先进入的包拥有更高的优先级,会首先被发送出去。但是实际应用中,数据包可能有优先级的概念,有可能优先级更高的包比普通包更晚进入队列。此时需要对FIFO进行改进。
简单FIFO:
即先到达的包先发送出去。
Strict Priorities:
分为高优先级和低优先级两个队列,优先发送高优先级队列内容,只有当高优先级队列没有内容时,才会发送低优先级队列的包。这种方式只有优先级高的包数量很少时才使用,否则低优先级包的体验会很差,可能完全被高优先级用户占用带宽。
Rate guarantees:
这种方式要从两个角度去理解,但无论从哪个角度去理解,都可以认为整个过程是一个循环,即每个循环内,从各个优先级队列中取出相应数量的数据并发送出去。
首先是从bit角度考虑,如果信息流是以位来传输的,假设总传输速率为R,只需要在每个循环中从各个队列取出个bits即可。
但是实际传输过程中,是以packet为单位传输的,不是以bit为单位传输的,因此稍微麻烦一点。但是可以通过以下方式保证每个队列传输速率符合它自身的权重比例。首先我们以一个循环为时间单位,假设一个包进入队列时间为,这个包长度为,该队列权重为,我们可以认为每个循环可以从第个队列取走bit,则该包离开时间可以表示为。此外当前包的进入时间为前一个包的离开时间,即。那么当每个包进入队列的时候就可以根据这个公式计算出该包的离开时间。那么实际处理时,则是取走所有队列中离开时间最小的包。从统计学上,长期来看,这种方式可以保证各个队列的传输速率与各自的权重匹配。