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.
因为使用了复杂的分类和调度机制,对系统资源有一定的限制