3.3 使用MQC分类 |
![]() |
使用MQC对数据分类需要3个步骤,分别使用3个命令,如下所示。
① 使用class-map命令生成数据类。
② 使用policy-map命令标记数据(DSCP和CoS等),标记后的数据才能区分出不同的类别。
③ 把第2步设置的策略应用在入口上,使用的命令是service-policy input。当数据从接口进入时,应按照策略进行标记。
命令语法如下:
其中,
● class-map-name :名字。
● match-all:当设定多个match条件时,满足所有条件的数据才是匹配的。
● match-any:当设定多个match条件时,数据满足一个条件即可。
● match-criteria :设定的匹配条件。
如果在命令里既没有使用match-all,也没有使用match-any,系统默认使用的是match-all。
当设定匹配条件时,可以使用以下参数。
① ACL(名称或代码)。
● access-group ——访问列表名称或代码。
例3-10:把两个ACL(subnet-a和subnet-b)定义的数据划归为一类。
② 任意数据。
③ 调用其他class-map,即calss-map嵌套。
● class-name :其他class-map的名字。
例3-11:class2 调用class1。
④ CoS值。
● cos-value :CoS值,最多4个。在同一个match语句里的多个值,匹配一个值即满足条件。
例3-12:把CoS=2 和CoS=3 的数据划归一类。
⑤ 目的MAC地址。
● address :目的MAC地址(十六进制)。
例3-13:
⑥ 数据进入的接口。
● interface-name :入口编号。
⑦ DSCP值。
● dscp-value :DSCP值,最多7个。在同一个match语句里的多个值,匹配一个值即为满足条件。既可以匹配IPv4 数据包,也可以匹配IPv6 数据包。
例3-14:把DSCP=2,DSCP=3,DSCP=30,AF=11 的数据划归一类。
⑧ IP优先级。
● ip-precedence-value :IP优先级值,最多4个值。在同一个match语句里的多个值,匹配一个值即满足条件。既可以匹配IPv4 数据包,也可以匹配IPv6 数据包。
⑨ 实时传输协议端口。
● starting-port-number :起始端口号。
● port-range :端口号范围,自起始端口号之后的端口号范围。
例3-15:匹配自端口号 2024 及其后 100 个端口号(2024~2124)。
⑩ MPLS标签。
● exp-values :MPLS实验字段标记值。
反向选择条件。
● match-criteria :不是该条件的其他情况都匹配。
例3-16:把不是RTP协议的数据归类。
协议。
● protocol-name:协议名称。
源MAC地址。
● address :源MAC地址(十六进制)。
RTP(使用NBAR分类时使用的命令)。
● audio:音频数据。
● video:视频数据。
● payload-type-code :数据类型代码。0~23 保留给音频数据,24~33 保留给视频数据,34~64 用户可以自定义。使用代码比仅使用“audio”或“video”关键词产生的匹配更严格。多个类型代码之间使用逗号分隔,也可以使用连线符表示代码区间。代码的表达形式可以是十进制、十六进制和二进制。
例3-17:匹配数据类型代码为 2,4,6,7~16 的音频数据。
提示: 根据IOS版本和设备平台的不同,支持的匹配条件会有所不同。这里并没有列出所有可用的匹配条件。读者在使用时请注意查阅产品文档和IOS版本。
使用policy-map命令可对已经使用class-map命令分类的数据进行标记。
语法如下所述。
● policy-name :自定义的名称。
● class-name :使用class-map命令生成的数据类的名称。
● class-default:默认的数据类。系统把不属于任何分类的数据自动归为默认类。默认数据类不需要事先定义,直接调用即可。默认类数据的CoS=0,DSCP=0。
● tag ——为数据设置的标记值。
标记值可以是以下几种。
① CoS值。
● cos-value :CoS值,取值范围为 0~7。
② DSCP值。
● ip-dscp-value :DSCP值,取值范围为 0~63。
③ IP优先级值。
● ip-precedence-value :IP优先级值,取值范围为 0~7。
④ MPLS实验字段值。
● value :实验字段值,取值范围为 0~7。
⑤ QoS组。
● qos-group-value :用户自定义的组ID号,范围为 0~99。该命令的作用是把满足某条件的数据人为地划分到一个组里,以便在其他设备上识别。
⑥ 信任数据携带的标记值。
提示: 根据IOS版本和设备平台的不同,可被支持的命令有所不同。这里并没有列出所有的用法,请读者在使用的时候查阅产品文档和IOS版本。
例3-18:对class1 的数据标记DSCP=AF21。
注意: 虽然没有调用class-default,系统仍然把非class1 的数据放置在class-default里,并设置DSCP=0(默认值)。
例3-19:设置音/视频数据的CoS=5,其他数据的CoS=1。
例3-20:设置class3 数据的DSCP=af11,class4 数据的DSCP=af21,class5 数据的DSCP=af31,不属于上述三个类别的数据的DSCP=af13。
该命令把policy-map应用在接口上,对进入该接口的数据进行分类和标记。其语法如下所述。
● policy-map-name :使用的policy-map的名字。
例3-21:交换机连接IP电话,桌面PC与IP电话相连。假设数据VLAN=10,地址为172.16.10.0/24;语音VLAN=100,地址为 192.168.100.0/24。
由于设置了class-default数据的DSCP=af13,该端口的CoS值由DSCP-CoS的映射表计算而得。
如果在端口上使用了“mls qos trust”命令,则该命令会在应用了service-policy命令后失效。
class-map嵌套也叫做class-map调用,即由一个class-map语句调用另一个class-map语句,从而达到灵活分类数据的目的。
例3-22:class-map嵌套例子。
class4 使用的是match-any关键词,即匹配3个条件中任意一个条件的数据都是符合要求的。
class5 调用了class4,并且使用的是match-all关键词,这样的结果是匹配class4 中任意一个条件并且同时匹配class5 中其他条件的数据才是符合要求的。
policy-map命令调用的是class5,这样就产生了{[A or B or C]and D}的匹配结果。如果不使用class-map嵌套,在一个class-map里是不可能产生这样的结果的,因为在一个class-map里不能同时使用match-any 和match-all。程序如下所示。
类似于class-map调用,policy-map也可以调用。policy-map嵌套形成的是具有分层结构的策略。
例3-23:policy-map嵌套。
在本例中,inner-class 匹配的条件是EXP=2,outer-class匹配的条件是 VLAN=203。Inner-policy的目的是把EXP=2 的数据更改为EXP=5。Outer-policy调用inner-policy,执行的结果放在VLAN203 中,EXP=2 的数据都被改写为EXP=5。
提示: inner-class定义的数据集合应该小于或等于outer-class定义的数据集合。
① 查看class-map的命令。
语法如下:
例3-24:查看名字叫ipp5 的class-map。
输出显示名字叫ipp5 的class-map使用的关键词是match-all,匹配的是IP优先级等于 5的数据包。
② 查看policy-map的命令。
语法如下:
例3-25:查看名字叫ipp5-policy的policy-map。
③ 查看接口上应用的policy-map。
语法如下:
例3-26:查看端口 5/36 上应用的policy-map。
输出显示该端口在入口方向(Input)上应用了名字叫Policy-1 的策略。Policy-1 调用了c-1(match access-group 100),有 38 437 个数据包匹配。没有数据匹配默认数据类。
提示: 根据设备平台和IOS版本的不同,命令的输出结果会有所不同。