目录
MSTP(Multiple Spanning Tree Protocol,多生成树协议)是一种用于在网络中防止环路并实现负载均衡的协议。MSTP是IEEE 802.1s标准的一部分,它扩展了STP(Spanning Tree Protocol,生成树协议)和RSTP(Rapid Spanning Tree Protocol,快速生成树协议)的功能。
MSTP的基本原理
-
生成树的概念:
- 生成树协议的主要目的是在网络中防止环路,同时确保网络的连通性。它通过阻塞某些冗余链路来消除环路,并在链路故障时重新激活这些链路以恢复连通性。
-
MSTP的核心思想:
- MSTP允许在网络中创建多个生成树实例(MSTI,Multiple Spanning Tree Instances),每个实例可以独立地管理一部分VLAN的流量。这样,不同的VLAN可以通过不同的生成树实例进行转发,从而实现负载均衡和优化网络资源的使用。
-
MSTP的组成:
- MST Region(MST区域):MSTP将网络划分为多个MST区域,每个区域可以包含多个交换机。区域内的交换机使用相同的MST配置,包括区域名称、修订号和VLAN到生成树实例的映射。
- MSTI(Multiple Spanning Tree Instance):每个MST区域可以包含多个生成树实例,每个实例对应一个或多个VLAN。每个MSTI独立计算生成树,确保其对应的VLAN流量不会形成环路。
- CST(Common Spanning Tree):CST是MSTP中用于连接不同MST区域的生成树实例。它确保不同区域之间的连通性,并防止区域间的环路。
-
MSTP的工作过程:
- 配置MSTP:在网络中配置MSTP时,需要为每个交换机指定MST区域名称、修订号以及VLAN到生成树实例的映射。
- 选举根桥:在每个MSTI中,交换机通过BPDU(Bridge Protocol Data Unit)报文选举出一个根桥。根桥负责生成树的计算和拓扑的维护。
- 计算生成树:每个MSTI独立计算生成树,确定哪些端口处于转发状态,哪些端口处于阻塞状态。
- 处理拓扑变化:当网络拓扑发生变化时(如链路故障),MSTP会快速重新计算生成树,并调整端口状态,以恢复网络的连通性。
-
MSTP的优点:
- 负载均衡:通过将不同的VLAN映射到不同的生成树实例,MSTP可以实现流量的负载均衡,优化网络资源的使用。
- 快速收敛:MSTP基于RSTP,具有快速收敛的特性,能够在网络拓扑发生变化时快速恢复连通性。
- 扩展性:MSTP支持大规模网络,能够通过划分MST区域来简化生成树的计算和管理。
在ENSP中配置MSTP
在ENSP中,可以通过以下步骤配置MSTP:
-
进入系统视图:
system-view
-
启用MSTP:
stp mode mstp
-
配置MST区域:
stp region-configuration # 进入MSTP区域配置模式,用于配置MST区域的相关参数 region-name <region-name> # 设置MST区域的名称,<region-name>为自定义的区域名称,用于标识MST区域 revision-level <revision-number> # 设置MST区域的修订号,<revision-number>为数字,用于标识MST区域的配置版本 instance <instance-id> vlan <vlan-list> # 将VLAN映射到指定的生成树实例,<instance-id>为生成树实例的ID,<vlan-list>为VLAN列表 active region-configuration # 激活当前配置的MST区域,使配置生效
-
配置根桥(可选):
stp instance <instance-id> root primary
-
查看MSTP状态:
display stp
通过以上配置,可以在ENSP中实现MSTP,并在模拟的网络环境中验证其防止环路和负载均衡的效果,下面是一个具体的实例以供参考。
实例:
网络拓扑如下:
需求如下:
VLAN10和VLAN20互访
VLAN10:S3->S1->R1
VLAN20:S3->S2->R1
实现思路:
1、配置PC及路由器的IP地址。
2、配置交换机的vlan及trunk。
3、交换机开启MSTP协议,配置相同区域名称。
4、交换机建立两个实例,分别将vlan 10 和vlan 20加入到不同的实例中,并为两个实例指定不同的根网桥,实例1的根网桥在S1上,实例2的根网桥在S2上。
开始配置:
1、配置路由器IP地址(PC机的IP地址自行配置):
[R1]in g0/0/0
[R1-GigabitEthernet0/0/0]ip add 10.1.10.254 24
[R1-GigabitEthernet0/0/0]in g0/0/1
[R1-GigabitEthernet0/0/1]ip add 10.1.20.254 24
[R1-GigabitEthernet0/0/1]un shut <!--接口默认为开启状态,若为关闭状态,可使用该命令开启-->
2、配置各个交换机的VLAN及Trunk:
这里将所有和客户机连接的接口配置为Access接口
交换机和交换机连接的接口配置为trunk接口
交换机和路由器连接的接口配置为Hybrid接口
S1的配置如下:
[S1]vlan ba 10 20 <!--创建vlan10 和vlan20-->
[S1]in g0/0/2 <!--进入该接口-->
[S1-GigabitEthernet0/0/2]port link-type trunk <!--配置接口模式为trunk-->
[S1-GigabitEthernet0/0/2]port trunk allow-pass vlan all <!--放行所有vlan流量通过-->
[S1-GigabitEthernet0/0/2]in g0/0/1 <!--进入该接口-->
[S1-GigabitEthernet0/0/1]port link-type trunk <!--配置接口模式为trunk-->
[S1-GigabitEthernet0/0/1]port trunk allow-pass vlan all <!--放行所有vlan流量通过-->
[S1-GigabitEthernet0/0/1]in g0/0/3 <!--进入该接口-->
[S1-GigabitEthernet0/0/3]port link-type hybrid <!--配置接口模式为Hybrid-->
[S1-GigabitEthernet0/0/3]port hybrid untagged vlan 10 <!--将vlan 10 添加到该接口的untag列表--> VLAN 10 的数据包在通过该端口时不会携带 VLAN 标签。
[S1-GigabitEthernet0/0/3]port hybrid pvid vlan 10 <!--配置接口PVID为vlan 10-->
当端口收到一个不带 VLAN 标签的数据包时,会将其视为 VLAN 10 的数据包进行处理
S2的配置如下:
[S2]vlan ba 10 20 <!--创建vlan10 和vlan20-->
[S2]in g0/0/2 <!--进入该接口-->
[S2-GigabitEthernet0/0/2]port link-type trunk <!--配置接口模式为trunk-->
[S2-GigabitEthernet0/0/2]port trunk allow-pass vlan all <!--放行所有vlan流量通过-->
[S2-GigabitEthernet0/0/2]in g0/0/1 <!--进入该接口-->
[S2-GigabitEthernet0/0/1]port link-type trunk <!--配置接口模式为trunk-->
[S2-GigabitEthernet0/0/1]port trunk allow-pass vlan all <!--放行所有vlan流量通过-->
[S2-GigabitEthernet0/0/1]in g0/0/3 <!--进入该接口-->
[S2-GigabitEthernet0/0/3]port link-type hybrid <!--配置接口模式为Hybrid-->
[S2-GigabitEthernet0/0/3]port hybrid untagged vlan 20 <!--将vlan 12 添加到该接口的untag列表-->
[S2-GigabitEthernet0/0/3]port hybrid pvid vlan 20 <!--配置接口PVID为vlan 20-->
S3的配置如下:
[S3]vlan ba 10 20 <!--创建vlan10 和vlan20-->
[S3]in g0/0/3 <!--进入该接口-->
[S3-GigabitEthernet0/0/3]port link-type access <!--配置接口模式为access-->
[S3-GigabitEthernet0/0/3]port default vlan 10 <!--将接口添加到vlan 10中-->
[S3-GigabitEthernet0/0/3]in g0/0/4 <!--进入该接口-->
[S3-GigabitEthernet0/0/4]port link-type access <!--配置接口模式为access-->
[S3-GigabitEthernet0/0/4]port default vlan 20 <!--将接口添加到vlan 20中-->
[S3-GigabitEthernet0/0/4]in g0/0/1 <!--进入该接口-->
[S3-GigabitEthernet0/0/1]port link-type trunk <!--配置接口模式为trunk-->
[S3-GigabitEthernet0/0/1]port trunk allow-pass vlan all <!--放行所有vlan流量通过-->
[S3-GigabitEthernet0/0/1]in g0/0/2 <!--进入该接口-->
[S3-GigabitEthernet0/0/2]port link-type trunk <!--配置接口模式为trunk-->
[S3-GigabitEthernet0/0/2]port trunk allow-pass vlan all <!--放行所有vlan流量通过-->
3、配置MSTP
上面的需求是要求vlan 10的客户端通过S3和S1到达网关,vlan 20的客户端通过S3和S2到达网关,从而实现链路的负载分担。在接下来的配置中,把S1配置为instance 1的根,而instance 1实例和vlan 10关联,那么vlan的流量因为S2和S3之间的链路阻塞而通过左边到达网关。同理,instance 2实例中配置S2为根,并通过右边到达网关。
S1的配置如下:
[S1]stp mo mstp <!--将交换机配置成MSTP模式-->
[S1]stp region-configuration <!--进入MSTP配置模式-->
[S1-mst-region]region-name lv <!--配置域名为“lv”-->
[S1-mst-region]revision-level 1 <!--配置版本等级为“1”-->
[S1-mst-region]instance 1 vlan 10 <!--将vlan 10加入实例1中-->
[S1-mst-region]instance 2 vlan 20 <!--将vlan 20加入实例2中-->
[S1-mst-region]active region-configuration <!--激活配置(必须配置)-->
[S1-mst-region]quit <!--退出配置模式-->
[S1]stp instance 1 root primary <!--配置此交换机为实例1的主根-->
[S1]stp instance 2 root secondary <!--配置此交换机为实例2的备根-->
S2的配置如下:
[S2]stp mode mstp <!--将交换机配置成MSTP模式-->
[S2]stp region-configuration <!--进入MSTP配置模式-->
[S2-mst-region]region-name lv <!--配置域名为“lv”-->
[S2-mst-region]revision-level 1 <!--配置版本等级为“1”-->
[S2-mst-region]instance 1 vlan 10 <!--将vlan 10加入实例1中-->
[S2-mst-region]instance 2 vlan 20 <!--将vlan 20加入实例2中-->
[S2-mst-region]active region-configuration <!--激活配置(必须配置)-->
[S2-mst-region]quit <!--退出配置模式-->
[S2]stp instance 1 root secondary <!--配置此交换机为实例1的备根-->
[S2]stp instance 2 root primary <!--配置此交换机为实例2的主根-->
S3的配置如下:
[S3]stp mode mstp <!--将交换机配置成MSTP模式-->
[S3]stp region-configuration <!--进入MSTP配置模式-->
[S3-mst-region]region-name lv <!--配置域名为“lv”-->
[S3-mst-region]revision-level 1 <!--配置版本等级为“1”-->
[S3-mst-region]instance 1 vlan 10 <!--将vlan 10加入实例1中-->
[S3-mst-region]instance 2 vlan 20 <!--将vlan 20加入实例2中-->
[S3-mst-region]active region-configuration <!--激活配置(必须配置)-->
4、验证:
在S3上查看STP接口角色及状态信息,结果如下(其中MSTID列表示实例):
<S3>dis stp br
MSTID Port Role STP State Protection
0 GigabitEthernet0/0/1 ROOT FORWARDING NONE
0 GigabitEthernet0/0/2 DESI FORWARDING NONE
0 GigabitEthernet0/0/3 DESI FORWARDING NONE
0 GigabitEthernet0/0/4 DESI FORWARDING NONE
1 GigabitEthernet0/0/1 ROOT FORWARDING NONE
1 GigabitEthernet0/0/2 ALTE DISCARDING NONE
1 GigabitEthernet0/0/3 DESI FORWARDING NONE
2 GigabitEthernet0/0/1 ALTE DISCARDING NONE
2 GigabitEthernet0/0/2 ROOT FORWARDING NONE
2 GigabitEthernet0/0/4 DESI FORWARDING NONE
可以看到实例 1中的GigabitEthernet0/0/2和实例 2中的GigabitEthernet0/0/1处于阻塞状态。同时,两个实例之间相互独立,彼此不受影响。而且现在vlan 10中的客户端可以和vlan 20中的客户端进行通信。
在S1上查看STP实例1,结果如下:
<S1>display stp instance 1
-------[MSTI 1 Global Info]-------
MSTI Bridge ID :0.4c1f-cc61-18c1
MSTI RegRoot/IRPC :0.4c1f-cc61-18c1 / 0
MSTI RootPortId :0.0
MSTI Root Type :Primary root //即主根桥,该桥是实例 1 的主根。
Master Bridge :32768.4c1f-cc05-6a77
Cost to Master :20000
TC received :8
TC count per hello :0
Time since last TC :0 days 0h:6m:4s
Number of TC :7
Last TC occurred :GigabitEthernet0/0/1
----[Port1(GigabitEthernet0/0/1)][FORWARDING]----
Port Role :Designated Port
Port Priority :128
Port Cost(Dot1T ) :Config=auto / Active=20000
Designated Bridge/Port :0.4c1f-cc61-18c1 / 128.1
Port Times :RemHops 20
TC or TCN send :5
TC or TCN received :8
----[Port2(GigabitEthernet0/0/2)][FORWARDING]----
Port Role :Designated Port
Port Priority :128
Port Cost(Dot1T ) :Config=auto / Active=20000
Designated Bridge/Port :0.4c1f-cc61-18c1 / 128.2
Port Times :RemHops 20
TC or TCN send :6
TC or TCN received :0
----[Port3(GigabitEthernet0/0/3)][FORWARDING]----
Port Role :Designated Port
Port Priority :128
Port Cost(Dot1T ) :Config=auto / Active=20000
Designated Bridge/Port :0.4c1f-cc61-18c1 / 128.3
Port Times :RemHops 20
TC or TCN send :10
TC or TCN received :0
本桥是实例 1 的主根桥(MSTI Root Type 为 Primary root),桥 ID 为 0.4c1f-cc61-18c1,注册根桥为本桥自身,根路径开销为 0。主桥桥 ID 为 32768.4c1f-cc05-6a77。
验证2:
需要从PC1 ping通 PC2
能通后tracert PC2
PING 10.1.20.1
TRACERT 10.1.20.1
根据结果表明PC1是通过S1到达R1