ARTICLE DETAIL

资讯详情

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

STP生成树协议详解:从二层环路到RSTP/MSTP实战配置

STP生成树协议详解:从二层环路到RSTP/MSTP实战配置 1. 二层环路不是理论问题是真实的网络灾难现场先聊一个很多0基础的朋友容易忽略的认知STPSpanning Tree Protocol生成树协议不是为了应付考试才存在的它解决的是一个一旦发生就会让整个局域网瘫痪的真实故障。想象一个最简单的场景公司有一台核心交换机下面接了两台接入交换机SW1和SW2为了冗余你给SW1和SW2之间也拉了一条线让两台接入交换机互为备份。逻辑上很完美任何一条链路断了业务都不受影响。但问题恰恰出在这条冗余链路上。当某一台PC发出一个广播帧比如ARP请求时这个帧会从这个网络的每一个端口转发出去而交换机又不认识这个帧的来源端口于是广播帧会在SW1和SW2之间来回复制、反复转发形成广播风暴。交换机CPU飙升、MAC地址表疯狂抖动、所有终端网络卡死严重时直接让整个二层网络瘫痪。你去现场抓包看到的就是同一个帧以百万级的速率在环路里跑。解决这个问题的核心思路就是在物理上存在环路的网络里逻辑上剪掉一条链路让它变成一棵没有环的树——这就是生成树协议的核心思想。STP通过阻塞某个冗余端口让整个二层网络变成无环的逻辑拓扑同时保留物理链路的冗余能力一旦主链路故障被阻塞的端口能自动切换为转发状态接替业务。这个阻塞—监听—转发的切换过程就是STP所谓的收敛。所以理解STP的关键不是背命令而是搞懂三件事这棵树怎么生成选举机制、每个端口处于什么状态状态机、链路变化后怎么快速恢复收敛机制。下面我按这个逻辑拆开讲。2. STP底层机制拆解BPDU与三场选举2.1 交换机之间怎么聊天BPDU报文STP能让所有交换机协同工作靠的是交换机之间互相发送一种叫BPDUBridge Protocol Data Unit桥协议数据单元的报文。你可以把它理解成交换机之间的竞选宣言每台交换机都在向邻居广播自己的身份信息。BPDU里最重要的字段包括根桥IDRoot ID、根路径开销Root Path Cost、发送者的桥IDBridge ID、发送者的端口IDPort ID、以及计时器参数。这些都是选举的基础。其中桥IDBridge ID由两部分组成优先级2字节 MAC地址6字节。默认优先级是32768取值范围0到61440步长4096。MAC地址越小越优。简单记优先级数值越小越优先优先级相同就比MAC地址越小越优先。我见过很多初学者在这里犯迷糊为什么两台交换机都默认优先级但初始状态都是根桥因为每台交换机刚启动时都认为自己是根桥发出的BPDU里Root ID填的是自己的桥ID。当收到邻居的BPDU时发现对方的桥ID比自己小就更新自己的根桥信息退出竞选。这个过程就是根桥选举。2.2 第一场选举根桥Root Bridge整个生成树里必须有一个中心这个中心就叫根桥。根桥是全网桥ID最小的交换机它负责产生并定时发送BPDU是整个树形结构的根。根桥选举规则先比较优先级数值小的获胜如果优先级相同比较MAC地址MAC地址小的获胜。这里要注意一个细节优先级不是随便配的必须配置为4096的倍数。比如你想让核心交换机当根桥可以设置优先级为4096或0但你不能设成4097否则命令会被设备拒绝。Cisco设备里还有一条更省事的命令spanning-tree vlan 1 root primary它其实是自动把优先级改成24576以下的某个值实际是使该交换机成为根桥所需的值适合不想手动算优先级的场景。选根桥这件事在单生成树实例下只选一次但每个VLAN可能都有不同的根桥——这就是后文要讲的PVST和MSTP的差异点。2.3 第二场选举根端口Root Port根桥选出来之后每台非根桥交换机要选择一个端口作为根端口这个端口是这台交换机到根桥路径开销最小的端口负责接收来自根桥的BPDU是交换机通往根桥的唯一上行口。根端口选举规则按顺序比较到根桥的根路径开销Root Path Cost最小对端交换机的桥ID最小对端的端口ID最小注意第3条里的对端端口ID即对端交换机的端口编号。端口ID由优先级默认128和端口编号组成。比如对端端口GigabitEthernet0/1的端口ID通常是128.1GigabitEthernet0/2是128.2数字小者优先。判断依据排在根路径开销之后也就是说只有当两条路径的开销和对端桥ID都一样时才会用到端口ID比较。在实际组网里根端口通常直观表现为离根桥最近的端口。比如核心交换机根桥下面挂两台接入交换机每台接入交换机都有两条链路到核心双归接入那么每条链路端口到根桥的路径开销就决定了谁是根端口。如果两条链路速率不一样比如1G和10G那看开销值10G开销小根端口自然落在10G链路上。如果两条链路一样就会比对端桥ID和端口ID。2.4 第三场选举指定端口Designated Port每一条链路上都要有一个指定端口这条链路才能转发数据。指定端口是该链路上到根桥路径开销最小的端口负责转发BPDU和业务流量。指定端口的选举规则也是按顺序根路径开销最小所在交换机的桥ID最小端口ID最小怎么理解这个所在交换机的桥ID链路两端各有一个端口比较离根桥更近的那一端。根路径开销小的一侧端口成为指定端口另一侧就被阻塞。如果两端到根桥的开销相等比如两台交换机用等价链路都接到根桥就比较两台交换机的桥ID小的那台的端口成为指定端口。三场选举全部结束后你会得到一个唯一的、无环的逻辑拓扑每个非根桥交换机有一个根端口每条链路上有一个指定端口剩下的既不是根端口也不是指定端口的端口被阻塞Blocking。被阻塞的端口不转发数据帧但会持续监听BPDU目的是在链路变化时立刻感知并参与收敛。2.5 路径开销的度量别把带宽和开销搞反路径开销Cost是STP选路的核心度量。常见标准中端口带宽越高开销数值越小表示路径越优。不同标准下的开销值有差异但考试和日常配置里最常用的是IEEE 802.1D-2004老标准称为802.1t的修正值。这里给你一张最常用的对应表链路带宽802.1D 旧标准802.1D-2004 新标准 / RSTP10 Mbps1002,000,000100 Mbps19200,0001 Gbps420,00010 Gbps22,00040 Gbps1500100 Gbps1200我建议你记住新标准下这三组常用值100M是2000001G是2000010G是2000。因为现在组网基本都是从百兆起步老标准里的19/4/2这些值在老旧教材里还会出现但新实施的标准已经改了。考试题里如果没特别说明一般默认用新标准。根路径开销的计算是从交换机到根桥沿途所有端口开销累加的和。注意只累加入方向的端口开销。这个累加值每台交换机都在自己的BPDU里通告给邻居邻居收到后再加上自己接口的开销得到自己到根桥的开销然后再通告下去。这就是STP信息传播的方式——逐跳累加、逐跳通告。3. STP端口状态机与收敛计时器从阻塞到转发到底经历了什么3.1 五种端口状态别只背名字STP端口状态从开启到能转发数据要经历一个漫长的过程。考试最爱考的就是这五种状态的路径和计时器。直接给结论状态是否转发数据帧是否学习MAC地址是否处理BPDU持续时间Disabled否否否管理性关闭Blocking否否是接收但不发送最多20秒Max AgeListening否否是15秒Forward DelayLearning否是是15秒Forward DelayForwarding是是是持续端口从Blocking到Forwarding路径是Blocking → Listening → Learning → Forwarding。总共需要30秒左右两个Forward Delay。如果是从Disabled直接到Forwarding你可以想象成还需要经过Listening和Learning。这里有个容易混淆的细节Blocking状态下的端口不发送BPDU只被动接收。这么设计的原因是为了防止一个刚启动的交换机发出BPDU干扰已经稳定的拓扑。用大白话说端口在Blocking阶段只是在听确定自己没有造成环路的风险才进入Listening然后才尝试参与转发。Listening阶段端口开始参与BPDU收发但还不学习MAC地址Learning阶段开始学习MAC地址但还不转发业务流量直到Forwarding阶段才真正干活。3.2 三个重要计时器Hello、Max Age、Forward DelaySTP的收敛时间主要由三个计时器控制它们的默认值分别是Hello Time桥 Hello 时间默认2秒。根桥每隔2秒发送一次BPDU全网交换机都以根桥宣称的Hello Time为准。Max Age最大老化时间默认20秒。如果某台交换机连续10个Hello周期20秒没收到根的BPDU就认为根桥不可达链路发生故障开始重新收敛。Forward Delay转发延迟默认15秒。即Listening或Learning各持续的时间总共30秒。所以传统STP在链路故障后理论上最少要经历Max Age的20秒等待 Listening的15秒 Learning的15秒也就是50秒左右的收敛时间。这就是为什么老STP被诟病太慢的核心原因。实际场景里如果下游终端多、MAC表项大收敛时间还可能更久。这三个计时器的关系可以记忆为不等式Max Age ≥ 2 × (Forward Delay - 1)Hello Time越小收敛越快但占用带宽越多。考试里偶尔会问根桥的Hello间隔改了会怎样——答案是全网所有交换机的Hello间隔都会跟随根桥BPDU里的值因为BPDU里携带了这三个计时器参数非根桥收到后会覆盖本地配置。3.3 端口角色和状态千万别混很多0基础学习者把端口角色和端口状态搞混。它们完全是两个维度端口角色根端口Root Port、指定端口Designated Port、阻塞端口Alternate Port/Backup Port解决的是这个端口在树里担任什么职务。端口状态Blocking、Listening、Learning、Forwarding解决的是这个端口当前能不能转发数据。两者组合起来才是一个端口的完整描述。比如根端口通常是Forwarding状态但如果根桥刚刚发生变化根端口也可能处于Learning状态阻塞端口通常是Blocking状态但它的角色是Alternate Port是备用端口一旦根端口失效它可以切换过去。理解了这个你在排障的时候看show spanning-tree输出就不会懵了。Cisco设备里输出会明确告诉你Role角色和State状态华为设备里的display stp brief也会列出对应项。4. RSTP和MSTP升级了什么考点对比与选型逻辑4.1 RSTP把50秒收敛提速到秒级RSTPRapid Spanning Tree Protocol快速生成树协议是IEEE 802.1w标准本质是对STP的改进不是全新的协议。它把传统STP的收敛时间从30~50秒缩短到1秒以内在如今以千兆/万兆为主的组网里RSTP基本是标配。RSTP做了几件关键的事端口状态从5种简化为3种Discarding、Learning、Forwarding。Blocking、Disabled、Listening在RSTP里统一归为Discarding。注意RSTP里没有Listening状态因为它用协商机制替代了被动等待。端口角色扩展为4种根端口、指定端口、Alternate端口根端口/指定端口的备份、Backup端口本交换机上同一链路的备份。新增了P/AProposal/Agreement协商机制两台交换机之间的端口连接后通过发送Proposal和Agreement BPDU快速进入Forwarding状态不再需要等待Forward Delay倒计时。引入了边缘端口Edge Port连接终端的端口可以直接进入Forwarding状态不需要参与STP计算收敛时间几乎为0。但边缘端口一旦收到BPDU就会自动丧失边缘属性变成普通STP端口——这个特性对防环路很有意义。还有一个很多人在实际配置里容易忽略的点RSTP的BPDU是每个Hello时间2秒主动发送的而传统STP只有根桥主动发BPDU非根桥只是转发。这个变化使得RSTP在链路故障时不用等Max Age超时邻居能在3个Hello周期内检测到故障配合P/A协商快速收敛。4.2 MSTP多实例生成树打破PVST的资源浪费RSTP解决了收敛速度问题但传统STP包括RSTP默认整个交换网络只有一棵生成树实例所有VLAN共享这一棵树。这意味着有些链路上某些VLAN的流量明明可以分流却因为全局阻塞而浪费了带宽。PVSTPer VLAN Spanning Tree和PVST是Cisco的私有协议每个VLAN一棵树能实现不同VLAN的负载均衡但缺点是VLAN数量多时BPDU开销和CPU消耗都很大。MSTPMultiple Spanning Tree ProtocolIEEE 802.1s则是把多个VLAN映射到多个生成树实例Instance每个实例单独计算生成树。既实现了负载均衡又不会像PVST那样每个VLAN都跑一棵树开销可控。MSTP最核心的概念是MST域MST Region域内交换机配置的域名称、修订版本号和VLAN实例映射表要完全一致否则会被视为不同域域间使用CST公共生成树互连。部署MSTP时最常见的问题就是域配置不一致导致VLAN映射错乱、流量转发路径不符合预期。4.3 三张表拿捏STP/RSTP/MSTP考点特性STP (802.1D)RSTP (802.1w)MSTP (802.1s)收敛速度30~50秒1秒左右1秒左右实例内端口状态5种3种3种端口角色2种根、指定 阻塞4种根、指定、Alternate、Backup同RSTP生成树实例数11多个按VLAN映射厂商支持IEEE标准IEEE标准IEEE标准VLAN负载均衡不支持不支持支持兼容性兼容RSTP/MSTP兼容STP/MSTP兼容STP/RSTP实际组网中最常见的做法是接入层到核心层之间用RSTP或MSTP核心与汇聚之间用MSTP多个实例实现VLAN负载均衡。单纯用STP的场景在新建网络中已经很少了但老设备、遗留网络里仍然大量存在所以STP的基础原理必须扎实否则升级到RSTP时你会看不懂历史拓扑。4.4 为什么考试和面试盯着STP不放考STP不是在考一个过时的协议而是在考你是否理解二层网络风险的底层逻辑。面试官问STP通常想确认你三件事你是否理解环路产生的条件冗余链路 广播帧 二层无TTL机制。你是否能说清楚STP的选举过程和收敛时间。你是否知道在什么场景下用RSTP/MSTP、怎么配置、怎么排查。第二个问题如果只答阻塞一个端口是不够的。你要能说出根桥选举、根端口选举、指定端口选举三场选举能说出端口状态变化路径能算出收敛时间能把RSTP的P/A协商机制讲明白。这套逻辑是所有网络排障的基础——无论你是做企业网、数据中心还是运营商网络只要涉及二层冗余STP/RSTP/MSTP就是绕不开的底层工程问题。5. 实操配置华为和Cisco的STP/RSTP/MSTP命令5.1 华为VRP平台基础配置华为交换机默认启动了STP多数型号默认是MSTP模式。实际项目里最常见的几组命令如下。查看当前STP状态display stp brief display stp root display stp interface GigabitEthernet 0/0/1配置RSTPsystem-view stp mode rstp stp enable quit配置MSTP并创建实例system-view stp mode mstp stp region-configuration region-name MYREGION revision-level 1 instance 1 vlan 10 20 instance 2 vlan 30 40 active region-configuration quit stp instance 1 root primary stp instance 2 root secondary这里要重点提醒华为的region-configuration下的配置必须执行active region-configuration才会生效而且域名的命名、VLAN映射表、修订级别在三台交换机上必须完全一致。很多人配置完发现MSTP不生效查了一圈才发现域名或映射不一致。配置边缘端口system-view interface GigabitEthernet 0/0/1 stp edged-port enable quit连接PC、打印机、服务器网卡的端口都建议配置成边缘端口这样终端上线不用等30秒避免DHCP获取不到地址的问题。但前提是你确认这个端口永远不会再接交换机否则会形成环路。5.2 CiscoIOS平台基础配置Cisco交换机的STP默认是PVST或PVST这是思科私有协议如果与华为设备对接需要调整模式。基础命令如下。查看STP状态show spanning-tree show spanning-tree vlan 10 show spanning-tree interface gi0/1配置快速生成树RSTPconfigure terminal spanning-tree mode rapid-pvst配置MSTPconfigure terminal spanning-tree mode mst spanning-tree mst configuration name MYREGION revision 1 instance 1 vlan 10,20 instance 2 vlan 30,40 exit spanning-tree mst 1 root primary spanning-tree mst 2 root secondaryCisco里root primary和root secondary是便捷命令它会自动把优先级设为24576/28672如果是默认32768的情况下具体值要看版本。如果手动配置优先级spanning-tree vlan 10 priority 4096或spanning-tree mst 1 priority 4096。配置边缘端口PortFastconfigure terminal interface gi0/1 spanning-tree portfastCisco的PortFast对应华为的edged-port。注意Cisco还有一条spanning-tree bpduguard enable配合PortFast使用在端口收到BPDU时直接关闭端口err-disable这是防止有人私接交换机导致环路的有效手段。华为对应的是stp bpdu-protection需要在全局开启。5.3 配置与验证的一条龙思路配置STP从来不是敲完命令就完事一定要验证。我的习惯是确认根桥是谁display stp root或show spanning-tree root看看根桥MAC/优先级是不是你预期的核心交换机。如果不是检查是不是有更小桥ID的设备参与了选举。确认端口角色display stp brief或show spanning-tree brief重点看有没有意外阻塞的端口。比如你明明想走10G链路结果1G链路是转发状态10G反而是阻塞那就是路径开销配置出了问题。确认边缘端口连接终端的端口是否处于边缘状态没有误判为普通STP端口。确认时钟参数如果设备之间的Hello/Max Age/Forward Delay不一致以根桥的为准但排障时要对比所有设备的实际值。5.4 一个典型的双归接入配置案例企业网的常见拓扑核心交换机两台汇聚/核心层接入交换机多台接入层每个接入交换机两根上联到两台核心。如果使用MSTP建议方案是核心交换机配置为不同实例的根桥实现VLAN间互为主备核心1是实例1的根核心2是实例2的根。接入交换机上联口全部配置为Trunk放通所有业务VLAN。两台核心之间的链路配置为Trunk允许所有VLAN这条链路上每个实例都有指定端口。这样规划后VLAN 10、20的流量从核心1走VLAN 30、40的流量从核心2走两台核心的链路都在转发带宽利用率翻倍。但要注意二层环路必须靠STP阻塞所以接入交换机的两个上联口每个实例一定有一个被阻塞Alternate口。你看到阻塞端口别慌这是正确行为不是故障。5.5 补充维护老设备时STP的兼容性坑我实际碰到过一个场景客户核心是Cisco 4500接入是华为S5700两边对接后二层网络反复震荡交换机日志里全是拓扑变更通知Topology Change Notification。最后排查发现Cisco侧默认跑PVST华为侧跑MSTP两种协议通过不同的BPDU交互互不识别导致各自都以为自己是对的持续发送BPDU干扰对方。解决方案是统一模式要么Cisco侧改成spanning-tree mode mst要么华为侧改成stp mode stp兼容PVST的场景很少基本是改成MSTP。对接前先确认双方STP模式一致这是纯二层互联的老生常谈但就是容易忽略。6. 经典故障与排查思路从症状到根因的全过程6.1 故障一广播风暴但STP明明开了现象整个网络卡死交换机CPU 99%抓包全是同一MAC的广播帧。看到这个现象你第一反应是整个二层环路没有被STP阻断。可能的原因有几类有人私接了一个家用路由器或傻瓜交换机设备之间通过Hub/不支持STP的设备互联导致BPDU被丢弃STP根本收不到对方信息。端口被配置成边缘端口PortFast/edged-port但下面实际接了一个交换机并且形成了环路。边缘端口默认直接转发不参与生成树计算BPDU收到后默认会触发BPDU Guard但如果你没开BPDU Guard端口就会继续转发环路产生。设备上STP被手动关闭了stp disable或no spanning-tree vlan x。这个在排障时要重点检查因为很多人为了让某些终端快速上线图省事关掉了STP。排查链路先看所有交换机的STP状态display stp brief找有没有Forwarding状态的端口在同一台交换机上同时存在且互为冗余再确认有没有端口是边缘端口但下面接了交换机最后抓BPDU看是不是有设备不收BPDU。6.2 故障二终端上网极慢但链路都通现象PC能通但DHCP获取IP很慢首次访问共享文件夹要等30秒以上。大概率是连接终端的端口没配边缘端口。PC插上交换机网线后端口要经历ListeningLearning共30秒才进入Forwarding而DHCP客户端在端口进入Forwarding前是无法获取地址的。Windows DHCP客户端一般会重试几次但如果你网络规模大、DHCP响应慢就会出现获取失败。排查链路看到PC网卡显示正在识别或无Internet访问但物理链路UP先看交换机端口状态是不是Learning/Listening。确认后把这个端口配置为边缘端口。配置时要确认这个端口真的只接终端别把连接交换机的口误配成边缘端口否则环路风险大幅上升。6.3 故障三某条链路上特定VLAN不通现象两个VLAN比如VLAN 10、VLAN 20走不通但VLAN 30、40正常。如果用的是MSTP优先检查VLAN和实例的映射关系。比如你在核心交换机上配了instance 1映射VLAN 10/20但接入交换机上配的instance 2映射VLAN 10/20两边映射不一致域边界错乱生成树计算就不一致某些VLAN的阻塞端口选错流量绕路甚至不通。排查链路在所有交换机上执行display stp region-configuration或show spanning-tree mst configuration逐一对比域名、修订级别、VLAN映射表。一个字符不一致都不行包括大小写和空格。如果配置没问题再看看实例的根桥是不是预想的设备。6.4 故障四交换机日志疯狂刷TCN拓扑变更通知现象工作正常但日志里全是TCN/拓扑变更消息CPU小幅升高。这个问题的常见原因是边缘端口误判或物理链路闪断。比如某台PC每天定时关机关机瞬间网线口掉电交换机能检测到链路down于是触发拓扑变更。如果这个端口没被配置为边缘端口STP会认为拓扑发生了改变全网所有交换机都要刷新MAC地址表造成不必要的资源消耗。解决方法是把所有接终端的端口都配成边缘端口同时开启BPDU保护。这样终端上下线不会影响STP收敛收到意外的BPDU时端口自动关闭双保险。补充一点TCN本身不是错误它只是STP的拓扑变更通知机制。但如果频繁出现就要排查哪些端口在震荡。用display stp tc华为或show spanning-tree detailCisco可以查看拓扑变更计数结合logging buffered的历史日志定位触发端口。6.5 故障五交换机关机重启后全网中断现象一台接入交换机重启期间全网业务中断但按道理其他链路应该能接管。原因是STP收敛期间拓扑变更导致MAC地址表被清空所有帧都要重新泛洪加上重新选举需要时间。在传统STP下这个过程最长可达50秒。如果网络里还跑着语音、视频这种实时业务用户感知就是断网一分钟。RSTP能把时间压缩到秒级但如果链路上游的老设备跑的还是STP整个收敛时间会被最慢的那个设备拖累——因为STP和RSTP兼容时RSTP交换机会把端口降级为STP模式所有快速机制失效。所以升级协议时要全局统一升级不要只改核心不改接入否则你会得到一个混合模式的网络RSTP的优点完全发挥不出来STP的慢收敛照旧。7. 考点速记与高频面试问答7.1 考点速记表考点必记要点根桥选举优先级小者优先优先级相同MAC小者优先根路径开销累加到根桥的所有入端口开销之和根端口选举开销 → 对端桥ID → 对端端口ID指定端口选举开销 → 本端桥ID → 本端端口ID端口状态变化Blocking → Listening → Learning → Forwarding默认计时器Hello 2sMax Age 20sForward Delay 15sSTP收敛时间Max Age 2 × Forward Delay 最大约50秒RSTP状态Discarding / Learning / ForwardingMSTP核心域、实例、VLAN映射、CST/IST边缘端口面向终端不参与STP计算配置需谨慎7.2 高频面试问题参考问题1为什么二层网络需要STP三层网络不需要三层网络有TTL字段路由协议本身能防环比如OSPF的SPF算法天然无环即使出现环路TTL也会限制报文跳数。二层帧没有TTL交换机只能靠MAC地址表转发环路产生的时候帧会无限循环复制所以必须有STP这样的协议从逻辑上剪环。问题2STP中一台交换机只有一个根端口吗传统STP和RSTP中一台交换机在一个生成树实例里只有一个根端口。但在MSTP里如果交换机属于多个实例每个实例可以有一个根端口所以一台交换机可能有多个根端口分属于不同实例。问题3为什么根桥的所有端口都是指定端口根桥是全网到根桥开销最小为0的交换机它上面的端口到根桥的路径开销必然比链路对端小除非链路对端也是根桥。根据指定端口选举规则开销小的一侧获胜所以根桥端口的角色都是指定端口。问题4如果把连接PC的端口配成边缘端口会有什么风险边缘端口不参与STP计算直接进入转发状态。如果这个端口下接了交换机并形成环路STP无法感知和阻断广播风暴会直接产生。所以边缘端口必须配合BPDU保护bpdu-guard使用一旦端口收到BPDU立即进入err-disable状态切断端口阻止环路扩大。问题5STP的BPDU是只有根桥发吗传统STP里根桥主动发送BPDU非根桥收到后向其所有指定端口转发其实是在端口上重新发送。RSTP里所有交换机每个Hello时间都会主动发送BPDU这一点是两者在协议行为上的重要区别也是RSTP收敛快的原因之一。问题6网络里交换机太多STP收敛慢怎么优化优先考虑升级到RSTP/MSTP配置边缘端口调整网络层次结构减少STP域规模。另外把网络划分为多个VLAN并启用MSTP多个实例可以缩小生成树的影响范围避免单点故障导致全网震荡。7.3 上机实验建议如果你有GNS3、EVE-NG或者真实设备强烈建议搭一个三台交换机的环境两台接入双归到一台核心分别跑STP、RSTP、MSTP用debug或logging观察收敛时间差异。实操步骤参考三台交换机全部启用RSTP一台优先级设为0另两台默认。接入交换机各插两根上联到核心看哪一个上联被阻塞。拔掉一根转发链路的线用ping持续监测终端到网关的丢包情况数一下RSTP恢复用了多少秒。换成传统STP重复第3步对比收敛时间。配置MSTP实例1/2把VLAN 10、20映射到实例1VLAN 30、40映射到实例2观察两个实例各自阻塞不同的链路实现负载均衡。这套实验做完你对STP的理解绝对比单纯看书深一个量级。8. 个人实操经验与最后一层窗户纸文章写到最后分享几个我这些年排查STP问题沉淀下来的经验。第一STP的问题很少是STP本身的问题多是配置和物理链路的问题。你看到环路首先排查有没有端口被错误地配成了边缘端口有没有傻瓜交换机被私接在办公网里而不是一上来就调优先级。第二根桥必须手动指定不要让它自然选举。自然选举依赖MAC地址随机性太大。线上环境里请把核心交换机显式配置为根桥优先级4096或0把备核心配置为次根桥优先级8192或root secondary。否则一旦有台新设备接入MAC地址恰好更小根桥可能漂移到一台接入交换机上全网性能瞬间下降。第三调试STP时抓BPDU比看状态更高效。华为交换机debug stp或Cisco的debug spanning-tree events能直接看到端口收到/发送BPDU的细节定位谁没发BPDU谁拒绝了自己的BPDU这类问题比看show输出快得多。当然在现网操作前必须评估影响最好在变更窗口做。第四不要忽略单端口环路。有一种情况是一个端口下接了Hub或者网线自己回插物理上做成环这种环不会体现在STP全局阻塞里因为STP只感知到这一个端口。配置里对每个downlink口开启环路检测loopback-detection配合STP使用才能更完整地防环。最后想说的是STP是网络工程师的一层窗户纸。捅破它之前你觉得二层网络是个黑盒捅破之后你会发现所有莫名断网全网卡死的故障底层都有一棵生成树在悄悄决定谁转发、谁阻塞。把这棵树看懂了你的网络排障能力会上一个台阶。
返回列表