QoS在IOS中的实现与应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.2 边界及边界信任

DS边界节点不仅是路由器,还可以是交换机。作为边界的交换机应该位于接入层,它直接连接终端设备,如图3-2所示。

图3-2 DS域边界

进入DS域的数据包在边界设备的端口上被分类。在DS域内的交换机端口可以不执行数据分类操作。由于它可以信任对端端口发送来的已经做了分类的数据,所以可以把端口配置成信任状态。

其实,DS域边界端口也可以被配置成信任状态,只要不进行数据分类,都可以配置成信任状态。如连接IP电话的交换机端口,该端口是DS域外端口,但可以把它配制成信任状态,信任IP电话发送的数据,因为该数据已经携带了优先级较高的标记,不需要交换机再次做分类工作了。

对原始数据的信任包括:

● 信任DSCP;

● 信任CoS;

● 信任IP Precedence;

● 信任IP电话。

3.2.1 启用交换机的QoS功能

在做任何与QoS有关的配置前需要在设备上全局性地开启QoS功能。为了确定QoS功能是否开启,可以使用命令检查一下。

如检查交换机是否启用了QoS功能:

            Switch#show mls qos
            QoS is disabled
            QoS ip packet dscp rewrite is enabled

输出显示QoS功能没有启用。

即使显示“QoS ip packet dscp rewrite is enabled”,在QoS功能关闭状态下,设备也不会更改DSCP值。在QoS功能关闭状态下,设备不会更改数据携带的CoS和DSCP值,也不区分数据的优先级,而使用尽力而为的模式转发所有数据。

在交换机上启用QoS功能的命令如下所示。

            Switch(config)# mls qos

3.2.2 信任CoS

如果让交换机信任其端口收到的数据帧携带的CoS值,可以使用命令启用该功能。在接口模式下可使用如下命令:

            switch(config-if)# mls qos trust CoS

使用该命令后,交换机:

● 使用数据携带的CoS值对数据进行分类;

● 如果数据没有携带CoS值,则使用交换机端口默认CoS值对数据分类,默认值为0;

● 如果是802.1q隧道,则把内层标签复制到外层标签字段。

例3-1:在trunk端口上启用信任。

            switch(config)# interface GigabitEthernet1/0/3
            switch(config-if)# description **** Trunk Port ****
            switch(config-if)# switchport trunk encapsulation dot1q
            switch(config-if)# switchport mode trunk
            switch(config-if)# switchport trunk native vlan 5
            switch(config-if)# switchport trunk allowed vlan 5-50
            switch(config-if)# mls qos trust cos
            switch(config-if)# end

在trunk端口上既可以信任CoS,也可以信任DSCP。如果信任CoS,交换机会根据CoS-DSCP映射表计算DSCP值;如果信任DSCP,交换机会根据DSCP-CoS映射表计算CoS值。

由于Native VLAN的数据是不带标签的,所以如果信任CoS,交换机则使用端口默认CoS值计算DSCP值,默认情况下计算的值应该是0。

3.2.3 信任DSCP

如果让交换机信任其端口收到的数据帧携带的DSCP值,可以使用命令启用该功能。在接口模式下可使用如下命令:

            switch(config-if)# mls qos trust DSCP

使用该命令后,交换机:

● 使用IP数据包携带的DSCP值对数据分类;

● 如果接收到的不是IP数据包,且数据帧带有标记,交换机则使用该CoS值,并根据CoS到DSCP的映射表生成DSCP值。对于没有携带帧标记的非IP包,交换机则使用端口默认CoS值为其赋值,然后再根据CoS到DSCP的映射表生成DSCP值;

● 如果是802.1q隧道,使用DSCP值(对于非IP,使用生成的DSCP)并依据DSCP到CoS的映射表生成外层标签,内层标签不做改动。

例3-2:在3层接口上做信任。

            switch(config)# interface GigabitEthernet1/0/1
            switch(config-if)# no switchport
            switch(config-if)# ip address 192.168.10.1255.255.255.0
            switch(config-if)# mls qos trust dscp
            switch(config-if)# end

例3-3:在2层端口上做信任。

            switch(config)# interface GigabitEthernet1/0/2
            switch(config-if)# description **** Access Port ****
            switch(config-if)# switchport access vlan 10
            switch(config-if)# switchport mode access
            switch(config-if)# mls qos trust dscp
            switch(config-if)# end

提示:在3层接口或接入端口(Access Port)上只能信任DSCP,信任CoS是无意义的,因为这种接口上的数据不携带2层标签。

3.2.4 信任IP Precedence

如果让交换机信任其端口收到的数据帧携带的IP优先级值,可以使用命令启用该功能。在接口模式下可使用如下命令:

            switch(config-if)# mls qos trust ip-precedence

使用该命令后,交换机:

● 使用IP数据包携带的优先级值对数据分类;

● 如果接收到的不是IP数据包,且数据帧带有标记,交换机则使用该CoS值,并根据CoS到DSCP的映射表生成DSCP值。对于没有携带帧标记的非IP包,交换机则使用端口默认CoS值为其赋值,然后再根据CoS到DSCP的映射表生成DSCP值;

● 如果是802.1q隧道,使用DSCP值(对于非IP,使用生成的DSCP)并依据DSCP到CoS的映射表生成外层标签,内层标签不做改动。

例3-4:

            switch(config)# interface GigabitEthernet0/1
            switch(config-if)# no switchport
            switch(config-if)# ip address 192.168.10.10255.255.255.0
            switch(config-if)# mls qos trust ip-precedence
            switch(config-if)# end

3.2.5 信任IP电话

如果让交换机信任其端口连接的IP电话,可以使用如下命令:

            switch(config)# cdp run
            switch(config-if)# cdp enable
            switch(config-if)# switchport access vlan 10
            switch(config-if)# switchport mode access
            switch(config-if)# switchport voice vlan 20
            switch(config-if)# mls qos trust cos
            switch(config-if)# mls qos trust device cisco-phone

IP电话把语音数据的优先级标记为5(CoS=5),把其他数据的优先级标记为0(CoS=0),因此在连接IP电话的交换机端口上可以做信任配置。当交换机使用CDP检测到连接设备不是IP电话时,就终止端口信任,并使用端口的CoS值覆盖数据所携带的CoS值。

3.2.6 启用被信任边界特性

如果与IP电话连接的PC把自己设置在VLAN20中,并标记自己的数据CoS=5,交换机同样会把它当做语音数据看待。为了避免这种情况出现,可以启用一个叫做“被信任边界”的特性。该特性可以使IP电话重新设定PC数据的CoS值。

启用该特性的命令如下:

            switch(config-if)# switchport priority extend cos cos-value

例3-5:把PC数据的CoS值更改为0。

            switch(config)# cdp run
            switch(config-if)# cdp enable
            switch(config-if)# switchport access vlan 10
            switch(config-if)# switchport mode access
            switch(config-if)# switchport voice vlan 20
            switch(config-if)# mls qos trust cos
            switch(config-if)# mls qos trust device cisco-phone
            switch(config-if)# switchport priority extend cos 0

需要提醒读者的是,由于IP电话送出的语音数据的CoS=5,根据默认的CoS-DSCP的映射关系,其对应的DSCP=40,而不是46(EF),所以需要把CoS-DSCP的映射关系更改为:

            switch(config)# mls qos map cos-dscp  0  8  16  24  32  46  48  56

3.2.7 为交换机端口设置默认CoS值

命令语法如下:

            switch(config-if)# mls qos cos {default-cos | override}

其中,

● default-cos——为端口设置的默认CoS值,取值范围是0~7,系统默认值是0。

● override——该参数可以使所有自该端口进入的数据都使用默认CoS值,即便是已经配置了端口信任。

例3-6:

            switch(config)# interface GigabitEthernet1/12
            switch(config-if)# switchport access vlan 10
            switch(config-if)# switchport mode access
            switch(config-if)# switchport voice vlan 20
            switch(config-if)# mls qos trust CoS
            switch(config-if)# mls qos cos 1
            switch(config-if)# mls qos cos override

以上配置的结果是所有自该端口进入的数据,包括VLAN10和VLAN20的数据的CoS值都被改写为1。

例3-7:

            switch(config)# interface GigabitEthernet1/0/12
            switch(config-if)# description **** Cisco IP Phone  ****
            switch(config-if)# switchport access vlan 10
            switch(config-if)# switchport mode access
            switch(config-if)# switchport voice vlan 20
            switch(config-if)# mls qos trust cos
            switch(config-if)# mls qos cos 3
            switch(config-if)# spanning-tree portfast
            switch(config-if)# end

以上配置的结果是信任语音VLAN(VLAN20)的CoS值,而VLAN10的数据被赋予CoS=3。

3.2.8 查看端口QoS状态

例3-8:

            Switch> show mls qos interface GigabitEthernet1/0/1
            GigabitEthernet1/0/1
            trust state:not trusted
            trust mode:not trusted
            trust enabled flag:ena
            CoS override:dis
            default CoS:0
            Trust device:none

输出显示没有做端口信任,也没有信任任何设备,默认CoS=0,CoS override功能关闭。

3.2.9 设置QoS域边界端口的信任特性

如果两个QoS域相连,如图3-3所示,为了避免在边界进行分类的琐碎工作,可以在边界端口上启用DSCP信任特性,直接信任来自另一个QoS域的DSCP值。但是如果两个QoS域使用的DSCP值不一致(对同类数据标记的DSCP值不同),就需要使用DSCP-to-DSCP突变映射(Mutation Map)把来自另一个QoS域的DSCP值翻译成本QoS域定义的值。

图3-3 QoS域互连

翻译DSCP值的工作需要以下2个步骤。

(1)定义DSCP-to-DSCP突变映射,语法如下:

            switch(config)# mls qos map dscp-mutation dscp-mutation-name in-dscp to
    out-dscp

其中,

dscp-mutation-name——映射表名字。

in-dscp——被翻译的DSCP值。最多可以写8个,用空格分开。

out-dscp——翻译后的DSCP值。

(2)把映射表应用在启用DSCP信任的端口上,语法如下:

            switch(config-if)# mls qos dscp-mutation dscp-mutation-name

例3-9:把DSCP值10,11,12,13映射到30;把DSCP值19,21,22映射到20。

            Switch(config)# mls qos map dscp-mutation example-1 10 11 12 13 to 30
            Switch(config)# mls qos map dscp-mutation example-1 19 21 22 to 20
            Switch(config)# interface GigabitEthernet1/1/1
            Switch(config-if)# mls qos trust dscp
            Switch(config-if)# mls qos dscp-mutation example-1
            Switch(config-if)# end

(3)查看突变映射表。

            Switch# show mls qos maps dscp-mutation example-1
            Dscp-dscp mutation map:
            Example-1:
            d1 : d2  0  1  2  3  4   5  6  7  8  9
            ------------------------------------------------------------------
            0 :     00  01  02  03  04  05  06  07  08  09
            1 :     30  30  30  30  14  15  16  17  18  20
            2 :     20  20  20  23  24  25  26  27  28  29
            3 :     30  31  32  33  34  35  36  37  38  39
            4 :     40  41  42  43  44  45  46  47  48  49
            5 :     50  51  52  53  54  55  56  57  58  59
            6 :     60  61  62  63