加权公平排队(WFQ)顾名思义就是排队算法。当接口出现拥塞时使用排队。通常是通过发送环(TX-Ring)已满来检测到的。这意味着接口正忙于发送数据包。除非接口上出现拥塞,否则不会进行排队。在某些情况下,可以控制TX环的尺寸。一个小的TX环为软件队列提供了更多的功能,使其可以先发送哪些数据包,但这并不是很有效。太大的TX环将使软件队列几乎无用,并导致重要数据包的更高延迟和抖动。
默认的排队算法通常是先进先出(FIFO)。这意味着数据包将按照到达接口输入的确切顺序进行传递。这通常是不希望的,因为某些数据包应优先处理。
客户以低价从Internet服务提供商(ISP)购买服务是很常见的。也就是说,客户购买了50 Mbit / s的服务,但物理接口以100 Mbit / s的速度运行。在这种情况下,不会出现拥塞,但是ISP将限制来自客户的流量。为了在这些情况下引入人为拥堵,可以使用整形器。
因此,现在存在拥塞,可以应用排队算法。请注意,排队算法不提供任何额外的带宽,它们只是让我们确定哪些数据包对我们更重要。WFQ是一种采用多个参数并据此做出决策的算法。该算法非常复杂,并且使用权重(IP优先级),数据包大小和调度时间作为参数。INE 在这里有非常详细的解释。如果不想在队列上摆弄太多,WFQ是一个不错的选择,因为它为SSH,Telnet,语音之类的小流量提供了足够的带宽,这意味着文件传输不会占用所有带宽。
加权随机早期检测(WRED)是一种避免拥塞的机制。WRED根据优先级值测量队列的大小,并在队列介于最小阈值和最大阈值之间时开始丢弃数据包。配置将决定丢弃每N个数据包中的1个。WRED有助于防止TCP同步和TCP饥饿。当TCP丢失数据包时,它将进入慢速启动状态;如果所有TCP会话同时丢失数据包,则它们可能会变得同步,从而提供了如下图所示:
可以看出,如果未配置WRED,则图形将变为完全爆炸,然后变为静音,然后变为完全爆炸,依此类推。WRED提供了更高的平均传输速率。重要的是要注意,UDP不会受到丢包的影响,因为它没有像TCP那样实现的确认机制和滑动窗口。因此,不应在基于UDP的类(如处理SNMP,DNS或其他基于UDP的协议的类)上实现WRED。
WFQ和WRED都可以并且应该一起部署。