WFQ是加权公平排队(WeightedFairQueuing)缩写。它是一种拥塞管理算法,该算法识别对话(以数据流的形式)、分开属于各个对话的分组,并确保传输容量被这些独立的对话公平地分享。WFQ是在发生拥塞时稳定网络运行的一种自动的方法,它能提高处理性能并减少分组的重发。 目标 1为每个活动流提供公平的带宽分配机制 2为少量交互流提供更快的调度机制 3为高优先级流提供更多的带宽 WFQ:是一种基于流的排队算法,到达的数据包被分成多个流,每个流都被分配给一个FIFO队列。 可以基于IP和TCP或UDP头中以下字段标识流:源IP地址目的IP地址协议号TOS源TCPUDP端口号目的TCPUDP端口号 WFQ插入和丢弃策略 WFQ有一个保持队列(holdqueue),保持队列WFQ系统中数据包占用的所有内存之和,数据包到达时,保持队列已满,那就丢弃数据包(WFQ主动丢弃WFQaggressivedropping) 例外:数据包分配到一个空队列,不会丢弃 原理 基本原理 WFQ是根据流对报文进行动态分类,对于IP网络,五元组(源IP地址、目的IP地址、源端口号、目的端口号、协议号)和IP优先级或者DSCP相同的报文属于同一个流。在接入层的网络中,通常使用IP优先级和五元组配合进行流分类;在汇聚层网络中通常使用DSCP值和五元组配合进行流分类,具有相同特性的报文属于同一个流,使用Hash算法映射到不同的队列中;另外的一个区别就是如果使用WFQ,那么lowvolume(字节数小的报文)、higherprecedence(优先级高的报文)的流会比largevolume、lowerprecedence的流更先处理。因为WFQ是基于流的,每个流使用不同的队列,这就要求WFQ能够支持很大数目的队列WFQ最大可以在每个接口支持到4096个队列。 WFQ与CQ主要区别如下: CQ可以自定义ACL规则来对报文进行分类,而WFQ只能根据元组对报文进行动态分类; WFQ和CQ的队列调度方式不一样,CQ的调度方式是RR,而WFQ的调度机制是WFQ调度机制; WFQ和CQ的报文丢弃机制不一样:CQ使用TailDrop机制,WFQ使用WFQ丢弃机制,该机制是对TailDrop的一种改进。 要想理解WFQ,必须了解这个机制出现的目的是什么,即使用WFQ是为了达到什么目的?WFQ调度主要是为了两个主要的目的,一个是在各个流之间提供公平的调度即WFQ名字中的F(fairness)的含义,另外一个就是保证高IPprecedence的流能够得到更多带宽即WFQ名字中的W(weighted)的含义。 带宽分配 为了提供各个流之间的公平调度,WFQ给每个流分配的带宽是相同的。例如一个接口有10条流,该接口带宽为128Kbps,那么每个流得到的带宽为1281012。8Kbps。从某种意义上讲,有些类似于时分复用机制(TDM)。 WFQ允许其它流使用某条流的剩余带宽,例如接口带宽为128kbps,共10条流,则每条流分配的带宽为12。8kbps,可能实际上某条流例如流1只有5kbps,而流2有20kbps,那么其它的流就可以分配流1所剩余下的12。857。8kbps的带宽。WFQ的加权是根据流中的IPprecedence进行的,保证高IPprecedence的流分配到更多的带宽。算法为(IPprecedence1)Sum(IPprecedence1),例如有四个流,其IPprecedence分别为1、2、3、4,那么每个流占用的带宽分别为214、314、414、514。 队列调度机制 要想理解WFQ的队列调度机制,需要理解WFQ中的一个重要概念:序列号SN(不同的文档可能采用不同的参数,不管使用什么参数都应该达到小字节、高IP优先级的流被优先调度),报文在经过流分类后,在决定该报文是入队列还是丢弃之前,都要赋予一个SN。SN的计算公式为SNPreviousSNweightnewpacketlength,WFQ进行报文调度时都是先调度SN小的报文,为了保证IPPrecedence大的能够获得更多的带宽,从SN的计算公式就可以看出Weight应与Precedence成反比。 其中PreviousSN分为两种情况: 如果报文进入的队列为非空,使用该队列中最近进入队列报文的SN作为PreviousSN; 如果报文进入的队列为空,使用发送队列最近发送的报文的SN作为PreviousSN。 上图中:有四条流,每条流的precedence相同都为0,只是报文的大小不同,Flow1到Flow4的报文长度从大到小,按照SN的计算公式,报文长度小的SN小,所以Flow4中的报文应该被优先调度出去,当然最终的决定因素还是SN的大小,对于SN相同的报文实行顺序调度,如本例所示:Packet5和Packet10的SN相同、Packet1和Packet11的SN相同,按照顺序调度规则,应该是Packet5在Packet10前,Packet1在Packet11前。最终的调度的结果是:13,14,15,16,9,5,10,1,11,6,12,2,7,8,3,4。 丢弃机制 HQL(HoldQueueLimit):限制了所有队列中能够存放的报文总数目; CDT(CongestiveDiscardthreshold):限制了每个队列中能够存放的报文数目。 WFQ使用WFQ丢弃机制,该机制是对TailDrop的一种改进,其中的一个决定因素也是SN,另外WFQ还使用HQL和CDT来决定如何对报文进行丢弃。 如果一个新的报文达到时HQL已经到达最大值,该报文直接被丢弃;如果此时HQL没有到达最大值,WFQ将该报文根据WFQ的分类原则进行分类决定进入到哪个队列并计算出SN,剩下的丢弃机制还会由CDT决定,CDT是每个队列自己的丢弃阀值,如果此时CDT没有到达最大值报文直接进入该队列,如果CDT已经达到阀值,则判断其它队列是否有SN比新进入的报文SN大,如果没有直接丢弃新进入的报文,如果其他队列有SN大于当前入队列的报文,WFQ会选择丢弃SN大最大的报文。 简单的说就是当某个队列的报文数目已经超过该队列CDT,WFQ可以选择丢弃其它队列中SN最大的报文! 优缺点 主要优点 WFQ配置简单,无需显示分类 不会让任何流得不到处理机会,能够保证所有流的吞吐量 从最主动的流中丢弃数据包,可以为非主动流提供更快的服务 是一种标准。简单的排队机制,大多数CISCO平台和IOS版本都支持 缺点 WFQ的每个子队列都继承了FIFO的缺点 WFQ的分类和调度机制是不可配置和无法修改的 WFQ仅支持低速链路(2。048Mbits及以下的) WFQ不能为流量流提供带宽和时延保证 WFQ系统中多个流量流可能会被分配到同一个对列中去 配置和监控 默认情况下,所有低速(2。048Mbits及以下)串行接口都启用WFQ 接口模式下:fairqueue〔cdt〕〔dynamicqueues〕cdt为拥塞丢弃门限,dynamic动态队列默认为256 holdqueuemaxlimitout定义保持队列 CBWFQ基于类别的加权公平排队 比WFQ更好,因为可以创建用户自定义的类别,并为所有类别分配专属队列,每个队列都有用户自定义的(最小)带宽,而且在有可用带宽队列可以使用更多带宽。 最多可以创建64个用户自定义类别,每个队列都是有保证带宽和最大包门限的FIFO队列,一旦达到最大,就会产生尾部丢弃。 分类,调度和带宽保证 带宽 带宽百分比 带宽剩余百分比 CBWFQ的优点 可以创建用户自定义的类别,利用MQC的分类映射可以很容易地定义这些流量类别 可以基于用户策略和用户意愿为每种流量类别分配预留带宽 可以基于现有网络应用和用户策略定义最多64个固定类别,从而提供微调手段,而且扩展性更好 缺点:没有为实时性应用提供合适地队列(VOIP和视频)无法保证低时延 配置和监控 LLQ 包含了一个优先级队列,使其非常适合时延和抖动敏感型应用 优点: LLQ具有CBWFQ的所有优点,包括自定义流量类别,为每种类别的流量提供带宽保证,并且可以在所有类别的队列上应用WRED。(严格优先级队列除外) 对于LLQ和CBWFQ来说,任何没有被显示分类的流量都被认为classdefault流量,可以将classdefault流量类别队列由FIFO改为WFQ,需要时也可以用WRED。 LLQ最大优势可以为时延和抖动敏感型应用的流量提供一个或多个有带宽保证的严格优先级队列 LLQ并不局限于特定平台或传输介质 配置和监控LLQ
造句:由词目及其释义等构成的中文知识性百科条目
造句:由词目及其释义等构成的中文知识性百科条目