路由器中的数据包排队和丢弃
路由器是控制网络数据流的关键网络设备。路由器具有一个或多个输入和输出接口,通过这些接口接收和发送数据包。
由于路由器的内存有限,它可能无法处理新到达的数据包。当数据包到达的速度超过数据包离开路由器内存的速度时,就会发生这种情况。在这种情况下,新的数据包会被忽略,而旧的数据包会被丢弃。为了规范数据包的存储或丢弃方式,路由器必须在其资源分配算法中实现某种排队规则。
队列拥塞和排队规则
由于路由器队列可用的缓冲内存有限,因此容易发生拥塞。当输入流量的速度超过输出链路上可以传输的数量时,就会发生拥塞。以下是这种情况的一些可能原因:
传入流量速率超过传出流量速率。
来自所有输入接口的组合流量超过了整个输出容量。
路由器处理器无法处理转发表的大小以确定路由路径。
队列拥塞和排队规则
在发生这种拥塞的情况下,路由器可能会遵循不同的规则来选择保留哪些数据包以及丢弃哪些数据包,以控制路由器内存对数据包的分配。因此,路由器具有以下关键的排队规则:
先进先出排队 (FIFO)
大多数路由器使用 FIFO 作为其默认排队方法。在服务器上,这通常需要很少或不需要设置。在 FIFO 中,所有数据包都按到达路由器的顺序进行服务。当内存饱和时,尝试进入路由器的新数据包会被丢弃(尾部丢弃)。
但是,这种系统不适合实时应用程序,尤其是在拥塞区域。在拥塞期间,实时应用程序(例如 VoIP)会持续发送数据包,可能会出现饥饿现象,导致所有数据包丢失。
排队优先级 (PQ)
在优先级排队中,路由器根据某种优先级标准将内存划分为多个队列,而不是使用单个队列。然后,每个队列都以 FIFO 方式处理,并依次循环遍历每个队列。根据优先级,队列被标记为高、中或低。高队列数据包始终在中队列数据包之前处理。
在优先级排队中,路由器根据某种优先级标准将内存划分为多个队列,而不是使用单个队列。然后,每个队列都以 FIFO 方式处理,并依次循环遍历每个队列。根据优先级,队列被标记为高、中或低。高队列中的数据包始终优先处理。
加权公平排队 (WFQ)
WFQ(加权公平排队)根据流量流生成队列,并根据优先级向它们分配带宽。子队列的带宽是动态分配的。假设有三个队列,每个队列的带宽百分比分别为 20%、30% 和 50%,同时它们都处于活动状态。