MSTP多生成树协议原理与eNSP实验:域、实例、负载分担与排障
1. 单生成树在多网段场景下的三个硬伤先说一个我见过太多次的场景实验环境里搭了三台交换机接了两个业务网段VLAN 10 和 VLAN 20。所有人第一反应都是开个 STP 不就行了敲完stp enable网络确实通了也没有环路风暴看起来一切正常。可真要问一句VLAN 20 的流量现在走哪条链路大部分人答不上来——因为 STP 压根不关心你是哪个 VLAN它只认整张二层拓扑所有 VLAN 共用同一棵生成树、同一个根桥、同一个阻塞口。这就是 MSTPMultiple Spanning Tree Protocol多生成树协议要解决的原点问题。它不是把一个 STP 做得更快而是把一棵树变成多棵树让不同的 VLAN 走不同的路径。eNSP 里敲几条命令就能看到效果但要真正把 MSTP 用明白得先搞清楚单生成树到底卡在哪。下面这三条是我认为最需要在动手前想清楚的地方。1.1 VLAN 数量上去了链路却一直闲着三层交换机做汇聚典型接法是两台汇聚、多台接入接入到汇聚做双上行。STP 一开双上行里必然有一条被阻塞——注意是一条链路被阻塞而不是某个 VLAN 的一条链路。假设你有 VLAN 10 到 VLAN 50 共 41 个业务网段全部跑在这一对上行链路上那么被阻塞的那条链路对全部 41 个 VLAN 来说都是死的。结果就是一条上行 100% 承载另一条 0% 承载永远在待机。很多人以为这是冗余的代价其实不是。真正的冗余是可以既备份又分担的只是 STP 这种单实例模型做不到。MSTP 把 VLAN 10 绑到实例 1、VLAN 20 绑到实例 2实例 1 的树和实例 2 的树各算各的阻塞口的位置就可以不同两条上行同时跑流量。这是最直观的价值也是绝大多数人学 MSTP 的第一动因。我在实验里做过对比同样的三角拓扑STP 模式下两条汇聚链路的流量比大约是 100:0改成两个 MSTP 实例后变成 60:40 左右——为什么不是 50:50后面讲端口开销和路径选择时会解释这跟链路带宽是否对等有关。1.2 STP 和 RSTP 的阻塞口位置你说了不算STP 选路只依赖三个参数根桥 ID、根路径开销、发送者端口 ID再往后是接收端口 ID。你能干预的只有优先级和端口开销而且这个干预是全 VLAN 生效的。想让 VLAN 10 走左边、VLAN 20 走右边在单实例模型里根本没有对应的旋钮。有人会想到调端口开销但在单实例下你把左边路径开销调小所有 VLAN 全走左边调大所有 VLAN 全走右边。无论怎么调都只能得到一条路全通、另一条全堵的结果。这是模型层面的限制不是配置技巧能绕过去的。MSTP 的旋钮就多了每个实例可以单独设根桥优先级每个实例可以单独设端口开销和端口优先级。换句话说你可以给实例 1 指定甲设备当根给实例 2 指定乙设备当根两张树自然就长成不同形状。这也是实验里最值得反复练的部分——不是记住命令而是能从display stp instance的输出里预判出阻塞口会在哪。1.3 二层环路和广播风暴的真实代价实验室里环路风暴顶多让 eNSP 卡一下现网里几分钟就能把一台接入交换机打死。二层没有 TTL广播帧、未知单播帧、组播帧在环里会无限复制CPU 和上行带宽瞬间打满连管理面都可能被冲垮最后只能去机房拔线。所以生成树不是可选优化是二层网络的保命机制。而 MSTP 在保留这套保命机制的前提下额外给了你按 VLAN 分配路径的能力。这里面有个容易忽视的前提MSTP 掌管的只是无环这件事它不管你三层通不通、VRRP 主备是谁、网关在哪。经常有人配完 MSTP 发现某个 VLAN 不通第一反应是生成树配错了其实生成树只负责别成环通不通是 VLAN 放行、接口类型、网关这些另一套事情。这个边界必须先划清楚否则排障会走很多弯路。2. 把域和实例这两个词掰开揉碎MSTP 的概念比 STP 多不少域、实例、CIST、IST、总根、域边缘端口一堆词砸下来很容易懵。我的经验是别按文档顺序背先抓住一条主线——MSTP 是两层结构域内一张总图域外一张总图实例只在域内有意义。理解这句话剩下的名词都能挂上去。2.1 域Region三要素一模一样才算同一家人MSTP 域是一组交换机的逻辑集合只有配置完全一致的三样东西它们才属于同一个域要素命令说明域名region-name自定义字符串缺省是设备 MAC 地址修订级别revision-level0~65535 的整数缺省 0VLAN 与实例映射instance N vlan ...决定哪个 VLAN 归哪个实例这三样合起来会算出一个配置摘要配置标识随 MST BPDU 一起发出去。邻居收到后一比对摘要对得上才认为同域对不上就当你是外域设备。这里最容易踩的坑是只改了域名没改修订级别或者两边 VLAN 映射顺序不同摘要照样对不上。注意修订级别不是版本号越大越优先它纯粹是标识的一部分。两台设备一个写 1 一个写 0即使域名一样也是两个域。我在实验里吃过这个亏排查了半小时才发现是抄配置时漏了一行。为什么要有域这个概念因为 MSTP 要在整个网络里保证无环而不同管理员可能各自规划实例。如果没有任何边界约束A 区的实例 1 和 B 区的实例 1 混在一起算语义就乱了。域的存在让每个管理域内部自成体系。2.2 实例与 VLAN 的映射一对多不是一对一一个实例可以映射多个 VLAN一个 VLAN 只能映射到一个实例。这个方向性一定要记牢instance 1 vlan 10 30 50是合法的把 VLAN 10 同时写进实例 1 和实例 2 是不合法的设备会直接报错。映射关系决定了哪些 VLAN 共用一棵树。规划的时候要考虑流量模型访问关系密切、流量方向一致的 VLAN 放同一个实例能减少实例数量、降低设备计算开销流量需要走不同路径的 VLAN必须拆到不同实例。另外没有显式映射的 VLAN 默认都归实例 0。实例 0 是特殊的它对应 CIST是所有实例的底座不能删除也不能取消映射关系你只能往里加 VLAN。这一点新手常忽略配完实例 1 和实例 2 之后剩下没管的 VLAN 全在实例 0 里而实例 0 的树又是全网统一算的所以实例 0 的规划同样重要。2.3 CIST、IST、总根域内域外两张图怎么拼起来这几个缩写最容易绕晕用一句话概括IST 是域内的那棵树CST 是域间的那棵树CIST 是把两者拼起来的整棵大树。ISTInternal Spanning Tree域内所有交换机在实例 0 上算出来的树只在本域内有效。CSTCommon Spanning Tree把每个域压缩成一台虚拟设备域与域之间算出来的树。对于外域设备来说你这个域就是一台机器。CISTCommon and Internal Spanning TreeIST 加 CST全网唯一一棵总树它的根叫总根。总根的选举规则是先比 CIST 优先级就是实例 0 的优先级再比 MAC。所以想让某台设备当总根本质上就是把它实例 0 的优先级调到最小。工程上一般把两台核心之一设为总根另一台设为备份总根接入层不参与。还有一个词叫域边缘端口指连接到其他域或者单生成树设备的端口。MSTP 在域边缘端口上要做 MST BPDU 到普通 STP BPDU 的转换这部分行为在纯单域环境里看不到一旦网络里有老设备或者别的厂商设备就会冒出来属于排障时的隐藏考点。2.4 端口角色和状态MSTP 比 RSTP 多出来的那几个状态层面 MSTP 和 RSTP 一样只有三种Discarding、Learning、Forwarding。比 STP 的五种状态Disabled、Blocking、Listening、Learning、Forwarding精简了因为 RSTP/MSTP 把不转发的几种情况统一归到 Discarding。角色层面比 RSTP 多一个概念角色含义根端口Root到本实例根桥开销最小的口指定端口Designated某网段上负责向该网段转发的最优口替代端口Alternate从别的交换机收到的更优 BPDU作为根口的备份备份端口Backup从本机其他口收到的更优 BPDU作为指定口的备份自环场景才出现边缘端口Edge手工指定接终端不参与生成树计算up 即转发Master 端口域边缘端口在 CIST 上充当根口或指定口时的角色实际排障时看display stp brief重点盯两列STP State和Port Role。看到某个口是ALTE且状态DISCARDING就说明它被选为备份路径了这时候要去确认这是不是你想要的结果——是就说明负载分担生效了不是就去查实例根桥优先级。3. eNSP 里把实验环境搭起来理论说再多不如敲一遍。我建议的拓扑是经典三角加接入三台交换机足够看清全部现象多了反而乱。下面这套配置我反复用过可以直接照着敲。3.1 拓扑与规划SW1核心A SW2核心B || || || || SW3 | PC1(VLAN10) / PC2(VLAN20)连接关系链路一端另一端说明L1SW1 GE0/0/1SW2 GE0/0/1核心互联L2SW1 GE0/0/2SW3 GE0/0/1汇聚-接入L3SW2 GE0/0/2SW3 GE0/0/2汇聚-接入L4SW3 GE0/0/3PC1接 VLAN10 终端L5SW3 GE0/0/4PC2接 VLAN20 终端规划要点项目规划实例 0CIST不放业务 VLAN只做总根选举实例 1VLAN 10根桥 SW1备份 SW2实例 2VLAN 20根桥 SW2备份 SW1域名RG-CORE修订级别1为什么不把业务 VLAN 放进实例 0因为实例 0 的树是全 CIST 共用的一旦某个 VLAN 放进去它的路径就绑死在总根身上丧失灵活性。惯例做法是实例 0 只承担总根锚点的角色业务流量全部下放到 MSTI 里。3.2 设备选择与 eNSP 的脾气eNSP 里拉 S5700 就够了三层特性齐全MSTP 命令完整。有几个地方必须提前知道否则会浪费大量时间启动慢。三台交换机加两台 PC点启动后要等指示灯全绿端口才会 up。急着敲display stp brief看到全是 DISCARDING先别慌等 30 秒再说。PC 的配置。eNSP 的 PC 需要手工配 IP 和掩码别忘了配网关。测跨 VLAN 通不通网关必须指向对应 VLANIF 地址。抓包。eNSP 支持在链路上抓包MSTP 的 BPDU 目的 MAC 是01-80-C2-00-00-00在 Wireshark 里过滤stp就能看到协议版本显示 MSTP 或者 RSTP版本 3 就是 MSTP。看 BPDU 内容是理解域参数最直接的方式。保存与回滚。eNSP 的配置保存在工程里建议每一步验证通过后再继续下一步别一口气敲完再测出了问题找不到是哪一步引入的。3.3 域配置的固定套路三台交换机的域配置必须一字不差我习惯按固定顺序敲避免漏项system-view sysname SW1 vlan batch 10 20 stp mode mstp stp region-configuration region-name RG-CORE revision-level 1 instance 1 vlan 10 instance 2 vlan 20 active region-configuration quit顺序为什么重要因为active region-configuration之前的所有修改都是待生效状态设备仍然用旧参数跑。很多人配完域参数不敲这一行然后display stp region-configuration看到的还是默认值怎么排查都找不到原因。提示active命令会让本设备的域参数立即生效可能引起短暂的拓扑震荡。现网操作建议在业务低峰期做或者提前把相关端口 shutdown。三台设备敲完后一定要在三台上都执行display stp region-configuration逐行对比输出。重点看三栏Region Name、Revision Level、Instance Vlans Mapped。三台完全一致才算配好了域。3.4 主备根桥priority 和 root primary 的区别指定根桥有两种写法效果相近但含义不同stp instance 1 priority 0或者stp instance 1 root primarypriority是直接设值取值必须是 4096 的整数倍0、4096、8192……61440数值越小优先级越高。root primary是让设备自动算一个足够小的值通常是 0。备份根用root secondary实际会设成 4096。什么时候用哪个我自己的习惯是明确知道要抢根的设备直接写priority 0一眼能看出意图不确定网络里还有没有别的设备在抢根用root primary让设备自己去算更保险。但要注意root primary并不是永远第一如果网络里已经有另一台设备优先级也是 0那就比 MACMAC 小的赢。所以在现网里核心层两台设备的优先级不要都设 0一台 0 一台 4096结果才是确定的。SW1、SW2、SW3 的完整规划设备实例 0实例 1实例 2SW1主根0主根0备份4096SW2备份4096备份4096主根0SW3不设不设不设接入层 SW3 永远不参与抢根保持默认 32768 就行。4. 让两个实例真的跑出两条路径域配好了、根桥定好了接下来是端口层面的事。这部分看似简单实际上大部分配了不通的问题都出在这里。4.1 Trunk 口放行与端口类型所有互联口都要配成 Trunk 并放行相关 VLANinterface GigabitEthernet 0/0/1 port link-type trunk port trunk allow-pass vlan 10 20 quitSW1、SW2、SW3 之间六条链路端口全部照此处理。这里有个高频问题只放行了 VLAN 10 忘了 VLAN 20结果实例 2 对应的业务不通但生成树计算看起来完全正常——因为 MSTP 算树看的是实例关系和 VLAN 在接口上放不放行是两回事。所以树是好的但业务不通第一个要查的就是 allow-pass。接入 PC 的口配 Access 加边缘端口interface GigabitEthernet 0/0/3 port link-type access port default vlan 10 stp edged-port enable quit interface GigabitEthernet 0/0/4 port link-type access port default vlan 20 stp edged-port enable quit边缘端口的作用是不参与生成树计算、链路 up 后直接进 Forwarding省掉 30 秒左右的收敛时间。接终端的口必须开不然用户每次插网线要等半分钟才能上网。反过来接交换机的口绝对不能开边缘端口一开就可能成环因为边缘端口不处理 BPDU收到也直接丢环路检测机制直接失效。这条规矩我贴在实验室墙上不确定对面是什么就别开。4.2 端口开销为什么不是 50:50MSTP 选路的核心是根路径开销华为默认使用dot1t标准IEEE 802.1t千兆口开销是 20000百兆口是 200000。eNSP 里默认链路是千兆所以 SW3 到 SW1、SW3 到 SW2 的开销一样理论上应该 50:50 分担。实际测下来往往有偏差原因主要有两个一是实际转发的 VLAN 数量和流量大小不对等本来就不是均分二是路径上经过的跳数不同比如 VLAN 10 走 SW3-SW1 两跳VLAN 20 走 SW3-SW2-SW1 三跳开销自然不同。想人为干预路径有两个旋钮interface GigabitEthernet 0/0/1 stp instance 1 cost 20000 stp instance 1 port priority 16 quitcost是端口开销port priority是端口优先级取值 0~240步长 16。优先级只在开销相同时才起作用用来打破平局。经验是能用改实例根桥解决的就不要去改端口开销。改根桥是全局性的、可读性强的改开销是局部的配置多了以后很难维护一两年后接手的人根本看不懂为什么这个口是 20000。有个细节值得注意stp pathcost-standard有三个取值dot1d-1998、dot1t、legacy。华为设备默认dot1t但如果网络里有老设备用的是 802.1D 的计算方式两边开销数值不在一个量级算出来的路径会非常诡异。混合组网时全网统一成本标准是第一步要做的事比调任何参数都重要。4.3 用 display 命令验证阻塞口落在哪配置完了别急着 ping先看拓扑display stp brief输出里会列出每个端口在实例 0、1、2 下的角色和状态。重点关注MSTID这一列0 是 CIST1 和 2 是实例。SW3 上应该能看到类似这样的结果端口MSTID角色状态GE0/0/11ROOTFORWARDINGGE0/0/12ALTEDISCARDINGGE0/0/21ALTEDISCARDINGGE0/0/22ROOTFORWARDING这就是最理想的结果同一个物理口 GE0/0/1 在实例 1 上转发、在实例 2 上阻塞GE0/0/2 正好反过来。两条上行同时被使用各自承载一个实例的流量。想看更细的信息用display stp instance 1 display stp interface GigabitEthernet 0/0/1前者看实例 1 的根桥是谁、本机到根的开销多少、根端口是哪个后者看某个口的详细收发计数BPDU 收发了多少个、有没有错误包。排障时这两个命令配合使用基本能定位 80% 的问题。还有一个容易被忽视的命令display stp topology-change它会显示拓扑变化次数。如果这个数字一直在涨说明网络里有端口反复 up/down可能是线路问题也可能是某个口没配边缘端口导致接终端时抖动。这个指标比看端口状态更早发现问题。4.4 拔线看收敛MSTP 到底快不快验证完静态拓扑一定要做破坏性测试。在 eNSP 里直接删掉 SW3 到 SW1 的链路或者 shutdown 端口然后观察实例 1 的流量在 1 秒内切换到 SW3-SW2-SW1 路径实例 2 的树基本不动因为它的根端口本来就在另一边拓扑变化计数增加但很快稳定。这里能体现出 MSTP 相比 STP 的优势。STP 收敛要经历 Listening 和 Learning 各 15 秒30 秒起步MSTP 基于 RSTP 的 P/A 机制Proposal/Agreement在点对点链路上可以做到秒级甚至亚秒级收敛。但有个前提链路必须是全双工点对点。如果端口是半双工或者对端是共享介质比如接了个 HubP/A 机制会退化成传统的等待计时器收敛时间立刻回到 30 秒。判断端口是不是点对点看display stp interface输出里的Port STP Mode和Cost附近的信息华为设备一般会标注端口的工作模式和双工状态。实验里如果发现收敛慢得离谱先查双工。5. 保护特性让 MSTP 不被意外事件打趴生成树本身是健壮的但它假设所有设备都守规矩。现实是有人把网线插错口、有人把家用路由器接到墙上、有人把上级交换机的配置改错。这些意外会直接把生成树带崩。保护特性就是给这些场景兜底的。5.1 边缘端口 BPDU 保护接终端的口被接了交换机最经典的故障某工位把墙上的网线插到了一个自己带的小交换机上小交换机又接回另一个墙口二层环路形成或者有人把公司另一台交换机的线插到了接入口。这时候如果接入口是边缘端口它会直接把收到的 BPDU 丢掉环路照成不误。BPDU 保护解决这个问题stp bpdu-protection这是全局命令开启后边缘端口一旦收到 BPDU会被立即 shutdown进入 error-down 状态同时上报告警。环路被物理切断网络保住代价是那个口不通了。被关掉的口怎么恢复两种方式# 方式一手工恢复 interface GigabitEthernet 0/0/3 shutdown undo shutdown quit # 方式二配置自动恢复 error-down auto-recovery cause bpdu-protection interval 300自动恢复的间隔建议设长一点比如 300 秒。太短的话问题没处理完口一恢复又被打下去反复抖动。这个配置有个前提需要在全局开启且 error-down 的原因要对应bpdu-protection。5.2 根保护防止下游设备抢根根桥优先级是可以被下游设备改的。如果某台接入交换机被人为把优先级设成了 0它就会抢走根桥位置整张树的形状瞬间重排本来走核心的流量绕到接入层去了延迟飙升、带宽打满。根保护配在面向下游的指定端口上interface GigabitEthernet 0/0/1 stp root-protection quit开启后如果该端口收到了优先级更优的 BPDU也就是有人在抢根端口不会切换成根端口而是直接进入 Discarding 状态相当于把这个捣乱的分支隔离掉。核心设备的下行口全部配上就对了。配的位置很关键配错了不但没保护作用还可能把自己搞挂。原则根保护只配在根桥或者靠近根桥的指定端口上配在根端口上没意义因为根端口本来就该收更优 BPDU。5.3 环路保护与 TC 保护环路保护针对的是单向链路故障。如果链路只有收方向断了发方向还通设备一直收不到 BPDU会以为上游设备挂了把原本阻塞的口打开环路就形成了。interface GigabitEthernet 0/0/1 stp loop-protection quit配在根端口或替代端口上。开启后如果长时间收不到 BPDU端口不会自动放开而是保持阻塞并告警等链路恢复。TC 保护针对的是拓扑变化泛洪。每次拓扑变化设备会发 TC BPDU其他设备收到后清 MAC 表短时间内大量 TC 会让交换机 CPU 飙高。TC 保护限制单位时间内处理 TC 的次数stp tc-protection stp tc-protection threshold 5默认是 10 秒内处理 1 次不同版本略有差异配了阈值之后超出的 TC 会被合并处理避免 CPU 被打满。5.4 保护特性的适用位置对照这几个保护配混了很常见我把它们放在一张表里按配在哪个端口来记特性配置位置解决什么问题全局还是接口边缘端口接终端的 Access 口免 30 秒等待接口BPDU 保护全局开启作用于所有边缘端口边缘口误接交换机全局根保护根桥的下行指定端口下游设备抢根接口环路保护根端口、替代端口单向链路导致误放开接口TC 保护全局TC 报文泛洪打满 CPU全局记住一个口诀边缘防插错、根保护防抢根、环路保护防单向、TC 保护防泛洪。四句话对应四个场景配之前先想清楚是哪个场景。6. 配完不通时我通常按这个顺序查MSTP 的排障有个好处它的问题类型很集中基本跑不出几个固定原因。下面这个顺序是我自己磨合出来的从最常见到最不常见逐层往下推。6.1 第一步三台设备的域参数是否真的一致别信我配了去敲display stp region-configuration三台设备的输出逐行比对。我遇到过的情况包括一台写region-name RG-CORE另一台写region-name rg-core大小写不同摘要就不一样修订级别一台是 1 一台是 0VLAN 映射顺序不同instance 1 vlan 10和instance 1 vlan 10 30虽然可能不摘要冲突但语义已经不同了配了但没敲active region-configuration。域不一致的典型现象是display stp brief里所有端口都显示正常但每个实例的树都是各自为政跨设备看根桥不是同一个甚至出现两台设备都认为自己是根的情况。这时候去display stp instance 1看 CIST Root/ERPC如果每台的根桥 ID 都是自己基本就是域没对齐。6.2 第二步业务 VLAN 在链路上放行了吗display port vlan或者display vlan确认互联口的 Trunk 放行列表里有目标 VLAN。这个错误在复制配置时特别容易发生从 SW1 复制到 SW3SW1 的端口对端是 SW2允许的 VLAN 列表可能和 SW3 需要的不同。现象是 ping 不通但生成树全绿。判断方法很简单在 SW3 上display mac-address vlan 10如果看不到 PC 的 MAC说明 VLAN 10 的流量连 SW3 都没出去如果能看到 MAC 但没有对端的说明是上行链路的问题。6.3 第三步实例的根桥是不是你期望的那台display stp instance 1输出的第一行MSTID 1下面会显示根桥 ID。对比三台设备看是不是都指向同一个根。如果发现某台设备的根桥指向了自己说明它的优先级最低去查它的stp instance 1 priority。还有一种情况优先级配对了但 MAC 地址更小的那台被选成了根。这是正常规则不是故障。如果业务要求某台特定设备当根光调优先级不够还得确认没有第二台设备优先级也是 0。6.4 第四步端口是不是被保护特性误伤配了 BPDU 保护之后如果某台交换机的互联口配成了边缘端口一收 BPDU 就被 shutdown现象是链路起不来display interface brief显示 DOWN 或者 ERROR DOWN。去display error-down recovery看有没有记录有的话undo shutdown恢复然后把stp edged-port enable去掉。根保护配错位置也会出问题。如果把根保护配在了接上游的口上而上游发来的 BPDU 确实更优因为它本来就是根端口会被永久阻塞业务直接断。这时候的现象是链路物理 up但生成树状态永远是 Discarding且日志里有 root-protection 的告警。看到这类告警第一反应就是去核对根保护配在哪个口。6.5 eNSP 特有的几个坑实验环境有些独有的问题列出来省得你重复踩现象原因处理端口全 DISCARDING设备刚启动STP 还在收敛等 30 秒抓不到 BPDU抓包点选错链路选互联链路不是 PC 链路改了配置没生效忘了 active敲active region-configurationPC ping 不通网关PC 没配网关或网关地址错检查 PC 的 IP 配置保存后重开配置丢失没执行 savesave后确认还有一点eNSP 里同一台设备反复 shutdown/undo shutdown 端口有时会残留状态建议改配置后重启设备再验证虽然慢但结果干净。7. 从三台设备推到真实网络实验做完只是起点。真实网络里的 MSTP 要考虑的东西多得多下面这几点是我认为最值得提前想清楚的。7.1 实例数量不是越多越好有人一上来就给每个 VLAN 建一个实例觉得隔离得越细越好。实际上每个实例都要单独算树、单独维护状态机实例越多设备的 CPU 和内存开销越大BPDU 也越多。一般建议实例数量控制在 4 到 16 个之间VLAN 按业务类型分组映射。分组的原则是看流量走向不是看 VLAN ID 连不连号。比如办公区 VLAN 100-120 走一个实例访客 VLAN 200-210 走另一个语音 VLAN 300 单独一个实例语音对时延敏感路径要可控视频监控 VLAN 400 一个实例。按业务分组比按 ID 分组合理得多。7.2 和 VRRP、堆叠的配合二层树和三层网关是两个独立的平面但它们必须对齐。典型错误是实例 1 的根桥是 SW1但 VLAN 10 的 VRRP 主用是 SW2结果二层流量绕到 SW1 再回 SW2 出网关路径白白多了一跳。正确做法是让两者指向同一台设备实例 1 的根桥是 SW1那么 VLAN 10 的 VRRP 主也放在 SW1。这样二层最优路径和三层出口一致流量走最短路径。配置上就是两套命令对齐规划阶段就要定好。堆叠场景更简单两台设备逻辑上是一台MSTP 的根桥选择直接落在堆叠系统上不用考虑双根的问题。但堆叠分裂的时候MSTP 会重新计算这时候 MAD 检测必须先起作用否则分裂后的两台设备各自当根网络直接裂成两个。7.3 排障命令清单最后留一份我自己常用的命令清单出问题时按顺序敲比乱翻文档快display stp # 全局状态确认模式是 MSTP display stp region-configuration # 域参数三机对比 display stp brief # 端口角色状态总览 display stp instance 1 # 单个实例的根桥和开销 display stp interface GigabitEthernet 0/0/1 # 单端口细节 display stp topology-change # 拓扑变化次数 display stp tc-bpdu statistics # TC 收发统计 display error-down recovery # 被保护关掉的端口记录 display mac-address vlan 10 # MAC 学习情况这份清单的价值在于顺序先看全局模式对不对再看域再看端口最后才看细节。顺序反了容易在细节里绕圈。我在实验室带新人的时候通常让他们把上面这套拓扑从零配三遍第一遍照着敲第二遍不看命令敲第三遍故意配错一个域参数然后自己排查出来。第三遍是最有价值的因为真实的故障从来不是按章节出现的它总是藏在某个你没想到的地方——比如忘了 active比如把边缘端口配到了互联口上比如修订级别差了一位。这些东西写不进文档只能自己踩过一遍才记得住。MSTP 的命令不多真正花时间的是理解它为什么这么设计。想明白为什么要分域、为什么实例要映射 VLAN、为什么总根和实例根是两个概念剩下的就是熟练度问题了。