尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

STP生成树协议详解:从广播风暴到MSTP负载均衡实战

发布时间:2026/9/26 17:05:21

资讯中心
01
ARTICLE

STP生成树协议详解:从广播风暴到MSTP负载均衡实战

STP生成树协议详解:从广播风暴到MSTP负载均衡实战
前阵子同事在机房做链路扩容把核心交换机两个口用一根跳线直接连了起来当时STP没启用结果整个办公网用了大概两分钟就彻底断了——广播风暴把全网带宽全部打满SSH连不上去最后只能进机房拔线。做网络的人对这个场景太熟悉了。STPSpanning Tree Protocol生成树协议是所有交换机设备默认要开、也绕不开的基础协议。它不仅解决二层环路问题更是后续RSTP、MSTP负载均衡的根基。这篇文章我尽量用大白话把STP讲透从为什么会有环路、环路有多可怕到根桥选举、端口角色、状态机、计时器再讲到RSTP和PVST的演进最后用一个典型的双核心双汇聚拓扑带你完整配置一遍MSTP并验证负载均衡效果顺便把面试和软考里最常考的STP点也串一遍。1. 为什么需要STP广播风暴与二层环路1.1 网络冗余的必然性没有环路就没有高可用先回答一个最基础的问题网络设备为什么要主动构造环路答案很简单为了让网络在单点故障时还能继续工作。核心交换机到汇聚交换机如果只有一根物理链路这根线断掉下面整个区域全部断网。稍微有点规模的企业网、园区网核心到汇聚基本都是双链路汇聚到接入也经常做双上联。这样物理拓扑上自然就出现了环。但以太网这种二层协议天生不支持环路交换机对广播帧的处理规则是“从除接收端口外的所有端口转发出去”一旦拓扑成环广播帧就会在网络里无限循环越传越多最终演变成广播风暴。所以问题就摆在眼前一方面我们需要物理链路冗余来保证可靠性另一方面二层又不能真环。STP就是来解决这对矛盾的机制。1.2 环路下网络会发生的三件“要命”的事第一件是广播风暴。交换机之间不断互相转发广播帧、未知单播帧每台交换机收到之后继续从所有端口复制转发帧的数量呈指数级增长。带宽被瞬间耗尽交换机CPU占用冲高正常的业务流量根本挤不进去整个网络进入假死状态。我经历过一次当时全网几百台设备从出现症状到完全瘫掉不到三分钟。第二件是MAC地址漂移。交换机通过收到帧的源MAC来学习MAC地址表正常情况下一个MAC地址只应该从一个接口学到。环路存在时同一个源MAC会在短时间内从多个接口被学到导致MAC表条目在两个端口之间来回横跳交换机的转发行为完全乱掉。现在很多厂商的设备会直接上报“MAC address moving”告警这就是排查环路的典型信号。第三件是多帧复制。终端发出一个单播帧因为环路的存在目的交换机可能收到这个帧的多个副本。对普通业务来说重复帧可能没什么影响但对一些相对敏感的协议来说收到重复包会出现异常。比如某些依赖序号机制的协议重复帧会导致报文错乱上层业务直接受影响。这三件事是同时发生的也就是说一旦出现二层环路轻则丢包卡顿重则全网瘫痪。下面用表格梳理一下方便你排查时对照。环路症状具体表现危害等级广播风暴端口流量持续打满CPU冲高网络假死致命MAC地址漂移MAC表反复变化设备上报漂移告警严重多帧复制终端收到重复帧部分协议异常视协议而定1.3 生成树协议的设计思想逻辑阻断物理保留STP的解决思路并不复杂通过一种分布式算法在物理上存在环路的网络中选出一棵唯一的、无环的转发树。换句话说把某些冗余端口在逻辑上直接阻塞掉不让它转发数据帧但保留这条链路作为备份。它不把冗余链路拔掉也不让你手动去封口而是自动决定哪个口该通、哪个口该堵。一旦活跃路径出现故障STP会重新计算拓扑把原本阻塞的端口放开备份链路立刻顶上。网络工程师要做的只是开启协议、做好规划剩下的交给算法。这是STP最核心的价值物理层面保持冗余逻辑层面消除环路故障时自动切换。理解了这个思想后面所有细节都会变得顺理成章。2. STP核心原理根桥选举与端口角色2.1 BPDU交换机之间传递的“投票资料”STP的工作机制依赖于一种叫BPDUBridge Protocol Data Unit桥协议数据单元的报文交换机通过它来交换生成树信息。BPDU里包含几个关键字段Root ID根桥标识、Root Path Cost到根桥的路径开销、Bridge ID发送者的桥标识、Port ID发送端口标识。每台交换机默认每2秒从所有端口发送一次BPDUHello Time同时接收邻居发来的BPDU然后根据这些信息决定自己的角色。整个过程非常像一个分布式选举全网设备一起投票选出谁是老大然后其他人围绕老大确定自己的位置。2.2 根桥是怎么选出来的优先级优先MAC从小先选根桥。每台交换机都有一个桥IDBridge ID它由两部分组成桥优先级默认32768和交换机MAC地址。比较规则是优先级数值小的优先如果优先级相同再看MAC地址MAC地址小的当选。需要留意的是优先级字段的范围是0到65535但实际配置时必须按4096的步长来设置。比如可以设成0、4096、8192、32768、61440等不能随便填一个数字。所以如果你看到某台交换机优先级是4096它的优先级数值明显小于默认的32768在选举中就更占优势。网络工程师配置根桥通常不会手写优先级而是直接用类似root primary或root secondary这样的命令设备会自动把优先级调整为比当前根桥更低的值。这样既不容易配错也让根桥位置更可控。2.3 端口角色的选举逻辑中间过程才是重点选完根桥之后每台非根桥交换机要确定自己每个端口在生成树中的角色。端口角色总共三类根端口Root Port、指定端口Designated Port、阻塞端口Blocking Port。根端口是每台非根桥上距离根桥“最近”的那个端口它负责接收来自根桥方向的BPDU正常状态下是转发状态。指定端口是每个网段上距离根桥最近的交换机上的端口同样处于转发状态。阻塞端口则是被逻辑关闭的端口不收发数据帧只持续监听BPDU一旦网络变化随时准备替换。选举的比较顺序可以用一句话记先看根桥ID再看根路径开销然后看发送者桥ID接着看发送者端口ID最后看接收者端口ID。之前有人问为什么要搞这么多比较项核心原因是网络里的情况千差万别必须有一条唯一确定的规则来保证所有设备算出来的结果一致否则各算各的网络就乱了。2.4 端口状态机与计时器50秒收敛是怎么来的经典STP的端口有5种状态状态行为持续时长Disabled关闭不参与任何逻辑—Blocking只接收BPDU不转发数据不收发MAC学习不确定Listening接收/发送BPDU计算拓扑不学习MAC不转发15秒Learning开始学习MAC地址仍不转发数据15秒Forwarding正常转发数据帧—有四个计时器必须背下来Hello Time默认2秒Forward Delay默认15秒Max Age默认20秒还有延时老化相关的配置。当一个阻塞端口需要转为转发状态时经典STP的过程是先等Max Age计时器到期20秒再经过Listening阶段15秒然后Learning阶段15秒总共最长要50秒。这就是经典STP被诟病最多的痛点收敛时间太长现代网络完全等不起50秒。2.5 手动推演一遍三台交换机的环形拓扑光看规则不推演等于白看。咱们花几分钟手推一个案例。假设三台交换机环形连接SW1、SW2、SW3两两之间都有一条线。配置如下SW1的桥优先级设为4096SW2和SW3保持默认32768三者MAC地址分别是AAAA-AAAA-AAAA、BBBB-BBBB-BBBB、CCCC-CCCC-CCCC。第一步选根桥。SW1优先级4096最小直接当选根桥。SW2和SW3优先级相同比较MACBBBB开头的小于CCCC开头但根桥已经定了这个比较不影响根桥结果。第二步SW2和SW3分别计算自己的根端口。SW2有两个邻居方向到SW1这条链路开销小、到SW3这条链路开销大显然通过SW1方向的端口到根桥路径开销最小所以SW2连接SW1的口成为根端口。SW3同理连接SW1的口是根端口。第三步最难判断SW2和SW3之间那条链路上谁是指定端口、谁被阻塞。这条链路两端分别收到对方的BPDU比较逻辑是两端都是非根桥根路径开销相同都是各自的根端口开销假设链路带宽相同开销也就相同接着比较发送者桥ID。SW2的桥ID比SW3小所以SW2这一端的端口作为指定端口SW3那一端就被阻塞。这就是手推生成树的完整过程。你可以在纸上把拓扑画出来把每条链路标上开销推一遍之后对STP的理解会有一个质的提升。后面学习RSTP和MSTP你会发现核心选举逻辑完全没有变变的只是收敛速度和扩展性。3. 从STP到RSTP、PVST收敛速度的演进3.1 50秒收敛在今天的网络里根本等不起经典STP看起来逻辑严谨但实际部署中最大的问题是收敛太慢。想象一个场景接入交换机重启链路断开到重新恢复转发可能要等50秒。对于内网视频会议、VoIP语音、在线交易这类业务50秒的中断用户完全无法接受。而且经典STP还有另一个问题端口角色和状态绑定得比较死所有端口状态变化都要按部就班地走流程没有快速协商的机制。网络规模稍微大一点拓扑变化频繁一点整个STP域就像一台老式机器喘口气都要半天。3.2 RSTP解决收敛问题的四个关键改进RSTPRapid Spanning Tree Protocol快速生成树协议在IEEE 802.1w中定义最大的特点是把收敛时间从50秒压缩到秒级甚至毫秒级。它做了几件关键的事。第一端口角色细化了增加Alternate端口根端口的备份和Backup端口指定端口的备份备份角色可以在主端口故障时立刻接替不用重新计算拓扑。第二引入Proposal/Agreement提议/同意机制。链路建立后两个指定端口之间可以直接协商下游端口发送Proposal上游端口回复Agreement随后端口直接进入转发状态跳过了漫长的Listening和Learning等待。这也是RSTP收敛快的核心原因。第三边缘端口Edge Port概念。连接PC、终端、服务器的接入端口不会收到BPDU直接置为Forwarding不参与生成树计算也不经历状态迁移。这个设计让接入侧几乎零等待。第四状态机从5个精简成3个Discarding丢弃、Learning学习、Forwarding转发。Blocking、Disabled、Listening都被归入Discarding。现在几乎所有厂商的交换机都默认启用RSTP或MSTP很少有人用回经典STP。但你要知道MSTP是在RSTP基础上扩展出来的所以RSTP的根本原理吃透了MSTP自然就能理解。3.3 思科PVST/PVST每个VLAN一棵树思科早期搞了一套PVSTPer-VLAN Spanning Tree每VLAN生成树后来改进成PVST。它的思路很大胆不为全网运行一棵生成树而是每个VLAN各自运行一棵。在Trunk链路上不同VLAN可以在不同的物理端口上阻塞。比如VLAN 10在这根链路上是转发状态在另一根是阻塞状态VLAN 20反过来。这样既消除了环路又实现了基于VLAN的负载均衡一个VLAN的流量走这条线另一个VLAN走那条线。PVST的代价是要为每个VLAN单独发送和接收BPDUVLAN数量一多CPU和带宽开销明显上升。而且PVST是思科私有协议跨厂商互通时兼容性很麻烦。所以在多厂商混存的网络里它并不是一个理想的长期方案。3.4 四种生成树模式对比协议标准收敛速度负载均衡适用场景STPIEEE 802.1D最慢约50秒不支持老设备、特殊合规场景RSTPIEEE 802.1w快秒级不支持中小网络无多VLAN分流需求PVST思科私有较快支持按VLAN纯思科小型网络MSTPIEEE 802.1s快秒级支持按实例中大型网络、多厂商混存从上表能看到MSTP既继承了RSTP的快速收敛又提供了类似PVST的负载均衡能力而且是国际标准跨厂商互通没有问题。这也是为什么现在中大规模园区网的主流方案都指向MSTP。4. MSTP多实例生成树原理与设计思路4.1 为什么需要MSTPPVST的负载均衡思路虽然好但存在两个问题一是私有协议跨厂商支持不友好二是每VLAN一棵树VLAN一多资源占用厉害。而经典RSTP虽然收敛快却不支持按VLAN分流所有VLAN共用一棵树大量冗余链路处于空闲状态浪费了双上联的价值。MSTPMultiple Spanning Tree Protocol多生成树协议在IEEE 802.1s中定义它的核心思路是把多个VLAN映射到同一个生成树实例Instance每个实例独立运行一棵生成树。配置好实例与VLAN的映射后不同实例之间可以有不同的路径流量就能在多条链路上均衡分布。用大白话说MSTP把物理拓扑切分成多个“虚拟拓扑”每个虚拟拓扑负责一批VLAN各走各的路互不干扰。4.2 MST域、IST、CIST这些概念得捋清楚如果说MSTP的实例是“同一组交换机内部”的生成树那域Region就是这些交换机的边界。MST域要求一组交换机满足三个条件完全一致域名Region Name、修订级别Revision Level、VLAN与实例的映射表。只要有一项不一致交换机就会认为自己属于不同的域跨域的生成树计算就按照另一种规则来负载均衡很容易失效。在域内每一个生成树实例叫做ISTInternal Spanning Tree其中实例0比较特殊它是域内默认的生成树实例所有没有映射到具体实例的VLAN都归它管。跨域之间各MST域的IST再由CISTCommon and Internal Spanning Tree公共与内部生成树串起来形成一个全网统一的生成树视图。简单类比一个MST域就像一家公司公司内部各部门实例各算各的账公司之间通过总部实例0/CIST统一协调。你不需要特别深入CIST的细节但要知道VLAN没被映射到实例时全都会落到实例0这在设计时必须留意。4.3 实例与VLAN的映射负载均衡的关键假设有两个实例实例1映射VLAN 10-20实例2映射VLAN 30-40。在配置里把实例1的根桥设为核心交换机A实例2的根桥设为核心交换机B。这样VLAN 10-20的流量上行时以A为根走A一侧的链路主转发VLAN 30-40以B为根走B一侧的链路主转发。两端互为备份一旦某台核心故障对应实例会自动切换到另一台既实现了负载分担又保证了可靠性。设计MSTP负载均衡时通常遵循几个原则不同实例的根桥尽量分布在不同的核心/汇聚设备上避免所有实例都挤在同一台设备上。业务VLAN按照上行链路归属划分实例例如业务1走汇聚A业务2走汇聚B。实例数量不要过多一般2到4个足够。实例越多BPDU开销和运维复杂度越高。未分配的VLAN必然掉进实例0建议把实例0的根桥固定到性能最好的一台设备上。4.4 配置MSTP最容易被忽略的三个点第一域配置必须严格一致一个字母一个数字都不能差。很多故障表面上是流量不通排到最后发现是两台交换机的Region Name不一致把自己划到了不同域。第二配置完域配置要执行激活命令华为设备是active region-configuration思科设备需要输入exit离开配置模式让配置生效。光配不激活配置就是一张废纸这个坑我见过不止一次。第三所有VLAN的归属要心里有数。默认情况下所有VLAN都映射到实例0如果你把VLAN 99忘了映射它就留在实例0里走根桥为A的路径。万一你本来想让VLAN 99走B结果流量路径和你预期不一样排查起来会很费劲。5. 双核心双汇聚MSTP负载均衡实战配置5.1 实战拓扑与负载均衡目标假设一个典型的园区网两台核心交换机SW1、SW2两台汇聚交换机SW3、SW4下面接入交换机多台。核心之间互联核心与汇聚之间各连两条线汇聚间也有互联物理上存在多个环路。业务划分VLAN 10是办公业务VLAN 20是监控业务。目标是VLAN 10上行主走SW1VLAN 20上行主走SW2两条路径互为备份并且链路故障时能快速切换。拓扑结构可以用下面的文字简图表示[SW1] -------- [SW2] | \ / | | \ / | [SW3] -------- [SW4] | ... | [接入交换机] [接入交换机]5.2 华为设备配置从模式切换到域配置到根桥设置华为设备的MSTP配置分三步切换模式、配置域、设置根桥。第一步在每台交换机上把STP模式改成MSTPstp mode mstp第二步在每台交换机上配置域和实例映射这一步最关键所有交换机需要保持一致。以核心SW1为例stp region-configuration region-name HX revision-level 1 instance 1 vlan 10 instance 2 vlan 20 active region-configurationSW2、SW3、SW4的配置除了实例映射之外完全相同实际生产环境中建议把域配置做成模板统一下发避免手工漏配。第三步设置根桥和备份根桥。SW1上执行stp instance 1 root primary stp instance 2 root secondarySW2上执行stp instance 1 root secondary stp instance 2 root primary这样实例1的根是SW1实例2的根是SW2两个实例的主路径正好分开。汇聚和接入交换机不需要设置根桥它们只需要参与MSTP计算自动跟随根桥方向生成无环拓扑。5.3 思科设备配置对照思科设备的逻辑和华为相同只是命令风格不同。核心SW1上配置示例spanning-tree mode mst spanning-tree mst configuration name HX revision 1 instance 1 vlan 10 instance 2 vlan 20 exit spanning-tree mst 1 root primary spanning-tree mst 2 root secondary核心SW2上把root primary和root secondary对调即可。这里spanning-tree mst 1 root primary的作用等同于华为的stp instance 1 root primary设备会自动调整实例的桥优先级到当前网络最低值。5.4 用命令验证负载均衡是否生效配置不是写完就结束了必须验证流量走向是否真的符合预期。华为设备验证实例1的生成树情况display stp instance 1 brief关注输出中端口的状态和角色确认该实例在SW1与SW3之间的链路是转发状态SW2与SW3之间的链路是阻塞状态。查看实例2display stp instance 2 brief预期结果与实例1相反SW2与SW3之间转发SW1与SW3之间阻塞。华为还支持查看MSTP域配置和所有实例总览display stp region-configuration display stp instance brief思科设备对应验证命令是show spanning-tree mst 1 show spanning-tree mst 2 show spanning-tree mst configuration如果验证发现VLAN 10和VLAN 20走的都是同一台核心多半是域配置不一致或者实例映射漏配优先检查每台设备的Region Name、Revision Level和映射表。6. 常见故障排查与笔试面试考点6.1 MSTP常见故障与解决速查表我在实际维护中积累了一些高频故障整理成表格方便你直接对照。故障现象可能原因排查命令解决思路网络周期性全断STP未启用或模式不一致display stp mode统一启用MSTP/RSTP流量走向不符合预期域配置不一致或实例映射漏配display stp region-configuration逐台比对域配置修正映射MAC漂移告警刷屏环路未被阻断display mac-address moving检查物理链路确认STP端口角色收敛速度慢端口未配置边缘端口display stp interface brief给接入端口配stp edged-port enable根桥被非法设备抢占设备下发BPDUdisplay stp root在接入端口启用BPDU Guard单向链路导致阻塞端口转发光纤/光模块故障display stp abnormal启用Loop Guard保护6.2 端口保护与防环加固BPDU Guard、Root Guard、Loop Guard生产环境的STP不能只是配个根桥就完了一定要加保护特性。BPDU Guard通常配置在连接终端的边缘端口上。正常情况下接入端口只会转发BPDU给交换机不应该收到任何BPDU。如果某个端口收到BPDU说明有人私接了一台交换机或者配错了线BPDU Guard会让这个端口直接变成err-disable状态防止非法设备参与生成树选举、甚至抢走根桥。Root Guard配置在应该接收上游BPDU的端口上它的作用是保护根桥位置。如果这个端口收到了比当前根桥更优的BPDURoot Guard会把端口置为阻塞状态避免根桥漂移。Loop Guard配置在阻塞端口上防止单向链路故障导致的转发环路。正常情况下阻塞端口只能收到BPDU如果链路出现单向故障收不到BPDU端口可能误判并进入转发状态形成环路。Loop Guard会把这种情况下的端口置为Discarding。这三个保护并不是互斥的可以在不同端口按需部署。不管企业网还是数据中心都建议把BPDU Guard作为接入端口的默认配置项。6.3 软考与面试中最常考的STP问题软考中级网络工程师基本每年都会考STP现象题、计算题都有。常见考点包括STP端口从Blocking到Forwarding经历的状态变迁经典STP约50秒桥优先级默认值、步长4096、取值范围根桥选举比较顺序优先级→MAC地址端口角色选举顺序根桥ID→根路径开销→发送桥ID→发送端口ID→接收端口IDRSTP与STP的差异P/A机制、边缘端口、角色细分MSTP中VLAN映射到实例、域配置一致性的判断。面试环节更偏重理解和实操。我面试网络工程师时习惯让人手推一遍端口角色再问一个MSTP实例根桥设置的问题。能把这个过程讲清楚的人网络基础基本不会差。建议你按本文的推演方法在纸上多画几个拓扑练一练比死记硬背效果强很多。我在实际维护中还总结了一个小心得MSTP配置看上去只有几条命令但真正决定成败的是实例规划。你上连口的带宽、业务VLAN的分布、双核心设备性能都决定了哪些VLAN该进实例1、哪些进实例2、根桥压在哪一侧。配好之后一定要做一次故障演练把主链路的线拔掉看切换时间是否符合预期再插回去看回切是否正常。只有实际断过一次电、拔过一次线你才会真正信任这套冗余设计。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。