RSTP在STP基础上进行了改进,实现了网络拓扑快速收敛。但RSTP和STP还存在同一个缺陷:由于局域网内所有的VLAN共享一棵生成树,因此被阻塞后链路将不承载任何流量,无法在VLAN间实现数据流量的负载均衡,从而造成带宽浪费。
为了弥补STP和RSTP的缺陷,IEEE于2002年发布的802.1s标准定义了MSTP。MSTP兼容STP和RSTP,既可以快速收敛,又提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。
如下图所示,网络中有SWA、SWB、SWC三台交换机。配置VLAN2通过两条上行链路,配置VLAN3只通过一条上行链路。
为了解决VLAN2的环路问题,需要运行生成树。设备运行STP/RSTP后,SWC与SWB相连的端口成为预备端口(Discarding状态),那么VLAN3的路径就会被断开,无法上行到SWB。
如下图所示,为了实现流量分担,需要配置两条上行链路为Trunk链路,允许通过所有VLAN;SWA和SWB之间的链路也配置为Trunk链路,允许通过所有VLAN。将VLAN2的三层接口配置在SWA上,将VLAN3的三层接口配置在SWB上,希望VLAN2和VLAN3分别使用不同的链路上行到相应的三层接口。
但是设备运行STP/RSTP后,SWC与SWB相连的端口成为预备端口(Alternate Port)并处于Discarding状态,则VLAN2和VLAN3的数据都只能通过一条上行链路上行到SWA,无法实现流量分担。
如下图所示,SWC与SWA和SWB相连的链路配置为Trunk链路,允许通过所有VLAN;SWA与SWB之间的链路也配置为Trunk链路,允许通过所有VLAN。
设备运行STP/RSTP后,环路被断开,VLAN2和VLAN3都直接上行到SWA。在SWA上配置VLAN2的三层接口,在SWB上配置VLAN3的三层接口,那么,VLAN3到达三层接口的路径就是次优的。
MST域内可以生成多棵生成树,每棵生成树都称为一个MSTI。MSTI之间彼此独立,且每个MSTI的计算过程基本与RSTP的计算过程相同。
MSTP兼容STP和RSTP,既可以快速收敛,又提供了数据转发的各个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。
为了在交换机上标识VLAN和MST Instance的映射关系,交换机维护一个MST配置表(MST Configuration Table)。
MST配置表的结构是4096个连续的两字节元素组,代表4096个VLAN,第一个元素和最后一个元素设置为全0;第二个元素表示VLAN 1映射到的MST Instance的MSTID,第三个元素表示VLAN 2映射到的MST Instance的MSTID,依此类推,倒数第二个元素(第4095个元素)表示VLAN 4094映射到的MST Instance的MSTID。
VRP平台支持16个MST Instance,MSTID取值范围是0~15。交换机初始化时,此表格所有字段设置为全0,表示所有VLAN映射到Instance 0。
由MST配置表可见,一个MSTI可以与一个或多个VLAN对应,但一个VLAN只能与一个MSTI对应。
MST域是多生成树域(Multiple Spanning Tree Region),由交换网络中的多台交换设备以及它们之间的网段所构成。同一个MST域的设备具有下列特点:
都启动了MSTP。
具有相同的域名。
具有相同的VLAN到生成树实例映射配置。
具有相同的MSTP修订级别配置。
一个局域网可以存在多个MST域,各MST域之间在物理上直接或间接相连。用户可以通过MSTP配置命令把多台交换设备划分在同一个MST域内。
一个MST域内可以生成多棵生成树,每棵生成树都称为一个MSTI,每个MSTI都使用单独的RSTP算法,计算单独的生成树。
除了Instance 0之外,每个区域的MST Instance都独立计算生成树,不管是否包含相同的VLAN,不管VLAN是否通过区域间链路,区域间的生成树计算互不影响。
MST配置标识被封装在交换机相互发送的BPDU中,交换机通过MST配置标识(MST Configuration Identifier)来标识自己所在的区域。
如图所示,MST配置标识的数据结构包括四部分,只有四部分设置都相同的相邻交换机才被认为是在同一个区域中。
Configuration Identifier Format Selector:配置标识格式选择符,长度为一个字节,固定设置为0。
Configuration Name:配置名称,也就是交换机的MST域名,长度为32字节。每个交换机都配置一个MST域名,默认为交换机的MAC地址。
Configuration Digest:配置摘要,长度为16字节。相同区域的交换机应当维护相同的VLAN到MST Instance的映射表,可是MST配置表太大(8192字节),不适合在交换机之间相互发送。此字段是使用MD5算法从MST配置表中算出的摘要信息。
Revision Level:修订级别,长度为两个字节,默认取值为全0。由于Configuration Digest是MST配置表的摘要信息,因此有很小的可能会出现MST配置表不同但摘要信息却相同的情况,这会导致本来不在同一区域的交换机被认为在同一区域中,此字段是一个额外的标识字段,建议不同的区域使用不同的数值,以消除上述可能产生错误的情况。
在MST域内,MSTP根据VLAN和生成树实例的映射关系,针对不同的VLAN生成不同的生成树实例。每棵生成树独立进行计算,计算过程与STP计算生成树的过程类似,可参见STP介绍文中的拓扑计算选举部分。。
MSTI具有以下的特点:
每个MSTI独立计算自己的生成树,互不干扰。
每个MSTI的生成树计算方法与STP基本相同。
每个MSTI的生成树可以有不同的根,不同的拓扑。
每个MSTI在自己的生成树内发送BPDU。
每个端口在不同MSTI上的生成树参数可以不同。
每个端口在不同MSTI上的角色、状态可以不同。
MSTP拓扑变化处理与RSTP拓扑变化处理过程类似,可参见RSTP介绍文中拓扑变化处理部分。
如下图所示,SwitchA、SwitchB、SwitchC和SwitchD都运行MSTP。实现VLAN2~VLAN10和VLAN11~VLAN20的流量负载分担,MSTP引入了多实例。MSTP可设置VLAN映射表,把VLAN和生成树实例相关联。
配置思路
配置MSTP基本功能
与PC相连的端口不用参与MSTP计算,将其设置为边缘端口。
配置保护功能,实现对设备或链路的保护。例如:在各实例的根桥设备指定端口配置根保护功能。
配置设备的二层转发功能。
操作步骤
1.配置MSTP基本功能
a. 配置SwitchA、SwitchB、SwitchC和SwitchD到域名为RG1的域内,创建实例MSTI1和实例MSTI2
# 配置SwitchA的MST域。
[SwitchA] stp region-configuration
[SwitchA-mst-region] region-name RG1
[SwitchA-mst-region] instance 1 vlan 2 to 10
[SwitchA-mst-region] instance 2 vlan 11 to 20
[SwitchA-mst-region] active region-configuration
[SwitchA-mst-region] quit
# 配置SwitchB的MST域。
[SwitchB] stp region-configuration
[SwitchB-mst-region] region-name RG1
[SwitchB-mst-region] instance 1 vlan 2 to 10
[SwitchB-mst-region] instance 2 vlan 11 to 20
[SwitchB-mst-region] active region-configuration
[SwitchB-mst-region] quit
# 配置SwitchC的MST域。
[SwitchC] stp region-configuration
[SwitchC-mst-region] region-name RG1
[SwitchC-mst-region] instance 1 vlan 2 to 10
[SwitchC-mst-region] instance 2 vlan 11 to 20
[SwitchC-mst-region] active region-configuration
[SwitchC-mst-region] quit
# 配置SwitchD的MST域。
[SwitchD] stp region-configuration
[SwitchD-mst-region] region-name RG1
[SwitchD-mst-region] instance 1 vlan 2 to 10
[SwitchD-mst-region] instance 2 vlan 11 to 20
[SwitchD-mst-region] active region-configuration
[SwitchD-mst-region] quit
说明
当需要两台交换设备属于同一个MST域时,需保证以下信息配置相同:
MST域的域名配置相同。
多生成树实例和VLAN的映射关系配置相同。
MST域的修订级别配置相同。
b. 在域RG1内,配置MSTI1与MSTI2的根桥与备份根桥
# 配置SwitchA为MSTI1的根桥、MSTI2的备份根桥。
[SwitchA] stp instance 1 root primary
[SwitchA] stp instance 2 root secondary
# 配置SwitchB为MSTI1的备份根桥、MSTI2的根桥。
[SwitchB] stp instance 1 root secondary
[SwitchB] stp instance 2 root primary
c. 使能MSTP,实现破除环路
# 在SwitchA上启动MSTP。
[SwitchA] stp enable
# 在SwitchB上启动MSTP。
[SwitchB] stp enable
# 在SwitchC上启动MSTP。
[SwitchC] stp enable
# 在SwitchD上启动MSTP。
[SwitchD] stp enable
2.将与终端相连的端口设置为边缘端口
# 配置SwitchC端口GE1/0/1为边缘端口。
[SwitchC] interface gigabitethernet 1/0/1
[SwitchC-GigabitEthernet1/0/1] stp edged-port enable
[SwitchC-GigabitEthernet1/0/1] quit
# 配置SwitchD端口GE1/0/1为边缘端口。
[SwitchD] interface gigabitethernet 1/0/1
[SwitchD-GigabitEthernet1/0/1] stp edged-port enable
[SwitchD-GigabitEthernet1/0/1] quit
3.配置保护功能,如在各实例的根桥设备的指定端口配置根保护功能
# 在SwitchA端口GE1/0/1上启动根保护。
[SwitchA] interface gigabitethernet 1/0/1
[SwitchA-GigabitEthernet1/0/1] stp root-protection
[SwitchA-GigabitEthernet1/0/1] quit
# 在SwitchB端口GE1/0/1上启动根保护。
[SwitchB] interface gigabitethernet 1/0/1
[SwitchB-GigabitEthernet1/0/1] stp root-protection
[SwitchB-GigabitEthernet1/0/1] quit
4.配置设备的二层转发功能,配置过程略
5.验证配置结果
在网络计算稳定后,执行以下操作,验证配置结果。
# 在SwitchA上执行display stp brief命令,查看端口状态和端口的保护类型,结果如下:
# 在SwitchB上执行display stp brief命令,结果如下:
# 在SwitchC上执行display stp interface brief命令,结果如下:
# 在SwitchD上执行display stp interface brief命令,结果如下:
说明:
本配置举例以实例1和实例2为例,因此不用关注实例0中端口的状态。