本文转自:http://www.edify.com.cn/html/article/162.html

使用MQC分类

使用MQC对数据分类需要3个步骤,分别使用3个命令,如下所示。

(1)使用class-map命令生成数据类。

(2)使用policy-map命令标记数据(DSCP,CoS等),标记后的数据才能区分出不同的类别。

(3)把第2步设置的策略应用在入口上,使用的命令是service-policy input。当数据从接口进入时,应按照策略进行标记。

 class-map 命令

命令语法如下:


Border_A(config)# class-map [match-all | match-any] class-map-name 

Border_A(config-cmap)# match {match- criteria} 其中,

class-map-name–名字。

match-all–当设定多个match条件时,满足所有条件的数据才是匹配的。

match-any–当设定多个match条件时,数据满足一个条件即可。

match-criteria–设定的匹配条件。

如果在命令里既没有使用match-all,也没有使用match-any,系统默认使用的是match-all


 class- map 示例(1)

当设定匹配条件时,可以使用以下参数。

(1)ACL(名称或代码)。

Border_A (config-cmap)# match access-group access-group access-group–访问列表名称或代码。

例3-10:把两个ACL(subnet-a和subnet-b)定义的数据划归为一类。

Router1(config)# ip access-list extended subnet-a 

Router1(config-std-nacl)# permit ip 192.168.200.0 0.0.0.255 any 

Router1(config-std-nacl)# end 

Router1(config)# ip access-list extended subnet-b 

Router1(config-std-nacl)# permit ip 192.168.300.0 0.0.0.255 any  

Router1(config)# class-map match-any class1 

Router1(config-cmap)# match access-group subnet-a 

Router1(config-cmap)# match access-group subnet-b 

Router1(config-cmap)# exit

(2)任意数据。

Border_A (config-cmap)# match any

(3)调用其他class-map,即calss-map嵌套。

Border_A( config-cmap)# match class-map class-name class-name–其他class-map的名字。

例3-11:class2 调用class1。

Router1(config)# class-map match-any class2 

Router1(config-cmap)# match class-map class1 

Router1(config-cmap)# exit

(4)CoS值。


Border_A (config-cmap)# match cos cos-value1[cos-value2 [cos-value3 [cos-value4]]] cos-value–CoS值,最多4个。在同一个match语句里的多个值,匹配一个值即满足条件。

例3-12:把CoS=2和CoS=3的数据划归一类。

Router1(config)# class-map match-all class3 

Router1(config-cmap)# match cos 2 3 

Router1(config-cmap)# exit

(5)目的MAC地址。

Border_A (config-cmap)# match destination-address mac address address–目的MAC地址(十六进制)。

例3-13:

Router1(config)# class-map match-any class4 

Router1(config-cmap)# match destination-address mac 00:01:0c:00:12:34 

Router1(config-cmap)# exit

(6)数据进入的接口。

Border_A (config-cmap)# match input-interface interface-name  interface-name–入口编号。

(7)DSCP值。

Border_A (config-cmap)# match dscp dscp-value dscp-value–DSCP值,最多7个。在同一个match语句里的多个值,匹配一个值即为满足条件。既可以匹配IPv4数据包,也可以匹配IPv6数据包。

例3-14:把DSCP=2,DSCP=3,DSCP=30,AF=11的数据划归一类。

Router1(config)# class-map match-all class5 
 Router1(config-cmap)# match dscp 2 3 30 af11 
 Router1(config-cmap)# exit 

 

(8)IP优先级。

Border_A (config-cmap)# match precedence ip-precedence-value ip-precedence-value–IP优先级值,最多4个值。在同一个match语句里的多个值,匹配一个值即满足条件。既可以匹配IPv4数据包,也可以匹配IPv6数据包。

(9)实时传输协议端口。

Border_A (config-cmap)# match ip rtp  starting-port-number   port-range starting-port-number–起始端口号。

port-range–端口号范围,自起始端口号之后的端口号范围。

例3-15:匹配自端口号2024及其后100个端口号(2024~2124)。

Router1(config)# class-map match-all class6  
Router1(config-cmap)# match ip rtp 2024 100 
 Router1(config-cmap)# exit (10)MPLS标签。

Border_A (config-cmap)# match mpls experimental topmost exp-values exp-values–MPLS实验字段标记值。

(11)反向选择条件。

Border_A (config-cmap)# match not match-criteria match-criteria–不是该条件的其他情况都匹配。

例3-16:把不是RTP协议的数据归类。

Router1(config)# class-map match-all class7  
Router1(config-cmap)# match not rtp  
Router1(config-cmap)# exit (12)协议。

Border_A (config-cmap)# match protocol protocol-name protocol-name–协议名称。

(13)源MAC地址。

Border_A (config-cmap)# match source-address mac address address–源MAC地址(十六进制)。

(14)RTP(使用NBAR分类时使用的命令)。

Border_A (config-cmap)# match protocol RTP [ audio | video | payload-type payload-type-code ] audio–音频数据。

video–视频数据。

payload-type-code–数据类型代码。0~23保留给音频数据,24~33保留给视频数据,34~64用户可以自定义。使用代码比仅使用”audio”或”video”关键词产生的匹配更严格。多个类型代码之间使用逗号分隔,也可以使用连线符表示代码区间。代码的表达形式可以是十进制、十六进制和二进制。

例3-17:匹配数据类型代码为2,4,6,7~16的音频数据。

Router1(config)# class-map class8 

Router1(config-cmap)# match protocol rtp palyload-type 2,4,6,0×7-0x10 

Router1(config-cmap)# exit 提示:根据IOS版本和设备平台的不同,支持的匹配条件会有所不同。这里并没有列出所有可用的匹配条件。读者在使用的时候请注意查阅产品文档和IOS版本。