- 先进先出队列(FIFO)
- 优先排队(PQ)
- 加权公平排队(WFQ)
文章图片
图。1:
路由器的入站和出站流量的描述
队列拥塞和排队纪律
路由器队列由于其可用的有限缓冲存储器而易于拥塞。当入口流量的速率变得大于在输出接口上可以转发的流量时, 就会发现拥塞。造成这种情况的潜在原因主要包括:
- 传入流量的速度超过传出速率
- 来自所有输入接口的总流量超过了总输出容量
- 路由器处理器无法处理转发表的大小来确定路由路径
先进先出队列(FIFO) 大多数路由器遵循的默认排队方案是FIFO。通常, 这几乎不需要在服务器上进行任何配置。 FIFO中的所有数据包都以到达路由器的相同顺序进行服务。内存达到饱和后, 尝试进入路由器的新数据包将被丢弃(尾巴下降)。但是, 这种方案不适用于实时应用, 特别是在拥塞期间。连续发送数据包的实时应用程序(如VoIP)在拥塞时可能会饿死, 并丢弃所有数据包。
优先排队(PQ) 在优先级排队中, 路由器不使用单个队列, 而是根据某种优先级度量将内存分为多个队列。此后, 每个队列以FIFO方式处理, 同时逐个循环浏览队列。队列被标记为高, 中, 要么低根据优先级。高优先级队列的数据包始终在中优先级队列的数据包之前进行处理。同样, 中队列中的数据包总是在普通队列中的数据包之前进行处理, 等等。只要高优先级队列中存在某些数据包, 就不会处理其他队列中的数据包。因此, 高优先级的数据包切到该行的最前面, 并首先得到服务。清空较高优先级的队列后, 只有那时是服务的优先级较低的队列。
文章图片
图2:优先级排队方案中使用的多个子队列
PQ的明显优势是高优先级的流量总是先被处理。然而,PQ方案的一个显著缺点是,由于缺乏服务,较低优先级的队列通常无法接收任何服务。高优先级流量的恒定流会使低优先级队列挨饿
加权公平排队(WFQ) 加权公平排队(WFQ)根据流量动态创建队列, 并根据优先级为这些流量分配带宽。子队列被动态分配带宽。假设存在3个队列, 当它们都处于活动状态时, 它们的带宽百分比分别为20%, 30%和50%。然后, 如果20%队列处于空闲状态, 则在保留原始带宽比率的同时, 在其余队列之间分配释放的带宽。因此, 现在分配20%队列(75/2)%, 现在分配50%队列(125/2)%带宽。
交通流量根据数据包中的各种标头字段进行区分和标识, 例如:
- 源IP地址和目的IP地址
- 源和目标TCP(或UDP)端口
- IP协议号
- 服务类型值(IP优先级或DSCP)
文章图片
图3:WFQ中为子队列动态分配的带宽
因此, 根据与数据包相对应的流量将数据包分为不同的队列。一旦被识别, 就将属于相同流量的数据包插入专门为此流量创建的队列中。默认情况下, 路由器内最多可以建立256个队列, 但是, 该数目最多可以增加4096个队列。与PQ方案不同, WFQ队列根据其队列优先级分配不同的带宽。优先级较高的数据包会在优先级较低的数据包同时到达之前进行调度。
排队纪律对网络的影响
排队规则的选择就丢包数, 等待时间等方面影响网络性能。在分析选择不同方案的效果时, 我们观察到对各种参数的显着影响。
文章图片
图4:不同排队规则丢弃的数据包数量与时间的关系(在Riverbed Modeler上运行模拟)
测量这三种方案的网络中的总体数据包丢弃量会得出以下结果:
- 在所有机制中, 从开始到特定点都没有丢包。这是因为填满路由器缓冲存储器需要有限的时间。由于数据包丢弃仅在缓冲区已满后发生, 因此有一个初始时间段, 因为尚未达到缓冲区容量, 所以没有丢包.
- 在FIFO方案中, 数据包丢弃在PQ之后但在WFQ之前开始。更重要的是, 在FIFO的情况下, 丢弃的数据包数量最大。这是由于以下事实:一旦拥塞, 所有应用程序的所有传入流量都将被完全丢弃, 不会有任何歧视.
- 在PQ方案中, 数据包丢弃最早开始。由于PQ根据优先级对队列进行划分, 因此将各个队列的总大小进行了划分。假设将内存简单划分为"重要"队列和"不太重要"队列, 队列大小减半。因此, 定向到子队列的数据包将导致队列更早被填充(由于较小的容量), 因此数据包丢弃将更早开始
推荐阅读
- 使用Mongoose和MongoDB Atlas的NodeJs CRUD操作
- 检查一个字符串是否可以分为两个相同的K频率字符字符串
- 将数组分成两个奇数长度的组,中间值之间的绝对差最小
- 数组所有子集的子集总和|O(N)
- 递归程序用给定字符串中的3.14替换所有出现的pi
- 在-1和+1数组中查找是否有大小为K的子集且总和为0
- 如何在D3.js中应用动画()
- 检查两个数字从L到R的位是否彼此互补
- 适配器模式 在Android中的简单理解