我试图了解QoS系统是如何工作的,我不确定WFQ和WRED如何相互作用。

首先,我认为WFQ是一种排队机制,而WRED是一种避免拥塞的机制。 WFQ应该安排队列中的数据包,队列已满时,WRED会将其丢弃。如果要在例如L3交换机上设置QoS,则需要设置排队机制和避免拥塞机制,因此从理论上讲,我可以让WFQ和WRD一起工作。例如,此文档似乎暗示我将以这种方式设置它们。思科的其他一些文档提到我可以独立使用它们。

然后,我想详细了解他们的工作方式并开始搜索Internet。结果,我现在不知道它们是什么以及它们如何工作。

一些站点(至少就我对内容的理解)声称,数据包调度算法和拥塞避免算法基本相同。例如,在此Wikipedia文章中,它们都放在同一个组中。一些随机的文章提到我可以使用WFQ XOR WRED。

所以我想问的是WFQ和WRED有何关联?如果可能的话,我什么时候可以使用一个或另一个?何时同时使用?

评论

wfq和wred除了共享相同英文单词的使用外,彼此之间没有任何关系。

“然后,我想了解有关它们如何工作并开始搜索Internet的更多信息。结果,现在我不知道它们是什么以及它们如何工作。”这说明了我尝试了解QoS的99.98%的经验。

#1 楼

加权公平排队(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那样实现的确认机制和滑动窗口。因此,不应在处理诸如SNMP,DNS或其他基于UDP协议的类之类的基于UDP的类上实现WRED。

WFQ和WRED都可以并且应该一起部署。

评论


丹尼尔,您好,很好的回答。那不是WFQ(不是WQF)吗?另外,值得一提的是WRED对UDP无效,您应该避免在基于UDP的类(例如UDP语音)上使用它

–迈克·彭宁顿
2013年12月4日13:20



谢谢迈克。不知道为什么我输错了WFQ,我已经对其进行了编辑。还简要介绍了UDP。您总是提供出色的帖子。

–丹尼尔·迪布(Daniel Dib)
2013年12月4日13:38

#2 楼

首先,不要相信您在Internet上阅读的所有内容;-)

有时算法(或它们的物理实现方式)并不完全符合理论范畴。您所说的话,不如了解它的作用重要。

WFQ(或任何其他调度算法)的重点是在各种流之间共享有限的链路带宽。 WFQ尝试按比例分配带宽给每个流。 CBWFQ对每个“类”执行相同的操作。在一个无限的队列和无限的内存的理想世界中,这就是您所需要的-您共享带宽,每个人都很高兴。

但是由于设备没有无限的队列和内存,因此某些设备必须做出“捷径”。因为队列的大小有限,所以存在队列将被填满,导致尾部丢弃和流量同步的危险。本质上,如果队列溢出,则不再控制带宽。

为了避免队列溢出,我使用了随机早期检测。该算法根据队列的填充量(深度)从队列中随机丢弃数据包-队列越完整,丢弃的数据包越多。目的是防止队列溢出,以便调度算法可以正常工作。

然后,一些聪明的Cisco工程师注意到一个人可以使用更少的队列(较简单的硬件),并以随机方式丢弃各种流量。不同的队列深度。 WRED会根据流量类型从不同深度将队列中的流量丢弃。
尽管您可以将WRED称为拥塞避免机制,但是由于丢弃流量的深度随流量类型的不同而不同,因此效果是在队列中获得更少的空间,从而减少带宽。所以它也可以用作调度算法。
你说的是po-tay-to,我说的是po-tah-toe。

另外一个区别:FQ和WFQ可以处理所有类型的流量,因为它们本质上是计算字节数。 RED和WRED仅与TCP一起使用,因为它们依赖TCP的流控制机制来减慢通信量并防止队列溢出。

(注意:为便于说明,我忽略了优先级队列和LLQ。这是另一个答案)。

我也同意Mike所说的一切。

评论


出色的答案和评论。

–generalnetworkerror
2013年12月9日,0:34

#3 楼

这是CBWFQ和WRED的示例:

策略映射OUT

类语音
优先级百分比20

类Video
带宽百分比30

P1类带宽
带宽百分比10
基于dscp的随机检测dscp af31 26 40 10


/> class P2
带宽百分比15
基于dscp的随机检测dscp af21 24 40 10
class class-default
公平-queue
基于dscp的随机检测

评论


可悲的是,这个例子没有回答他的问题。什么时候不一样

–迈克·彭宁顿
2013年12月4日13:00



从角度看,这就像问赛车手涡轮增压器和传动比有何关系,让他一言不发地带您绕赛道行驶。如果您已经了解了交互作用(和/或缺乏交互作用),那很好...但是您不会问这个问题。

– Nanb​​an Jim
16-10-4在19:27