CBWFQ 基于类别的加权公平排队 , 通常使用 ACL 定义数据流类别,并将注入宽带和队列限制等参数应用于这些类别 .
CBWFQ 特点 :
 1) 能够给不同的类保障一定的带宽
   2) 对传统的 WFQ 作了扩展支持用户自己定义流量的分类 :
  3) 队列的个数和类别是一一对应 , 给每个 class 保留带宽
CBWFQ WFQ 的区别:
WFQ: 用户无法控制分类,由 HASH 算法自己决定
CBWFQ: 让用户对流量自己来分类
WFQ 对正常流量 处理没问题,但是对语音流量显得 " 太公平 "( 语音要求低延迟 )
CBWFQ: 考虑到公平特性,并没有考虑到语音的应用
CBWFQ Configuration:
CBWFQ(config)#
CBWFQ(config)#class-map match-any CBWFQ1
CBWFQ(config-cmap)#match dscp 6
CBWFQ(config-cmap)#match protocol http // 两个条件,满足其中一个就可以匹配 CBWFQ1//
CBWFQ(config)#
CBWFQ(config)#class-map match-all CBWFQ2       
CBWFQ(config-cmap)#match precedence 3
CBWFQ(config-cmap)#match protocol telnet // 两个条件必须全部满足才能匹配 CBWFQ2//
CBWFQ(config)#
CBWFQ(config)#policy-map CBWFQ
CBWFQ(config-pmap)#class CBWFQ1 // 调用 class-map CBWFQ1//
CBWFQ(config-pmap-c)#bandwidth 60
CBWFQ(config-pmap)#
CBWFQ(config-pmap)#class CBWFQ2
CBWFQ(config-pmap-c)#bandwidth 30
CBWFQ(config)#
CBWFQ(config)#int s0/0
CBWFQ(config-if)#service-policy output CBWFQ //CBWFQ 只能在出方向 上调用 //
CBWFQ#
查看:
CBWFQ#
CBWFQ#show class-map
 Class Map match-any class-default (id 0)
  Match any
 Class Map match-any CBWFQ1 (id 1)
   Match   dscp 6
   Match protocol http
 Class Map match-all CBWFQ2 (id 2)
   Match   precedence 3
CBWFQ#
CBWFQ#
CBWFQ#show policy-map
 Policy Map CBWFQ
    Class CBWFQ1
     Bandwidth 60 (kbps) Max Threshold 64 (packets)
    Class CBWFQ2
      Bandwidth 30 (kbps) Max Threshold 64 (packets)
CBWFQ(config)#
CBWFQ(config)#policy-map CBWFQ
CBWFQ(config-pmap)#class CBWFQ1
CBWFQ(config-pmap-c)#queue-limit 30 // 定义每个队能存放的报文数量,超过后丢包方式: Tail drop//
CBWFQ#
CBWFQ#show policy-map
 Policy Map CBWFQ
    Class CBWFQ1
      Bandwidth 60 (kbps) Max Threshold 30 (packets)
    Class CBWFQ2
      Bandwidth 30 (kbps) Max Threshold 64 (packets)
CBWFQ#
配置实例:
一家公司需求; HTTP 流量保障 256Kbps 带宽, FTP 流量保证 512Kbps 带宽,禁止 BT 流量 .
 
CBWFQ(config)#class-map  HTTP // 定义一个匹配 HTTP 的类 //
CBWFQ(config-cmap)#match protocol http
CBWFQ(config)#class-map  FTP
CBWFQ(config-cmap)#match protocol ftp
CBWFQ(config)#class-map   BT
CBWFQ(config-cmap)#match protocol bittorrent
CBWFQ(config)#
CBWFQ(config)#policy-map CBWFQ // 定义策略,调用类 class//
CBWFQ(config-pmap)#class HTTP
CBWFQ(config-pmap-c)#bandwidth 256
CBWFQ(config-pmap)#class  FTP
CBWFQ(config-pmap-c)#bandwidth 512
CBWFQ(config-pmap)#class  BT
CBWFQ(config-pmap-c)#drop
CBWFQ(config-pmap)#class class-default
CBWFQ(config-pmap-c)#fair-queue // 网络中剩下的流量除了 HTTP,FTP 之外都使用 WFQ ,放到 fair-queue 中了 //
CBWFQ(config)#
CBWFQ(config)#int s0/0
CBWFQ(config-if)#service-policy output CBWFQ
CBWFQ(config)#
 
 Weighted Fair Queue ,加权公平队列。 WFQ 将分组按照不同的业务流、不同的 IP 优先级,自动按照 HASH 算法,划分成不同的队列,在保证高优先级业务的同时,按照配置权重 ,将带宽公平地分给低优先级别的业务。
WFQ 的思想 :
     i, 为每个流创建一个专用的队列,避免队列的饥饿,延迟,抖动等 
   ii, 在所有流间公平,正确地分配带宽
   iii,WFQ 使用 [IP 优先级 ] 作为分配带宽的权重
CISCO 路由器上,接口小于 E1 的链路会默认启用 WFQ.
注:在 WFQ 中, weight 的计算方式为 4096/(IP 优先级 +1) 或者 32384r/(IP 优先级 +1)
      因此在 show queue 中看到的 weight 值越大,表示权重越低。
 
WFQ 优点
1. 配置简单 ( 不用手工分类 )
2. 保证所有的流都有一定的带宽
3. 丢弃野蛮流量
4. 大多数平台上都支持
5. 支持所有 IOS 版本 (11.0 以上 )
WFQ 缺点
1. 每个子队列都继承了 FIFO 的缺点
2. 多个不同的流可能会被分入同一个队列 ( 流的数量超过了配置的队列数 )
3. 不支持手工分类
4. 不能提供固定带宽保证
5. 因为使用了复杂的分类和调度机制,对系统资源有一定的限制