十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MSTP多生成树协议详解:从STP/RSTP原理到VLAN负载均衡配置实践

MSTP多生成树协议详解:从STP/RSTP原理到VLAN负载均衡配置实践 聊到二层环路生成树协议几乎是绕不开的话题。STP、RSTP再到MSTP本质都是在做同一件事在网络中选出唯一的无环转发路径把冗余链路从逻辑上“砍掉”。而MSTPMultiple Spanning Tree Protocol多生成树协议和它的老前辈相比最大的不同在于它把VLAN和生成树实例绑定在了一起让不同VLAN可以沿着各自独立的拓扑转发。这篇文章我会从STP/RSTP的痛点讲起把MSTP的Region、CIST、MSTI这些概念拆开揉碎再给一套可以直接照抄的配置流程以及我在现网里踩过的坑。适合正在学数通认证、刚接手园区网运维、或者打算在核心汇聚层做链路负载分担的同学参考。1. MSTP到底是什么从STP/RSTP的痛点说起1.1 单生成树时代的老问题最早的STPSpanning Tree ProtocolIEEE 802.1D诞生于交换机还不太聪明的年代目的只有一个防止二层环路。它的做法很朴素整个交换网络里跑一棵生成树所有VLAN共享这一个逻辑拓扑。阻塞哪个端口、转发哪个端口是由这棵树统一决定的。听起来没问题但实际用起来就很憋屈。比如一个双核心园区网两台核心交换机之间有一条链路下面每台接入交换机又有两条上联STP为了保证无环只能保留一条主用路径另一条永远处于Blocking状态。也就是说你花双份钱布设的冗余链路平时只能当“备胎”躺着流量根本不会走它更别提按VLAN把不同业务分摊到两条链路上。而且STP的收敛速度是出了名的慢端口从Blocking到Forwarding要经过Listening、Learning默认情况下最长要等30到50秒。对于现在的办公网、生产网来说一台接入交换机重启就能造成近一分钟的断网这是很难接受的。所以后来出现了RSTP。1.2 RSTP快是快了但拓扑还是“一锅端”RSTPRapid Spanning Tree ProtocolIEEE 802.1w解决了收敛速度的问题。它通过Proposal/Agreement握手机制让指定端口在协商完成后直接进入Forwarding状态收敛时间从几十秒压缩到一两秒甚至亚秒级。现在的交换机默认跑RSTP基本感觉不到拓扑变化带来的延迟。但RSTP依然是一棵生成树跑所有VLAN。也就是说它只是“跑得快一点”的STP并没有解决“链路利用率低、无法负载均衡”的核心痛点。在一个有多VLAN、多业务、多条冗余链路的网络里RSTP依然会让大量链路闲置而且某个VLAN出现广播风暴或者拓扑变化会波及整棵生成树影响所有VLAN。1.3 MSTP的核心思路让VLAN选择自己的路MSTPIEEE 802.1s后来并入802.1Q标准就是在RSTP基础上发展出来的多生成树协议。它的核心思想是把多个VLAN映射到一个生成树实例MSTIMultiple Spanning Tree Instance每个实例独立计算生成树端口在不同实例里的状态可以完全不同。用大白话说RSTP是“全公司只有一条主干道”MSTP则是“给销售部、研发部、财务部分别修了一条路”。VLAN 10走核心AVLAN 20走核心B既隔离了广播域又把两条上行链路都用起来了带宽不浪费。MSTP同时继承了RSTP的高速收敛机制所以在园区网、数据中心接入层、企业网汇聚层里MSTP是相当主流的选择。2. 搞懂这几个MSTP基础概念配置才不会翻车2.1 MST Region不是你想进就能进MSTP把网络分成不同的MST区域MST Region。一个区域内的交换机必须在三个方面配置完全一致Region Name区域名称Revision Level修订级别VLAN到实例的映射表只要有一项不一样相邻交换机就会被划分到不同区域。区域之间走的是区域间协议区域内部才真正跑MSTP实例。很多初次配置MSTP的人最容易在“三件套”上翻车尤其是有多台交换机时一台漏配或写错一个映射整个区域的拓扑计算就会变样。你可以在不同厂商设备上给区域起不同的名字但区域内部命令风格不同最终区域名、修订号、映射表必须一致。这一点在规划时就要统一下发不要指望靠记忆。2.2 IST、CST、CIST与MSTI一个区域一台戏理解MSTP绕不开几个缩写ISTInternal Spanning Tree内部生成树、CSTCommon Spanning Tree公共生成树、CISTCommon and Internal Spanning Tree公共和内部生成树、MSTIMultiple Spanning Tree Instance多生成树实例。可以把CIST理解为整张网络里唯一一棵贯穿所有交换机的树它由两部分组成在MST区域内部的那一段叫IST在区域之间的部分叫CST。区域内的MSTI则是承载具体VLAN转发的“业务树”。所有未被映射到具体实例的VLAN都会乖乖待在实例0里而这个实例0就是CIST在区域内的体现。实例号从1开始计算不同厂商支持的实例数量不同通常16到64个。就绝大多数园区网络来说根本用不了那么多规划3到5个实例已经很够用。2.3 端口角色与状态MSTP在RSTP上加了什么MSTP的端口状态只有三种Discarding、Learning、Forwarding这和RSTP是一致的。注意STP里的Blocking、Listening在RSTP/MSTP里统一归为Discarding所以你在华为设备上看到端口处于Discarding不要慌它就是传统的Blocking状态。端口角色方面MSTP保留了RSTP的根端口、指定端口、Alternate端口、Backup端口另外还增加了一个“Master端口”。Master端口出现在MST区域的边界是区域内部通往CST根的“出口”角色。边界端口Boundary Port也是MSTP特有的概念它连接的是另一个MST区域、RSTP交换机或STP交换机在边界端口上MSTP会把BPDU转成RSTP格式好让外部设备听明白。3. 配置MSTP的完整流程规划先行命令在后3.1 实例规划别给每个VLAN都建一座桥配置MSTP最容易犯的错就是“VLAN多实例也多”。有人一上来就把50个VLAN映射到50个实例结果管理复杂排障的时候眼睛都看花。实例太多不仅浪费资源还可能因为根桥优先级、路径开销配置不一致造成难以预期的阻塞。我自己的习惯是按业务类型或者流量方向把VLAN归并成2到5组每组一个实例。比如生产VLAN组、办公VLAN组、管理VLAN组。每个实例规划一个主根桥和一个备份根桥根桥位置尽量放在核心交换机上。这样每个实例的拓扑都很清晰故障影响范围也小。实例0是留给未映射VLAN的它承载着区域内的IST和区域间的CST通信也必须规划好根桥和备份根桥。很多工程师只管MSTI 1、MSTI 2实例0没人管最后整个网络的基础树结构反而混乱。3.2 Region参数配置三件套必须一模一样华为设备上进入MST域配置模式后设置区域名、修订号和实例映射最后一定记得执行“active region-configuration”否则配置不会生效。Cisco设备则是在全局配置模式下进入spanning-tree mst configuration参数一致即可自动识别Region退出后配置直接生效。两边命令风格有差异但逻辑一致。建议在网络割接时把Region Name、Revision Level、VLAN映射表做成一个标准模板逐台下发、逐台核对。特别是Revision Level很多人忘记修改导致新旧配置混用看着区域名一样实际映射表可能不匹配。3.3 根桥优先级与路径开销决定流量往哪走每个MSTI是一棵独立的树所以每个实例都要单独指定根桥。主根桥的桥优先级最低备份根桥次之。华为设备可以用“stp instance x root primary”和“stp instance x root secondary”来实现也可以直接配置桥优先级值。桥优先级的步长是4096默认32768主根建议设0或4096备份根设4096或8192。路径开销影响的是端口角度的选路。端口上每个实例都可以单独配置cost值默认cost由链路速率决定。如果你希望某个VLAN组一定走某条链路可以在该实例里把对应端口的cost调低。但注意端口cost是“越低越优”不要和直觉搞反。3.4 激活与全局启用两边厂商的差异点华为交换机需要先确定生成树模式是MSTP也就是“stp mode mstp”。然后进入Region配置、配置实例映射、激活。Cisco则是“spanning-tree mode mst”域配置在MST configuration模式下调整。无论哪家配置完都要验证一遍“display stp region-configuration”或“show spanning-tree mst configuration”确认加载的是期望配置。尤其是带外网管不直观的情况下一行配置差异可能导致整网生成树重算影响面非常大。4. 实战双核心接入交换机实现VLAN负载均衡4.1 拓扑与需求让VLAN10和VLAN20各走一边以一个常见的小型园区网为例SW1和SW2是两台核心交换机互相有互联链路SW3是接入交换机通过两条Trunk上行分别连接到SW1和SW2。SW3上跑着VLAN 10和VLAN 20两类业务。目标很简单VLAN 10的流量以SW1为主根VLAN 20的流量以SW2为主根。这样SW3的GE0/0/1链路在实例1中处于转发状态在实例2中可能就是阻塞状态GE0/0/2反过来。两条上联链路都干活互为主备业务不冲突。这个场景是MSTP最典型的应用也最能体现多实例的价值。4.2 核心交换机配置演示华为设备配置如下。SW1作为实例1的主根、实例2的备份根stp mode mstp stp region-configuration region-name LAB revision-level 1 instance 1 vlan 10 instance 2 vlan 20 active region-configuration quit stp instance 1 root primary stp instance 2 root secondarySW2作为实例1的备份根、实例2的主根stp mode mstp stp region-configuration region-name LAB revision-level 1 instance 1 vlan 10 instance 2 vlan 20 active region-configuration quit stp instance 1 root secondary stp instance 2 root primary如果是Cisco设备SW1配置如下spanning-tree mode mst spanning-tree mst configuration name LAB revision 1 instance 1 vlan 10 instance 2 vlan 20 exit spanning-tree mst 1 root primary spanning-tree mst 2 root secondary注意Cisco的MST区域配置是“一次保存”退出时自动生效不需要额外的激活命令。4.3 接入交换机配置与边界端口说明SW3作为接入交换机配置重点在上行链路的Trunk放行和位置。首先要保证上行接口是Trunk并放行VLAN 10、VLAN 20。然后Region参数必须和核心完全一致否则SW3会把自己划到另一个区域里去实例就白配了。华为SW3配置片段stp mode mstp stp region-configuration region-name LAB revision-level 1 instance 1 vlan 10 instance 2 vlan 20 active region-configuration quit interface GigabitEthernet0/0/1 port link-type trunk port trunk allow-pass vlan 10 20 interface GigabitEthernet0/0/2 port link-type trunk port trunk allow-pass vlan 10 20接入交换机下连PC的端口一般配置为边缘端口华为是stp edged-port enableCisco是spanning-tree portfast这样可以加速终端接入同时避免终端设备影响生成树计算。边缘端口如果收到BPDU建议配合BPDU保护把它关掉防止有人私接交换机造成环路。4.4 验证从display输出判断实例是否生效配置完成后最关键的一步是验证每个实例的根桥和端口状态。在SW3上执行display stp instance 1 brief可以看到实例1里GE0/0/1和GE0/0/2的角色。正常情况是GE0/0/1的端口角色为ROOT根端口状态为FORWARDINGGE0/0/2为ALTEAlternate端口状态为DISCARDING。再看实例2display stp instance 2 brief应该反过来GE0/0/2为根端口GE0/0/1为Alternate端口。如果两边都显示根端口或者两边都阻塞就要检查实例映射、Trunk放行和根桥优先级是否配置正确。还可以在核心交换机上查看display stp instance 1里面能看到Root Bridge、Root Port、Bridge ID等关键信息确认SW1是实例1的根桥SW2是实例2的根桥即可。5. 混合组网下的MSTP区域间与RSTP/STP的协同5.1 不同MST区域之间怎么协作实际网络中很少全网都运行MSTP也经常会出现新旧设备、不同厂商设备混跑的情况。当两个MST区域互联时区域间不会直接传递MSTI信息而是通过CIST互通。每个区域在外部看来就像是一台“大交换机”参与了全局的CST计算。区域与区域之间的边界端口上MSTP会发送RSTP格式的BPDU外部设备只能看到RSTP的拓扑看不到区域内部的MSTI细节。所以多个区域组成的网络里区域间链路是无法享受MSTP多实例负载均衡的只有区域内部才能用实例隔离不同VLAN的路径。如果你的网络是多个区域并用建议把区域之间的互联链路做Trunk放行所有必要VLAN同时让CIST的根桥落在核心区域避免边界端口反复震荡。5.2 MSTP和RSTP/STP混跑时的退化逻辑MSTP和RSTP设备互联时MSTP一侧的边界端口会退化成RSTP工作模式整个互连网络在跨区域部分表现为一棵普通的RSTP树。也就是说MSTP的MSTI只在MST区域内部有效一旦跨到RSTP区域VLAN对应的实例信息就带不过去了。和STP设备互联更麻烦MSTP的边界端口会退化成STP模式收敛速度立刻回到30到50秒的老状态。所以规划时要尽量避免STP老设备出现在关键路径上至少要把它们限制在网络的末端接入侧。这里还涉及一个很现实的问题Cisco私有的PVST/rapid-PVST与标准MSTP在互通时也有一些兼容性细节。跨厂商组网时最好把边界区域强制统一成一致的标准模式或者在边界交换机上做协议转换不要指望两边默认就能完美理解对方的BPDU。5.3 Max Hops与区域边界路径开销MSTP区域内部不再使用传统的Max Age来老化BPDU而是用Max Hops机制。每经过一台MSTP交换机BPDU里的剩余跳数减1减到0时这条BPDU就被丢弃配置信息随之老化。默认Max Hops是20对于大多数园区网络来说够用但如果区域内设备跳数很多或者有大量串接设备建议提前算好跳数调大一些。边界端口上还有外部路径开销的概念它是区域作为整体参与CST计算时使用的度量值。这个值在区域边界端口上可以手动调整影响的是本区域到CST根桥的“远近”进而影响区域间流量走向。规划多区域网络时别忘了检查这个参数。6. 常见问题与排查技巧实录6.1 负载均衡没生效流量全走一条链路这是MSTP配置里最高频的问题。现象是配置了实例映射也设置了不同的根桥但接入交换机两条上行链路一条转发、一条阻塞而且所有VLAN都挤在转发链路上。排查顺序先看实例映射表在每台交换机上执行“display stp region-configuration”对比Region Name、Revision Level和实例映射是否完全一致。只要有一台不一致区域就会分裂MSTI就无法全局生效。再看端口是否都放行了对应VLANTrunk接口漏掉一个VLAN该VLAN对应的实例就不会在链路上正常参与计算。还有一种隐蔽情况是不同厂商的MSTP实例映射表在默认状态下会包含VLAN 1如果你的VLAN 1配置没规划好又映射到某个实例也会干扰选路。建议明确把VLAN 1纳入规划或者忽略它的映射统一用实例0承载。6.2 区域被拆开三件套不一致的坑很多现场故障的根因就是区域被拆开。比如接入交换机升级时工程师重新配置了Region Name大小写多了个空格或者Revision Level从1变成了2都会让区域边界发生变化。判断区域是否统一的快速方法是在核心交换机上查看邻居设备的MSTP信息看是否显示同一区域。在华为设备上执行“display stp”,可以看到本机认为的MST Region信息在接口上观察对端BPDU里的Region字段也能看出来。一旦发现区域被拆核对其中的三件套修好映射表拓扑会自动重新收敛。6.3 端口一直discarding边界端口与BPDU保护端口长时间处于Discarding状态看着像生成树在正常阻塞但流量却全断了。这个时候要看端口角色。如果说所有实例里这个端口都是Alternate或Backup那是正常阻塞但如果是根端口或指定端口也卡在Discarding就要考虑是不是边界端口识别出了问题。接入端口配置了边缘端口同时又启用了BPDU保护一旦端口收到BPDU交换机会直接把它shutdown。这个机制在防止私接交换机时很管用但在MSTP边界环境中容易误伤。排查时发现端口被error-down或shutdown可以先确认是不是BPDU保护触发再检查日志确认收到的是哪个设备的BPDU。6.4 常见排查命令速查表现象可能原因建议操作负载均衡不生效流量全走一条链路Region配置不一致或Trunk漏放行VLAN逐台对比stp region-configuration检查Trunk放行区域分裂MSTI信息不通Region Name、Revision Level、VLAN映射表不统一统一三件套配置检查边界端口端口长期Discarding且不是预期阻塞边界端口识别异常、BPDU保护触发查看端口角色、日志确认BPDU保护状态MSTI根桥不是预期的核心设备桥优先级未按实例单独配置修改对应实例的根桥优先级VLAN不通但生成树状态正常对应VLAN未映射到实例或接口未放行检查VLAN映射、Trunk、Access口PVID7. 最后分享一点我的体会MSTP本身的学习曲线不长真正难的是规划。我在现网里见过太多整整一堆MSTP配置最后发现实例映射乱成一团、根桥随意指定出问题时根本不敢动因为一动就是全网拓扑重算。我自己的经验是先画图再配置。哪个VLAN组走哪个实例主根在哪里备份根在哪里哪些端口在哪个实例里阻塞全部写在设计文档里再拿去和现网配置核对。如果条件允许割接前一定先在测试环境里模拟一遍至少把Region参数、实例映射和根桥优先级验证清楚。另外MSTP不是万能的它解决的是二层的环路与负载分担问题如果你追求更快的故障切换、更灵活的业务路径控制后续往往会叠加链路聚合、VXLAN等方案。但无论技术怎么演进MSTP在相当长一段时间里依然是园区网里最稳的一层基础保障。
返回列表