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