ensp之STP、RSTP、MSTP协议实验

下面是一个基于华为eNSP的详细实验方案。先故意制造环路广播风暴并观察危害,再配置STP来验证其消除环路。

本实验软件环境、版本:操作系统win10。应用软件:ensp 1.3.00,VirtualBox 5.2.22,wireshark3.0.0(ps:不通软件版本的配置命令可能不同)

本实验同款环境:通过网盘分享的文件:计算机网络拓扑实验所需的配置软件

链接 : https://pan.baidu.com/s/1yHLcijdIQK8Ggl2r-l2Yqg?pwd=opop 提取码: opop)

实验拓扑图

端口连接表

本端设备 本端端口 对端设备 对端端口 链路类型
LSW1 G0/0/1 LSW2 G0/0/1 Trunk
LSW1 G0/0/2 LSW3 G0/0/1 Trunk
LSW2 G0/0/2 LSW4 G0/0/1 Trunk
LSW3 G0/0/2 LSW5 G0/0/1 Trunk
LSW4 G0/0/2 LSW5 G0/0/2 Trunk
LSW4 G0/0/3 PC1 网卡 Access
LSW4 G0/0/4 PC2 网卡 Access
LSW5 G0/0/3 PC3 网卡 Access

一、广播风暴

1、制造并观察广播风暴
1.1 基础配置

pc1:192.168.1.1

pc2:192.168.1.2

pc3:192.168.1.3

这里配置的交换机都是二层交换机,只能隔离冲突域,无法隔离广播域,因此通信无需配置网关。pc1和pc2和pc3之间的通信完全依靠 MAC 地址和 ARP 广播即可完成,无需经过三层路由。因此无需配置网关。

交换机的配置:

bash 复制代码
<Huawei>system-view 
[Huawei]un in en #关闭提示信息,防止干扰命令输入。这里是简写,完整的命令是undo info-center enable
[Huawei]sysname LSW1
[LSW1]undo stp enable 
Warning: The global STP state will be changed. Continue? [Y/N]y
Info: This operation may take a few seconds. Please wait for a moment...done.
复制代码
<Huawei>system-view 
[Huawei]un in en
[Huawei]sysname LSW2
[LSW2]undo stp enable 
Warning: The global STP state will be changed. Continue? [Y/N]y
Info: This operation may take a few seconds. Please wait for a moment...done.

<Huawei>system-view 
[Huawei]un in en
[Huawei]sysname LSW3
[LSW3]undo stp enable 
Warning: The global STP state will be changed. Continue? [Y/N]y
Info: This operation may take a few seconds. Please wait for a moment...done.

<Huawei>system-view 
[Huawei]un in en
[Huawei]sysname LSW4
[LSW4]undo stp enable 
Warning: The global STP state will be changed. Continue? [Y/N]y
Info: This operation may take a few seconds. Please wait for a moment...done.

<Huawei>system-view 
[Huawei]un in en
[Huawei]sysname LSW5
[LSW5]undo stp enable 
Warning: The global STP state will be changed. Continue? [Y/N]y
Info: This operation may take a few seconds. Please wait for a moment...done.
1.2 制造并观察"广播风暴

华为交换机通常默认启用了更高级的MSTP(多生成树协议)。为了制造环路,我们需要全局禁用所有交换机的STP功能。这是为了验证在没有STP的环境下,环路会引发什么问题。

bash 复制代码
[LSW1]undo stp enable 
Warning: The global STP state will be changed. Continue? [Y/N]y
Info: This operation may take a few seconds. Please wait for a moment...done.
复制代码
[LSW2]undo stp enable 
Warning: The global STP state will be changed. Continue? [Y/N]y
Info: This operation may take a few seconds. Please wait for a moment...done.

[LSW3]undo stp enable 
Warning: The global STP state will be changed. Continue? [Y/N]y
Info: This operation may take a few seconds. Please wait for a moment...done.

[LSW4]undo stp enable 
Warning: The global STP state will be changed. Continue? [Y/N]y
Info: This operation may take a few seconds. Please wait for a moment...done.

[LSW5]undo stp enable 
Warning: The global STP state will be changed. Continue? [Y/N]y
Info: This operation may take a few seconds. Please wait for a moment...done.

配置完成后,环路就形成了。

1.3 观察环路现象

pc1和pc2和pc3之间已经无法正常通信。

随机选一个LSW1的001端口进行抓包验证:

弹出的wireshark界面直观的看出数千个ARP广播包。这就是pc1、pc2和pc3 ping不通的原因。PC1发出一个广播请求,比如ARP请求,这个请求会在5台交换机组成的环路里被无限循环泛洪。每次经过一个交换机,MAC地址表都会被刷新,导致MAC地址表震荡,设备忙于处理大量重复帧,最终耗尽网络带宽和设备性能。

2、STP协议

配置并启用STP消除环路

2.1 清除风暴并启用STP

点击eNSP界面上的"停止所有设备"再"启动所有设备"来重置实验环境。

由于华为交换机默认运行的是MSTP(多生成树协议),为了专注STP的核心原理,我们通过 stp mode stp 命令切换到传统STP模式。在5台交换机上执行以下命令:

bash 复制代码
<Huawei>system-view 
[Huawei]un in en
[Huawei]sysname LSW1
[LSW1]stp enable   #开启stp功能
[LSW1]stp mode stp  #将生成树模式设置为传统的stp
Info: This operation may take a few seconds. Please wait for a moment...done.
复制代码
<Huawei>system-view 
[Huawei]un in en
[Huawei]sysname LSW2
[LSW2]stp enable 
[LSW2]stp mode stp
Info: This operation may take a few seconds. Please wait for a moment...done.

<Huawei>system-view 
[Huawei]un in en
[Huawei]sysname LSW3
[LSW3]stp enable 
[LSW3]stp mode stp
Info: This operation may take a few seconds. Please wait for a moment...done.

<Huawei>system-view 
[Huawei]un in en
[Huawei]sysname LSW4
[LSW4]stp enable 
[LSW4]stp mode stp
Info: This operation may take a few seconds. Please wait for a moment...done.

<Huawei>system-view 
[Huawei]un in en
[Huawei]sysname LSW5
[LSW5]stp enable 
[LSW5]stp mode stp 
Info: This operation may take a few seconds. Please wait for a moment...done.

pc之间的通信变正常说明stp协议起作用了,广播风暴已经停止。

查看STP工作结果:在交换机上使用display stp brief命令,可以看到环路已被修剪为一棵无环的逻辑树。

bash 复制代码
[LSW1]display stp brief 
 MSTID  Port                        Role  STP State     Protection
   0    GigabitEthernet0/0/1        DESI  FORWARDING      NONE
   0    GigabitEthernet0/0/2        ROOT  FORWARDING      NONE
复制代码
[LSW2]display stp brief 
 MSTID  Port                        Role  STP State     Protection
   0    GigabitEthernet0/0/1        ROOT  FORWARDING      NONE
   0    GigabitEthernet0/0/2        ALTE  DISCARDING      NONE

[LSW3]display stp brief 
 MSTID  Port                        Role  STP State     Protection
   0    GigabitEthernet0/0/1        DESI  FORWARDING      NONE
   0    GigabitEthernet0/0/2        DESI  LEARNING        NONE

[LSW4]display stp brief 
 MSTID  Port                        Role  STP State     Protection
   0    GigabitEthernet0/0/1        DESI  FORWARDING      NONE
   0    GigabitEthernet0/0/2        ROOT  FORWARDING      NONE
   0    GigabitEthernet0/0/3        DESI  FORWARDING      NONE
   0    GigabitEthernet0/0/4        DESI  FORWARDING      NONE

[LSW5]display stp brief 
 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

根桥的特征 :它的所有端口都不会 出现 ROOT 角色,而只能是 DESI(指定端口)或 ALTE(替代端口)等。因此根桥是 SW3 。根交换机 = 根桥 ,两者是同一个意思。但"根桥"更常用。其他4台交换机都有至少一个 ROOT 端口指向根桥 SW3。STP 的目的是逻辑上阻断冗余链路,防止二层环路(广播风暴、MAC地址漂移等),同时提供链路备份。这个链路的冗余备份是怎么起作用的呢?我们可以手动指定LSW2设为主根桥:

1. 修改优先级,选举"根桥"

复制代码
[LSW2]stp root primary #将LSW2的优先级设为0   

[LSW3]stp root secondary #将LSW3设置为备份根桥,优先级设为4096 

再次使用display stp brief查看端口角色的变化,观察STP的选举逻辑。

复制代码
[LSW1]display stp brief
 MSTID  Port                        Role  STP State     Protection
   0    GigabitEthernet0/0/1        ROOT  FORWARDING      NONE
   0    GigabitEthernet0/0/2        DESI  FORWARDING      NONE

[LSW2]display stp brief
 MSTID  Port                        Role  STP State     Protection
   0    GigabitEthernet0/0/1        DESI  FORWARDING      NONE
   0    GigabitEthernet0/0/2        DESI  FORWARDING      NONE

[LSW4]display stp brief
 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

[LSW5]display stp brief
 MSTID  Port                        Role  STP State     Protection
   0    GigabitEthernet0/0/1        ALTE  DISCARDING      NONE
   0    GigabitEthernet0/0/2        ROOT  FORWARDING      NONE
   0    GigabitEthernet0/0/3        DESI  FORWARDING      NONE

经过我们手动指定,SW2 已经是根桥了。它的所有端口都是 DESI(指定端口) ,没有任何端口是 ROOT根端口。 通过手动配置根桥优先级改变根桥的角色,并且 STP 会自动重新计算端口角色,阻塞冗余链路。

2. 模拟链路故障

为了验证STP的冗余备份特性,我们可以模拟故障:在非根桥交换机(如LSW5)上,将它的根端口002关闭。再次查看发现002端口变为了新的根端口。

复制代码
[LSW5]display stp brief
 MSTID  Port                        Role  STP State     Protection
   0    GigabitEthernet0/0/1        ALTE  DISCARDING      NONE
   0    GigabitEthernet0/0/2        ROOT  FORWARDING      NONE
   0    GigabitEthernet0/0/3        DESI  FORWARDING      NONE
[LSW5]int GigabitEthernet 0/0/2
[LSW5-GigabitEthernet0/0/2]shutdown 
[LSW5-GigabitEthernet0/0/2]display stp brief 
 MSTID  Port                        Role  STP State     Protection
   0    GigabitEthernet0/0/1        ROOT  DISCARDING      NONE
   0    GigabitEthernet0/0/3        DESI  DISCARDING      NONE

直观地看出原本处于阻塞状态(ALTE)的替代端口001变为了根端口,并且状态从DISCARDING 变为FORWARDING,这表明网络已通过备用路径恢复了连通性。

2.3 恢复端口
复制代码
[LSW5-GigabitEthernet0/0/2]undo shutdown 
[LSW5-GigabitEthernet0/0/2]display stp brief	#打开002端口后马上执行
 MSTID  Port                        Role  STP State     Protection
   0    GigabitEthernet0/0/1        ALTE  DISCARDING      NONE
   0    GigabitEthernet0/0/2        ROOT  DISCARDING      NONE
   0    GigabitEthernet0/0/3        DESI  DISCARDING      NONE
[LSW5-GigabitEthernet0/0/2]display stp brief	  #等待至少30秒再执行
 MSTID  Port                        Role  STP State     Protection
   0    GigabitEthernet0/0/1        ALTE  DISCARDING      NONE
   0    GigabitEthernet0/0/2        ROOT  FORWARDING      NONE
   0    GigabitEthernet0/0/3        DESI  FORWARDING      NONE

我们发现恢复端口后,STP 再次重新计算,端口状态从丢弃discarding变为转发forwarding需要至少三十秒。这正是STP的特点:收敛速度慢。

2.4 stp协议小结
复制代码
根桥 (Root Bridge):整个生成树的逻辑中心,是树根。所有路径计算的起点。
根端口 (Root Port):非根桥上离根桥"最近"(开销最小)的端口。负责接收来自根桥的数据。
指定端口 (Designated Port):每个物理网段上离根桥"最近"的端口。负责向该网段转发来自根桥的数据。
阻塞端口 (Alternate / Backup Port):被逻辑关闭的备份端口,只监听BPDU,不转发数据。用于故障时快速切换。

端口状态 (802.1D标准)
	Blocking (阻塞):不转发数据,只接收并处理BPDU。监听BPDU以判断网络是否无环。会停留20秒(Max Age)。
	Listening (监听):不转发数据,接收并发送BPDU,在根桥选举和端口角色确定过程中出现。停留15秒(Forward Delay)。
	Learning (学习):不转发数据,但开始学习MAC地址(构建MAC地址表)。停留15秒(Forward Delay)。
	Forwarding (转发):正常转发数据,并持续学习MAC地址。
	Disabled (禁用):被管理员手动关闭或物理链路Down。
收敛时间:从拓扑变化到所有端口最终进入Forwarding或Blocking状态的时间。传统STP需要30-50秒(20秒Max Age + 15秒Listening + 15秒Learning)。

STP的选举过程(四步走):整个过程通过交换一种叫做 BPDU(Bridge Protocol Data Unit,桥协议数据单元) 的报文来完成。
1、选举根桥 (Root Bridge)
目的:确定整个生成树的"树根"。
过程:所有交换机启动时都认为自己是根桥。它们向外发送BPDU,其中包含自己的桥ID(Bridge ID = 优先级 + MAC地址)。桥ID最小的交换机将成为根桥。
结果:全网只有一个根桥。
2、每个非根桥上选举一个根端口 (Root Port)
目的:为每个非根桥找到一条去往根桥最近(开销最小)的路径。这个端口是该交换机去往根桥的"出口"。
过程:非根桥在所有端口上收到的BPDU中,计算到达根桥的路径开销。路径开销最小的端口成为根端口。如果开销相同,则依次比较:对端桥ID -> 对端端口ID。
结果:每个非根桥有且只有一个根端口。
3、每个网段上选举一个指定端口 (Designated Port)
目的:每个物理网段(两台交换机之间的连线)上,只保留一个转发BPDU和用户数据的端口。
过程:在每个网段上,比较两台交换机各自从该端口发送BPDU到达根桥的"总路径开销"。总路径开销小的那一端端口成为该网段的指定端口。如果相同,比较它们各自的桥ID。
结果:根桥上的所有端口通常都是指定端口。每个网段有且只有一个指定端口。
4、阻塞剩余的非根、非指定端口
目的:打破环路。
过程:所有经过前三步仍未被选举为根端口或指定端口的端口,都被逻辑阻塞(Alternate/Backup端口)。这些端口不能转发用户数据,也不能发送BPDU(但会持续监听BPDU,以便在网络故障时恢复)。
一句话总结:选一个根桥,每个桥选一个根端口,每根线选一个指定端口,剩下的全部阻塞。

选举遵循一个"四比较"原则:根桥ID → 根路径开销 → 发送者桥ID → 发送者端口ID,数值越小越优。
桥ID (Bridge ID):由 16位优先级(默认32768)+ 48位MAC地址 组成。优先级可配置(必须是4096的倍数)。先比优先级,再比MAC地址,数值越小越优。
路径开销 (Path Cost):一个端口到达根桥的累计"代价"。带宽越高,开销值越小。例如:10Mbps开销=100,100Mbps=19,1Gbps=4,10Gbps=2。
BPDU (桥协议数据单元):
	配置BPDU:用于生成树计算,由根桥周期性(每2秒)从指定端口发送。
	TCN BPDU:当网络拓扑变化时,由感知到变化的交换机向根桥报告。


STP的不足与改进
由于STP收敛太慢,现代网络基本不再使用原始的802.1D STP,而是使用其快速版本:RSTP (Rapid Spanning Tree Protocol, 802.1w)
3、RSTP协议

RSTP 模式下,收敛速度会很快。RSTP 与 STP 兼容,且在收敛机制上做了大量优化,将收敛时间从数十秒缩短到亚秒级。点击ensp的菜单栏红色方块关闭所有交换机后,再点击绿色三角形重启,以清除之前的实验残留。也可通过命令行重启reset saved-configuration reboot 。

3.1 基础配置和启用rstp
复制代码
<Huawei>system-view 
[Huawei]un in en
[Huawei]sysname LSW1
[LSW1]stp enable 
[LSW1]stp mode rstp #华为默认使用mstp协议,因此必须手动切换为rstp

<Huawei>system-view 
[Huawei]un in en
[Huawei]sysname LSW2
[LSW2]stp enable 
[LSW2]stp mode rstp

<Huawei>system-view 
[Huawei]un in en
[Huawei]sysname LSW3
[LSW3]stp enable 
[LSW3]stp mode rstp 

<Huawei>system-view 
[Huawei]un in en
[Huawei]sysname LSW4
[LSW4]stp enable 
[LSW4]stp mode rstp 

<Huawei>system-view 
[Huawei]un in en
[Huawei]sysname LSW5
[LSW5]stp enable 
[LSW5]stp mode rstp 
3.2 查看rstp初始状态
复制代码
[LSW1]display stp brief 
 MSTID  Port                        Role  STP State     Protection
   0    GigabitEthernet0/0/1        DESI  FORWARDING      NONE
   0    GigabitEthernet0/0/2        ROOT  FORWARDING      NONE

[LSW2]display stp brief 
 MSTID  Port                        Role  STP State     Protection
   0    GigabitEthernet0/0/1        ROOT  FORWARDING      NONE
   0    GigabitEthernet0/0/2        ALTE  DISCARDING      NONE

[LSW3]display stp brief 
 MSTID  Port                        Role  STP State     Protection
   0    GigabitEthernet0/0/1        DESI  FORWARDING      NONE
   0    GigabitEthernet0/0/2        DESI  FORWARDING      NONE

[LSW4]display stp brief 
 MSTID  Port                        Role  STP State     Protection
   0    GigabitEthernet0/0/1        DESI  FORWARDING      NONE
   0    GigabitEthernet0/0/2        ROOT  FORWARDING      NONE
   0    GigabitEthernet0/0/3        DESI  FORWARDING      NONE
   0    GigabitEthernet0/0/4        DESI  FORWARDING      NONE

[LSW5]display stp brief 
 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  DISCARDING      NONE

根桥是LSW3。

3.3 模拟链路故障和恢复

(1)由于rstp收敛速度过快,为捕捉这一瞬间,先在pc1命令行中持续的ping pc3(ping 192.168.1.3 -t)

为何不用pc1 ping pc2测试呢?因为pc1和pc2都连接在LSW4上,在交换机内部转发,因此看不到。

(2)在pc1和pc3通信链路之间的非根桥上(如LSW5)处于转发状态的根端口001关闭,再检查当前状态。

复制代码
[LSW5]display stp brief 
 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  DISCARDING      NONE
[LSW5]int GigabitEthernet 0/0/1
[LSW5-GigabitEthernet0/0/1]shutdown 
[LSW5-GigabitEthernet0/0/1]display stp brief
 MSTID  Port                        Role  STP State     Protection
   0    GigabitEthernet0/0/2        ROOT  FORWARDING      NONE
   0    GigabitEthernet0/0/3        DESI  DISCARDING      NONE
[LSW5-GigabitEthernet0/0/1]undo shutdown 
[LSW5-GigabitEthernet0/0/1]display stp brief
 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

很直观的看出关闭根端口001的瞬间,新的根端口就变成了002。再打开根端口重新变为001。收敛速度极快。

既然RSTP速度这么快,解决了STP的不足,那么它有没有缺点呢?有的兄弟,包有的:RSTP(以及传统STP)不感知VLAN ,它把整个物理网络当作一个扁平的广播域来处理。整个交换网络(所有VLAN)只计算出一棵无环的生成树。导致两个严重问题:

  1. 无法实现负载均衡
    对于一个物理拓扑,RSTP会阻塞某些冗余链路。所有VLAN的流量都只能走"唯一"的那条转发路径 (即生成树留下的路径),其他链路被完全闲置。
    例子:两条1Gbps上行链路,RSTP只会用一条,另一条永久阻塞,浪费50%带宽。
  2. 次优路径问题
    在某些拓扑中,生成树选出的路径对某些VLAN可能是绕远的。由于所有VLAN共享同一棵树,无法为不同的VLAN选择更优的路径。

在Trunk链路承载多个VLAN的现代网络中,这种"一刀切"的模式效率低下。

3.4 rstp协议小结:
复制代码
  RSTP(802.1w)的改进方面
  1:减少端口状态(合并角色与状态),不需要区分"阻塞/监听"等低效状态,角色决定行为。
  - 端口角色:根端口、指定端口、替代端口(Alternate)(替代根端口)、备份端口(Backup)。
  - 端口状态简化为3种:
    - Discarding(丢弃) → 对应STP的禁用/阻塞/监听(不学习MAC,不转发)。
    - Learning(学习) → 同STP的学习。
    - Forwarding(转发) → 同STP的转发。

  2:P/A 机制(Proposal/Agreement)------指定端口从 Discarding → Forwarding 只需 两次握手,不再等待 Forward Delay。
  - 场景:两个交换机之间的点到点全双工链路。
  - 过程(前面已详述):上游提议 → 下游同步并阻塞其它非边缘端口 → 下游同意 → 上游立即转发。
  - 收敛时间:通常 < 1 秒(甚至毫秒级)。

  3:更快的链路故障检测
  - STP:依赖老化计时器(20秒)发现链路故障。
  - RSTP:
    - 使用 3次连续Hello包丢失(默认3×2秒=6秒)判定邻居失效。
    - 同时可以利用底层物理信号(如链路down)立即触发重新计算(几毫秒)。

  4:边缘端口(Edge Port)概念:连接终端(PC、服务器)而非交换机的端口。
  - 行为:边缘端口一旦UP,跳过 P/A 过程,直接进入 Forwarding。
  - 保护:如果边缘端口收到 BPDU,则自动转为普通 STP 端口(防止环路)。
  - 效果:终端插拔无需任何 STP 延迟,即插即用。

  5:拓扑变更(TC)机制优化
  - STP:侦测到拓扑变化后,先通知根桥,根桥再向全网泛洪,需要等待 Max Age + Forward Delay。
  - RSTP:检测变化的交换机直接向全网发送 TC 报文,无需等待根桥通知。
  - MAC表老化:收到 TC 报文后,交换机仅将 MAC 表老化时间从300秒缩短为 Forward Delay(15秒),而不是像 STP 那样清空(避免广播风暴)。

  6:UplinkFast / BackboneFast 功能内置
  - STP 时代这些是专有扩展功能(如 Cisco 的 UplinkFast 用于上行链路快速切换)。
  - RSTP 将这些机制标准化并内置,使替代端口可以快速切换到根端口角色。

  7:BPDU 格式与处理增强
  - Version:从 STP 的 0 改为 2。
  - Flags 字段更丰富:使用更多比特位表示 Proposal、Agreement、TC、TCA 等。
  - BPDU 发送:RSTP 中所有交换机(不仅仅是根桥)都可以主动发送 BPDU(每 Hello Time 一次),而非像 STP 那样仅根桥主动发送。
4、MSTP协议

对比 MSTP 与传统 STP/RSTP 的差异:在原网络拓扑基础上引入 VLAN 和 MSTP,实现不同 VLAN 的流量沿不同的生成树路径转发,达到链路负载分担。验证 MSTP 的快速收敛和冗余备份能力。

原拓扑不变,PC 的 IP 地址需重新规划,新增 VLAN 划分:

设备 端口 VLAN 备注
PC1 网卡 VLAN 10 192.168.10.1/24
PC2 网卡 VLAN 20 192.168.20.1/24
PC3 网卡 VLAN 10 192.168.10.2/24

注意:PC1 与 PC3 同属 VLAN 10,PC2 单独在 VLAN 20。这样 VLAN 10 和 VLAN 20 需要跨越交换机进行通信,且可以通过 MSTP 为两个 VLAN 选择不同阻塞端口,实现负载分担。交换机之间的链路全部为 Trunk,允许所有 VLAN 通过(默认允许 VLAN 1~4094)。PC 接入端口设为 Access,分别加入对应 VLAN。

MSTP 实例规划

  • 实例 1(Instance 1):映射 VLAN 10
  • 实例 2(Instance 2):映射 VLAN 20
  • 实例 0(默认):映射其余所有 VLAN(含 VLAN 1)

我们希望:

  • 实例 1 的根桥为 LSW2,阻塞 LSW5 的 G0/0/1(或其他端口)。
  • 实例 2 的根桥为 LSW3,阻塞 LSW2 的 G0/0/2(或其他端口)。
    这样 VLAN 10 和 VLAN 20 的流量分别走不同的上行链路,实现负载分担。

4.1 基础配置

(1)清除之前的配置并初始化环境:在 eNSP 中停止所有设备,然后重新启动,或手动重置配置。

(2)交换机命名、关闭信息中心

复制代码
<Huawei>system-view 
[Huawei]un in en
[Huawei]sysname LSW1

<Huawei>system-view 
[Huawei]un in en
[Huawei]sysname LSW2

<Huawei>system-view 
[Huawei]un in en
[Huawei]sysname LSW3

<Huawei>system-view 
[Huawei]un in en
[Huawei]sysname LSW4

<Huawei>system-view 
[Huawei]un in en
[Huawei]sysname LSW5

(3)创建 VLAN 并配置 Access 端口:在 LSW4 和 LSW5 上创建 VLAN 10、20,并将连接 PC 的端口划入相应 VLAN。

复制代码
[LSW4]vlan batch 10 20
[LSW4]interface GigabitEthernet 0/0/3
[LSW4-GigabitEthernet0/0/3]port link-type access
[LSW4-GigabitEthernet0/0/3]port default vlan 10
[LSW4-GigabitEthernet0/0/3]quit
[LSW4]interface GigabitEthernet 0/0/4
[LSW4-GigabitEthernet0/0/4]port link-type access
[LSW4-GigabitEthernet0/0/4]port default vlan 20
[LSW4-GigabitEthernet0/0/4]quit

[LSW5]vlan batch 10 20
[LSW5]interface GigabitEthernet 0/0/3
[LSW5-GigabitEthernet0/0/3]port link-type access
[LSW5-GigabitEthernet0/0/3]port default vlan 10
[LSW5-GigabitEthernet0/0/3]quit

其他交换机(LSW1、LSW2、LSW3)也需要创建 VLAN 10、20,否则后续 Trunk 转发时会丢弃未知 VLAN 的帧。所以:

复制代码
[LSW1]vlan batch 10 20

[LSW2]vlan batch 10 20

[LSW3]vlan batch 10 20

(4) 配置 Trunk 端口

根据连接表,将除了链接pc端口之外的所有交换机之间的互连端口配置为 Trunk 类型,并允许所有 VLAN 通过(默认已经是允许所有,但为深入学习,可练习显式指定。如果已经学过可跳过此步骤):

复制代码
[LSW1]interface GigabitEthernet 0/0/1
[LSW1-GigabitEthernet0/0/1]port link-type trunk
[LSW1-GigabitEthernet0/0/1]port trunk allow-pass vlan all
[LSW1-GigabitEthernet0/0/1]quit
[LSW1]interface GigabitEthernet 0/0/2
[LSW1-GigabitEthernet0/0/2]port link-type trunk
[LSW1-GigabitEthernet0/0/2]port trunk allow-pass vlan all
[LSW1-GigabitEthernet0/0/2]quit

[LSW2]int g0/0/1
[LSW2-GigabitEthernet0/0/1]port link-type trunk 
[LSW2-GigabitEthernet0/0/1]port trunk allow-pass vlan all 
[LSW2-GigabitEthernet0/0/1]q
[LSW2]int g0/0/2
[LSW2-GigabitEthernet0/0/2]port link-type trunk 
[LSW2-GigabitEthernet0/0/2]port trunk allow-pass vlan all 
[LSW2-GigabitEthernet0/0/2]q

[LSW3]int g0/0/1
[LSW3-GigabitEthernet0/0/1]port link-type trunk 
[LSW3-GigabitEthernet0/0/1]port trunk allow-pass vlan all 
[LSW3-GigabitEthernet0/0/1]q
[LSW3]int g0/0/2
[LSW3-GigabitEthernet0/0/2]port link-type trunk 
[LSW3-GigabitEthernet0/0/2]port trunk allow-pass vlan all 
[LSW3-GigabitEthernet0/0/2]q

[LSW4]int g0/0/1
[LSW4-GigabitEthernet0/0/1]port link-type trunk 
[LSW4-GigabitEthernet0/0/1]port trunk allow-pass vlan all 
[LSW4-GigabitEthernet0/0/1]q
[LSW4]int g0/0/2
[LSW4-GigabitEthernet0/0/2]port link-type trunk 
[LSW4-GigabitEthernet0/0/2]port trunk allow-pass vlan all 
[LSW4-GigabitEthernet0/0/2]q

[LSW5]int g0/0/1
[LSW5-GigabitEthernet0/0/1]port link-type trunk 
[LSW5-GigabitEthernet0/0/1]port trunk allow-pass vlan all 
[LSW5-GigabitEthernet0/0/1]q
[LSW5]int g0/0/2
[LSW5-GigabitEthernet0/0/2]port link-type trunk 
[LSW5-GigabitEthernet0/0/2]port trunk allow-pass vlan all 
[LSW5-GigabitEthernet0/0/2]q
4.2 配置 MSTP

华为交换机默认运行 MSTP,且默认存在实例 0。我们需要:

  • 定义相同的 MST 域(域名、修订级别、VLAN-实例映射)
  • 在每台交换机上激活 STP(MSTP)
  • 调整不同实例的优先级以实现期望的根桥

(1)启用 MSTP 并配置域信息(在五台交换机上均需配置)**

复制代码
[LSW1]stp enable
[LSW1]stp mode mstp
[LSW1]stp region-configuration
[LSW1-mst-region]region-name HUAWEI
[LSW1-mst-region]revision-level 1
[LSW1-mst-region]instance 1 vlan 10
[LSW1-mst-region]instance 2 vlan 20
[LSW1-mst-region]active region-configuration
[LSW1-mst-region]quit

[LSW2]stp enable 
[LSW2]stp mode mstp 
[LSW2]stp region-configuration 
[LSW2-mst-region]region-name HUAWEI
[LSW2-mst-region]revision-level 1
[LSW2-mst-region]instance 1 vlan 10
[LSW2-mst-region]instance 2 vlan 20
[LSW2-mst-region]active region-configuration 
[LSW2-mst-region]quit 

[LSW3]stp enable 
[LSW3]stp mode mstp 
[LSW3]stp region-configuration 
[LSW3-mst-region]region-name HUAWEI
[LSW3-mst-region]revision-level 1
[LSW3-mst-region]instance 1 vlan 10	
[LSW3-mst-region]instance 2 vlan 20
[LSW3-mst-region]active region-configuration 
[LSW3-mst-region]q

[LSW4]stp enable 
[LSW4]stp mode mstp 
[LSW4]stp region-configuration 
[LSW4-mst-region]region-name HUAWEI
[LSW4-mst-region]revision-level 1
[LSW4-mst-region]instance 1 vlan 10
[LSW4-mst-region]instance 2 vlan 20
[LSW4-mst-region]active region-configuration 
[LSW4-mst-region]q

[LSW5]stp enable	
[LSW5]stp mode mstp 
[LSW5]stp region-configuration 
[LSW5-mst-region]region-name HUAWEI
[LSW5-mst-region]revision-level 1	
[LSW5-mst-region]instance 1 vlan 10
[LSW5-mst-region]instance 2 vlan 20
[LSW5-mst-region]active region-configuration 
[LSW5-mst-region]q

LSW2、LSW3、LSW4、LSW5 执行完全相同的域配置(region-name、revision-level、实例-VLAN 映射必须一致,否则无法属于同一域,导致多棵树独立计算)。

(2)调整实例优先级以控制根桥

我们希望实例 1 根桥是 LSW2,实例 2 根桥是 LSW3。可以用 stp instance 1 root primary 等命令,但更明确的是直接修改优先级(必须是 4096 的倍数)。

复制代码
[LSW2]stp instance 1 priority 0           # 实例1优先级0,确保成为根桥
[LSW2]stp instance 2 priority 4096        # 实例2优先级稍高,作为备份根桥(可选)

[LSW3]stp instance 2 priority 0           # 实例2优先级0,成为实例2根桥
[LSW3]stp instance 1 priority 4096        # 实例1优先级4096,作为备份根桥

其他交换机保持默认优先级(32768)即可。不设置实例0优先级,根桥将由默认选举产生,可能为 LSW3 或其它。

(3)可选:配置边缘端口

LSW4和LSW5可配置连接 PC 的端口为边缘端口以加速进入转发状态:(不配也不影响,就稍微慢点儿)

复制代码
[LSW4]int g0/0/3
[LSW4-GigabitEthernet0/0/3]stp edged-port enable 
[LSW4-GigabitEthernet0/0/3]q
[LSW4]int g0/0/4
[LSW4-GigabitEthernet0/0/4]stp edged-port enable 
[LSW4-GigabitEthernet0/0/4]q

[LSW5]int g0/0/3
[LSW5-GigabitEthernet0/0/3]stp edged-port enable 
[LSW5-GigabitEthernet0/0/3]q

(4)查看 MSTP 状态,验证负载分担

等待一段时间(秒级)后,分别在交换机上查看各实例的端口角色和状态。

复制代码
[LSW1]display stp instance 1 brief 
 MSTID  Port                        Role  STP State     Protection
   1    GigabitEthernet0/0/1        ROOT  FORWARDING      NONE
   1    GigabitEthernet0/0/2        DESI  FORWARDING      NONE
[LSW1]display stp instance 2 brief
 MSTID  Port                        Role  STP State     Protection
   2    GigabitEthernet0/0/1        DESI  FORWARDING      NONE
   2    GigabitEthernet0/0/2        ROOT  FORWARDING      NONE

[LSW2]display stp instance 1 brief  #实例1的LSW2为根桥(两个端口都是指定端口)
 MSTID  Port                        Role  STP State     Protection
   1    GigabitEthernet0/0/1        DESI  FORWARDING      NONE
   1    GigabitEthernet0/0/2        DESI  FORWARDING      NONE
[LSW2]display stp instance 2 brief 
 MSTID  Port                        Role  STP State     Protection
   2    GigabitEthernet0/0/1        ROOT  FORWARDING      NONE
   2    GigabitEthernet0/0/2        DESI  FORWARDING      NONE

[LSW3]display stp instance 1 brief 
 MSTID  Port                        Role  STP State     Protection
   1    GigabitEthernet0/0/1        ROOT  FORWARDING      NONE
   1    GigabitEthernet0/0/2        DESI  FORWARDING      NONE
[LSW3]display stp instance 2 brief #实例2的LSW3为根桥(两个端口都是指定端口)
 MSTID  Port                        Role  STP State     Protection
   2    GigabitEthernet0/0/1        DESI  FORWARDING      NONE
   2    GigabitEthernet0/0/2        DESI  FORWARDING      NONE

[LSW4]display stp instance 1 brief 
 MSTID  Port                        Role  STP State     Protection
   1    GigabitEthernet0/0/1        ROOT  FORWARDING      NONE
   1    GigabitEthernet0/0/2        DESI  FORWARDING      NONE
   1    GigabitEthernet0/0/3        DESI  FORWARDING      NONE
[LSW4]display  stp instance 2 brief 
 MSTID  Port                        Role  STP State     Protection
   2    GigabitEthernet0/0/1        ALTE  DISCARDING      NONE
   2    GigabitEthernet0/0/2        ROOT  FORWARDING      NONE
   2    GigabitEthernet0/0/4        DESI  FORWARDING      NONE

[LSW5]display stp instance 1 brief 
 MSTID  Port                        Role  STP State     Protection
   1    GigabitEthernet0/0/1        ALTE  DISCARDING      NONE
   1    GigabitEthernet0/0/2        ROOT  FORWARDING      NONE
   1    GigabitEthernet0/0/3        DESI  FORWARDING      NONE
[LSW5]display stp instance 2 brief 
 MSTID  Port                        Role  STP State     Protection
   2    GigabitEthernet0/0/1        ROOT  FORWARDING      NONE
   2    GigabitEthernet0/0/2        DESI  FORWARDING      NONE

由以上结果可知:(分流路径体现):

实例 1:LSW2 为根桥,LSW5 的 G0/0/1被阻塞,VLAN 10 的流量走 LSW1-LSW2-LSW4/LSW5 的路径。

实例 2:LSW3 为根桥,LSW4 的 G0/0/1被阻塞,VLAN 20 的流量走 LSW1-LSW3-LSW5/LSW4 的路径。

同时可以检查每个端口在不同实例下的角色:

text

复制代码
[LSW5]display stp brief

输出会列出每个实例的端口角色,可以看到同一个物理端口在实例 1 和实例 2 中角色不同,这正是负载分担的体现。

验证连通性

  • PC1(VLAN 10)ping PC3(VLAN 10):通。因为它们在一个vlan 10。

  • PC2(VLAN 20)ping PC3(VLAN 10):不通,因为一个在vlan 10,一个在vlan 20。如果配置一个三层路由倒是可以跨网段传输,但该拓扑图中没有。

  • PC1 ping PC2 :不通。因为即使它们同属 LSW4,但不同 VLAN,二层隔离。

4.3 模拟链路故障和恢复

通过模拟故障和恢复观察 MSTP 快速收敛:先用 PC1 持续ping PC3( ping 192.168.10.2 -t),持续观察。

选择一条主路径上的端口,例如 LSW5 在实例 1 中的根端口0/0/2,将其关闭:

复制代码
[LSW5]display stp instance 1 brief 
 MSTID  Port                        Role  STP State     Protection
   1    GigabitEthernet0/0/1        ALTE  DISCARDING      NONE
   1    GigabitEthernet0/0/2        ROOT  FORWARDING      NONE
   1    GigabitEthernet0/0/3        DESI  FORWARDING      NONE
[LSW5]int g0/0/2
[LSW5-GigabitEthernet0/0/2]shutdown #关闭根端口之后备用阻塞端口001马上就变成了根端口
[LSW5-GigabitEthernet0/0/2]display stp instance 1 brief
 MSTID  Port                        Role  STP State     Protection
   1    GigabitEthernet0/0/1        ROOT  FORWARDING      NONE
   1    GigabitEthernet0/0/3        DESI  FORWARDING      NONE

ping 出现短暂丢包后恢复。

复制代码
[LSW5-GigabitEthernet0/0/2]undo shutdown #打开002端口,它又瞬间恢复了转发
[LSW5-GigabitEthernet0/0/2]display stp instance 1 brief
 MSTID  Port                        Role  STP State     Protection
   1    GigabitEthernet0/0/1        ALTE  DISCARDING      NONE
   1    GigabitEthernet0/0/2        ROOT  FORWARDING      NONE
   1    GigabitEthernet0/0/3        DESI  FORWARDING      NONE

执行完上述命令之后的预期是:端口角色复原,实例 1 恢复原始拓扑,收敛同样极快。但实际上:
pc1:
PC>ping 192.168.10.2 -t
From 192.168.10.2: bytes=32 seq=20 ttl=128 time=156 ms
From 192.168.10.2: bytes=32 seq=21 ttl=128 time=188 ms
From 192.168.10.2: bytes=32 seq=22 ttl=128 time=156 ms
From 192.168.10.2: bytes=32 seq=23 ttl=128 time=235 ms
From 192.168.10.2: bytes=32 seq=24 ttl=128 time=172 ms
From 192.168.10.2: bytes=32 seq=25 ttl=128 time=157 ms
From 192.168.10.2: bytes=32 seq=26 ttl=128 time=156 ms
From 192.168.10.2: bytes=32 seq=27 ttl=128 time=172 ms
From 192.168.10.2: bytes=32 seq=28 ttl=128 time=172 ms
From 192.168.10.2: bytes=32 seq=29 ttl=128 time=188 ms
From 192.168.10.2: bytes=32 seq=30 ttl=128 time=157 ms
Request timeout!
Request timeout!
Request timeout!
Request timeout!
Request timeout!
......
一直没恢复通信,可能是软件故障吧。我问ai找了好多办法都没解决。如果哪位兄弟找出问题了,评论一下哦。

也可以对实例 2 的主链路做类似故障模拟,观察冗余切换。我这里暂不做了。感兴趣的自己弄一下。做完实验之后别忘记在<LSW*>save保存实验配置哦。

三、总结

STP 是一个全定时器驱动的协议,过程严谨但收敛极慢(30~50秒),适用于环路避免,但不适用于对中断敏感的网络。

RSTP 通过 P/A 快速协商、边缘端口、主动 BPDU、更快的故障检测和 TC 优化 ,将收敛时间大幅缩短到亚秒级,且完全兼容 STP。

**MSTP(多生成树,802.1s)**解决 RSTP 只能运行单生成树实例(导致负载不均衡)的问题。

对比维度 STP (802.1D) RSTP (802.1w) MSTP (802.1s)
IEEE标准 IEEE 802.1D (1998) IEEE 802.1w (2001) IEEE 802.1s (2002)
收敛时间 30~50秒 华为云 1~2秒 华为云 1~2秒 华为云
端口状态 5种:Disabled/Blocking/Listening/Learning/Forwarding 新华三集团 3种:Discarding/Learning/Forwarding Huawei 3种:Discarding/Learning/Forwarding Huawei
端口角色 根端口、指定端口、阻塞端口 根端口、指定端口、替代端口(Alternate)备份端口(Backup)边缘端口(Edge) 新华三集团 同RSTP,每实例独立计算 阿里云官方网站
生成树实例 单实例(整个网络1棵树) 单实例(整个网络1棵树) 多实例(支持多个MSTI,VLAN可映射)fiberroad.com.cn
VLAN支持 ❌ 不支持按VLAN负载均衡 ❌ 不支持按VLAN负载均衡 ✅ 支持VLAN映射到不同实例,实现负载分担 新华三集团
BPDU版本 Version 0, Type 0x00 Version 2, Type 0x02 Huawei Version 3, Type 0x02 知乎
BPDU发送 仅根桥定期发送 所有交换机主动发送(快速检测故障)51CTO 同RSTP,支持多实例信息携带
快速收敛机制 依赖定时器(Forward Delay 15s×2) P/A机制(Proposal/Agreement握手)51CTO 同RSTP + 实例独立收敛
带宽利用率 低(仅1条活动路径) 中(收敛快,但仍单树) (多实例可实现流量分担)fiberroad.com.cn
管理复杂度 ⭐ 简单 ⭐⭐ 中等 ⭐⭐⭐ 较高(需配置域、实例、VLAN映射)fiberroad.com.cn
兼容性 基础协议 ✅ 向下兼容STP ✅ 兼容STP/RSTP,支持混合组网 新华三集团
典型应用场景 小型网络、拓扑稳定、对收敛不敏感 中型网络、需要快速故障恢复 大型网络、多VLAN、需负载均衡
相关推荐
用户298698530142 小时前
Java 获取 Word 文档中修订记录的实现方法
java·后端
Dicky-_-zhang2 小时前
Redis集群模式详解与实战配置
java·jvm
minji...2 小时前
Linux 网络基础之网络IP层(十)IP 协议,网段划分,IP地址相关问题
linux·运维·服务器·网络·tcp/ip·智能路由器·php
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ2 小时前
获取容器mysql管理员密码命令
数据库·mysql
JAVA学习通2 小时前
《大营销平台系统设计实现》 - 营销服务 第5节:抽奖前置规则过滤
java·数据库·github
斯特凡今天也很帅2 小时前
新建数据源报错No bean named ‘SqlSessionFactorykf‘ available
java·数据库·spring boot·mybatis
带刺的坐椅2 小时前
用 Solon AI 从零构建 MCP 工具服务:让 AI Agent 拥有真实世界的能力
java·ai·solon·mcp·solon-ai
Trouvaille ~2 小时前
【Redis篇】为什么需要 Redis:从单机到分布式的架构演进之路
数据库·redis·分布式·缓存·中间件·架构·后端开发
ID_180079054732 小时前
Taobao & 1688 Product API Technical Overview and JSON Response Reference
数据库