广播风暴成因与排查:从二层环路到STP的完整解决指南
1. 先别急着重启交换机一次全网卡死背后的问题实话说干网络运维这行最怕的就是大半夜接到电话那头传来一句全网都不通了所有电脑都卡死网页打不开服务器也连不上。这种时候你坐进机房看到一排交换机端口指示灯像跑马灯一样疯狂闪烁交换机壳体烫得能煎鸡蛋十有八九就是遇上二层广播风暴了。广播风暴这个词很多刚入行的朋友听过但没真正打过照面觉得不就是广播包多点嘛能有多大事。等你真遇上一回就知道它有多折磨人——整个网络从物理层面上堵死交换机CPU持续高负载所有终端获取不到IPPing网关丢包率接近100%那感觉就像早高峰把所有人全部塞进同一节地铁车厢谁都动不了。这篇文章就是专门来聊透这个问题的。我会从二层网络里帧的转发机制讲起把广播风暴产生的底层逻辑说清楚再告诉你用什么方法快速判断网络里是不是已经发生风暴最后给出从应急到根治的完整解决流程。文里的所有命令、输出、判断逻辑都是我在真实设备主要是Cisco和华为思科/H3C/锐捷也大同小异上验证过的你照着操作踩坑概率可以降到很低。如果你是刚接触网络的小白别被二层广播帧这些词吓到我会把复杂的东西掰开揉碎讲如果你是有一定经验的工程师跳过基础直接看判断和排查部分那里面有你在考试题里学不到的实际经验。2. 广播风暴到底是什么从二层转发机制说起2.1 二层交换机转发帧的三个基本动作要理解广播风暴得先搞清楚一台普通的二层交换机收到一个以太网帧之后它会干什么。其实就三个动作转发、泛洪、丢弃。如果是单播帧目的MAC地址在交换机的MAC地址表里交换机就把这个帧从对应的端口转发出去如果目的MAC不在表里交换机不知道这个设备挂在哪个端口下就只能把这个帧从除接收端口以外的所有端口都发出去这叫泛洪Flooding如果帧是广播帧目的MAC是全FFF-FF-FF-FF-FF-FF那交换机别无选择不往哪儿转发也不该丢只能泛洪。看到没问题就出在这个泛洪上。广播帧本来就有比如ARP请求要问谁是这个IP地址、DHCP发现要去找DHCP服务器这些都是靠广播实现的。正常情况下一台主机偶尔发几个广播帧交换机转发一下马上就有回应网络很安静。可一旦网络里出现了一个东西——环路麻烦就来了。2.2 环路是广播风暴的温度计帧为什么会在环里越转越多我把环路比作音响系统的啸叫话筒对着音箱声音被不断放大循环最终变成刺耳的噪音。交换机之间的物理环路就是网络世界里的话筒对音箱。我给你画个最简单的场景。两台交换机Switch A和Switch B之间拉了两根网线一根接A的G0/1到B的G0/1另一根接A的G0/2到B的G0/2。这时候如果交换机没开STP生成树协议或者STP失效A收到一个广播帧按照泛洪规则会从G0/1和G0/2都发出去B从两个端口各收到一个广播帧又把它们从除接收口以外的所有端口泛洪出去其中一个会从另一个口回到AA收到后继续泛洪……这个过程你会看到一个广播帧进了环路变成两个两个变四个四个变八个。每台交换机每个端口都在转发几秒钟之内广播帧的数量就呈指数爆炸式增长把链路的带宽全部吃完。注意这里有个关键点我要强调不是广播帧自己想繁殖是交换机的转发逻辑配合环路这个拓扑被动地把它复制成了无数份。很多教材喜欢说广播帧在环路中无限循环这容易让人误以为帧会自己分裂其实每个帧都是交换机转发逻辑的产物。2.3 为什么广播风暴会杀死整个网络广播风暴真正的可怕之处不只是广播帧自己占带宽而是它引发的一系列连锁反应整个网络从数据面到控制面全面崩溃链路带宽被耗尽。100M端口每秒能跑的数据就那么多广播帧洪水一样涌过来正常业务帧根本挤不进去表现就是所有终端上网极慢、几乎不通。交换机CPU持续100%。桥接协议数据单元BPDU、部分控制帧、以及风暴中夹杂的大量目的不可达帧都要上送CPU处理CPU忙不过来STP计算、VLAN中继协议更新等基础功能全部瘫痪。终端设备跟着遭殃。每台PC的网卡也要处理大量中断CPU被网络中断占满电脑使用起来就是卡死鼠标都动不了这也是用户在故障时反复跟你强调电脑特别卡的原因。MAC地址表抖动。同一个MAC地址一会儿从A端口学到一会又从B端口学到交换机的MAC地址表来回跳进一步加剧泛洪形成恶性循环。所以你会发现广播风暴并不仅仅是二层的事它会把三层、终端、服务器全部卷进来。真正排查的时候你要从全网瘫痪这个表象反推回二层环路这个根因这就是下一章要说的判断方法。3. 怎么确认现网里正在发生广播风暴3.1 看现象从全网瘫痪到端口狂闪判断广播风暴第一反应是靠眼睛和直觉当然这不是玄学而是有规律可循的。故障现场通常有这几个典型表现你对照一下网络中大量终端同时反映网络连接正常但无法上网Ping网关超时或者延迟几千毫秒注意是整个网段里的所有电脑一起出问题不是某一台。交换机面板上所有端口的指示灯几乎都在全速闪烁而且频率异常稳定、持续不停就像下班高峰地铁闸机同时刷几十张卡那种疯狂的节奏。正常情况下你观察一个端口灯是时亮时暗的风暴时是常亮到闪出重影。交换机机箱明显发烫比平时烫很多因为所有端口都在满负荷转发交换芯片和电源的负载上来了。核心交换机或汇聚交换机的CPU利用率持续飙高有些设备管理界面直接连不进去SSH/Telnet超时Ping管理地址也丢包。一旦这几条同时满足你基本可以断定二层网络里有环路、有风暴或者两者同时在发生。接下来要做的事情不是再去翻配置而是立刻动手缩小排查范围。3.2 看计数器交换机端口的输入/输出速率不会说谎如果说目测是靠经验那看端口计数值就是实打实的证据。登录到交换机上敲一条命令show interfaces counter或者Cisco设备用show interfaces | include (Ethernet|port|rate)你会看到类似这样的信息Port InOctets InUcastPkts InMcastPkts InBcastPkts G0/1 987654321 1234567 876543 7890123 G0/2 876543210 7654321 345678 8765432注意InBcastPkts这一列如果是风暴状态数值涨得极其恐怖可能几秒内就跳几万甚至几十万。再配合连看两三次间隔10秒速率呈翻倍增长趋势那就非常明确。在华为设备上命令是display interface GigabitEthernet 0/0/1看Input: bcast那一行你会发现广播包的计数每秒都在疯涨。还有更直接的二层交换机支持用display mac-address flapping查看MAC地址漂移记录。如果看到大量端口之间出现MAC地址抖动说明数据帧正在环路里打转每经过一个端口就学一次MAC这个记录就是环路的铁证。3.3 抓包确认广播帧到底占了多少比例有些朋友说计数看得懂但不确定是不是风暴级别最好的办法是抓包用事实说话。找一台可以端口镜像的交换机把连接核心或汇聚的上联口做一个镜像口然后在电脑上开Wireshark抓个一两分钟的包。看统计数据你会看到占比最高的是大量相同内容的ARP请求比如全网都在发同一台网关或某台主机的ARP解析以及大量目的MAC为FF-FF-FF-FF-FF-FF的广播帧。这里给你一个快速判断标准正常网络里广播帧占总流量比重一般低于5%。如果长时间持续高就有异常。风暴状态下广播帧比例经常超过50%甚至80%以上而且协议类型非常单一几乎全是ARP或某种特定帧。Wireshark的Expert Info里会爆出大量Duplicate ACK或New TCP connection证明链路时延极高、重传极多不过这已经属于风暴后的次生灾害了。抓包不是必须的现场紧急时靠计数器和现象足够判断了但如果你想做事故复盘、写报告抓包数据是很有说服力的证据。3.4 应急响应第一步先隔离再定位很多新手会犯一个错误发现全网卡死第一时间把所有交换机关了重启。重启以后风暴确实暂时消失但如果根因环路没解除过一会儿风暴又回来了折腾一晚上运维者和业务部门都心力交瘁。正确的应急逻辑是先让业务恢复再花时间找根因。具体做法分两步走# 第一步物理/逻辑破环 # 如果知道大概哪几个交换机之间有可疑环路最快的方法是拔掉一根可疑的网线或光纤。 # 注意拔线之前先看清端口编号记录在工单里否则一会儿插回去容易搞混。 # 如果不能判断哪根线有问题可以从下往上、从接入层到汇聚层逐级排查断掉非必要的冗余链路。 # 第二步确认恢复 # 风暴消失后原来出现全网卡死的区域会迅速恢复交换机CPU利用率回落端口计数速率降下来。 # 在核心设备上 Ping 关键服务器或网关确认时延恢复正常。这里必须多说一句拔线这个操作看着简单但它是整个风暴处理里风险最高的环节。如果你拔的是正常业务链路可能会造成业务中断所以拔之前一定要观察拓扑图、看端口描述最好是一根一根试拔一根看效果而不是一口气拔好几根。有条件的话优先找和环路嫌疑最大、平时用不到的那条冗余链路下手。4. 风暴根源排查三种最常见的环路成因4.1 成因一网线/光纤物理环路最经典的傻瓜式故障我处理过的风暴故障里大概有一半以上属于这种类型。典型场景包括两个交换机之间本来规划好只走一根线施工时多拉了一根备份线接上后没有做链路聚合Link Aggregation直接形成了二层环路而交接文档里根本没记录这根线。某个工位旁边的网线两头都插到了同一个弱电井里的两台交换机上机房里线缆混乱谁都没注意到。墙上的信息点双网口有人图方便用一根短跳线两头互插形成该接入交换机下一跳的自环。这类问题的特点是没有预兆突发性出现在物理线路调整、搬工位、插拔线缆之后。排查时重点检查这些最近被动过的线缆。4.2 成因二自环——一个端口发出的帧又从自己回来了自环在故障排查中很常见但往往容易被忽略尤其是当它发生在一台交换机和高层交换机之间时。举个例子服务器或网络设备上有个双网口的网卡有人开了网卡绑定NIC Teaming模式但交换机侧没配置相应的链路聚合协议结果两个端口之间出现环路。再比如某台傻瓜交换机不可管理的家用交换机被人误接成一个环它本身不跑STP风暴只能由上层可管理交换机来终结如果上层也没配置好整个二层域全淹。还有更隐蔽的一台交换机的一个端口自己连到自己把同一台交换机的G0/1和G0/2用网线短接这在调试和测试环境里特别容易发生。这种自环在生成树协议启用的情况下可能短时间内不会致命但一旦STP失效或优先级配置不当就是风暴导火索。4.3 成因三STP配置失效冗余链路成了明雷物理上没有明显的一根线插错但网络里确实存在多条互为备份的链路——这种拓扑在生产环境里太常见了比如核心交换机双上联、汇聚交换机做堆叠后双归到核心。正常情况下STP/RSTP会把其中一条链路阻塞只保留一条逻辑通路环路被协议层面掐断。但STP不是万能保险出问题的场景也很多某台交换机上的STP没开默认关闭形成部分网络参与生成树、部分不参与的状态。手工配置了STP优先级但不同厂商设备之间BPDU报文格式或Bridge ID字段处理有差异两台设备互不认账都以为自己是根桥。端口上设置了PortFast连接终端没问题却错误地用在了连接交换机的互连口上导致启用瞬间不经历STP监听学习状态直接转发可能短暂环路。由于监控网段、VoIP网段的VLAN划分复杂BPDU在某些VLAN里被误过滤或VLAN间透传不一致导致STP在某些VLAN失效。碰到这类问题靠拔线救急容易根治却要花时间梳理全网STP状态。你需要检查根桥优先级、阻塞端口、BPDU收发情况确保全网只有一台设备是根桥其余设备优先级合理冗余链路有且仅有一个端口处于Blocking状态。4.4 从全网瘫痪快速缩小到某台设备/某条链路上面说的三种成因实际排查时很难一上来就看出是哪一种。我给你一套我经常用的逻辑隔离法按这个顺序走能特别快地把范围缩小先把网络划分成若干区域。如果你有核心、汇聚、接入三层结构先在核心层把各汇聚的下联口全部shutdown或者断开观察风暴是否消失。如果消失说明风暴在某个汇聚区域内部如果没消失说明风暴可能就在核心层本身或者核心与汇聚之间的链路有问题。逐个恢复汇聚设备的连接。每恢复一个汇聚观察风暴是否重返。一旦某个汇聚恢复后风暴立刻回来问题就锁定在这个汇聚及它下辖的接入设备范围内。在这个汇聚下再继续细分。把下联接入交换机的端口逐个恢复直到找到出问题的接入层。在这个接入交换机上用show mac-address-table找MAC漂移最频繁的端口或者直接查看端口收发的广播计数锁定物理端口。这套方法的本质是分而治之加逐一排除在二层环路的排查上比看配置快得多因为它不依赖文档是否准确只依赖现场网络本身的响应。整个过程建议动手前先画个简易拓扑标好端口号不然很容易拔岔了线给自己挖坑。5. 从救火到根治解决风暴的完整动作清单5.1 临时手段端口隔离与风暴控制找到问题端口以后在整改根因之前可以先用交换机自带的风暴控制功能把它兜住别让风暴扩散到全网。一步步说在Cisco设备上进入出问题的端口interface GigabitEthernet0/1 storm-control broadcast level 10 storm-control action shutdown这段配置的意思是该端口上广播流量超过端口带宽的10%时触发风暴控制动作把端口直接shutdown掉。实际生效时设备会记录风暴控制发生的日志信息你一看日志就知道哪个端口出了问题。华为/H3C设备的写法是interface GigabitEthernet0/0/1 broadcast-suppression ratio 10同样是把广播流量限制在带宽的10%以内超过就丢弃相当于给端口装了个限流阀。风暴控制的本质是限制而不是根治丢包会导致某些业务帧丢失端口shutdown也会影响正常业务所以它只能作为应急和预防手段不能当长期方案用。真正解决问题还是要靠下面几招。5.2 根因整改消除物理环路物理环路的处理思路很简单——拔线、收线、标记但执行层面要细致拔掉冗余链路后在两端端口上做物理标记比如标签上写备用禁止接线2025-XX-XX并更新端口描述。在交换机的端口配置里把不使用的端口shutdown掉防止下次有人不小心又把线插回来。如果冗余链路是业务需要的比如双上联做冗余不要靠物理拔线解决而是通过链路聚合或STP来正确管理这个在5.3里细说。对于傻瓜交换机组成的环最好直接换掉或用可管理的二层交换机否则永远是个隐患。5.3 规范配置让STP老老实实干活对于网络里的正常冗余链路正确做法是让生成树协议发挥作用。我给你的建议是全网启用RSTP快速生成树而不是老的STP收敛速度快很多。华为的命令是stp mode rstpCisco是spanning-tree mode rapid-pvst。在核心交换机上用命令把它设置为根桥比如spanning-tree vlan 1 root primary或者华为stp root primary在接入层连接终端的端口上启用PortFast/Edge Port避免终端反复插拔时触发STP重新计算interface GigabitEthernet0/10 spanning-tree portfast但注意PortFast只能配置在连接终端的端口上绝对不能配置在交换机互联端口上这是新手最容易踩的坑。有条件的话开启BPDU Guard和BPDU Filter。一旦某端口收到不该出现的BPDU交换机会自动把端口error-disable等于从协议层面掐断非法环路spanning-tree portfast bpduguard default5.4 网络规划层面的防御分层、收敛、配置规范如果你不想每个季度都被广播风暴折磨一次那就必须在规划层面下功夫用VLAN把广播域缩小。广播帧只在同一个VLAN内传播把大二层域拆成多个VLAN风暴的影响范围就缩小了。广播域越小单个VLAN里的终端越少风暴造成的破坏越轻。接入层到汇聚层/核心层尽量用三层路由口互联而不是全部跑二层。三层路由协议如OSPF/EIGRP本身不受二层广播风暴影响它有链路状态数据库、有路由收敛机制即使物理层全是广播路由优先级也高于泛洪。对全网所有交换机做配置基线管理统一STP模式、统一风暴控制参数、统一端口描述规范。这样出问题时你的操作手册就是一套模板而不是从几十台设备的配置里现找。5.5 运维检查清单把你的排障手册固化下来经历过几次风暴之后我把排查流程整理成了一张检查单每次应急就按单子走效率高很多这里贴出来给你参考确认全网瘫痪的范围是某个VLAN、某栋楼还是整个园区看核心交换机端口利用率确认风暴级别。查看各端口广播计数锁定广播帧最多的端口方向。最终锁定到具体交换机和具体端口。检查该端口下方的物理连接看是否自环或交叉互连。检查STP状态和BPDU收发确认是否存在协议失效。临时措施风暴控制上限调低、有问题端口shutdown。拔除或整改环路链路。恢复业务后持续观察30分钟以上确认端口计数恢复正常。补工单、做复盘、更新拓扑文档和端口标签。这套检查单不分厂商都适用核心思想是先看现象快速定位再做根因整改最后落地预防机制三层递进。6. 我踩过的坑和几条压箱底的经验做网络故障排查这些年广播风暴遇到的次数不算少了有几条经验确实是在真实事故里被反复验证过的写在这里希望帮你少走弯路。第一不要迷信STP的默认配置。很多新款交换机出厂默认开启STP的但默认参数往往不是最优的。根桥优先级大家都是32768那谁是根就看MAC地址大小随机性很大。如果核心交换机MAC地址大、没争上根桥一条次优的汇聚设备当了根全网生成树拓扑就从最优树变成了次优树某条冗余链路的转发效率会变得很怪还有可能让流量被迫绕远路。所以核心设备抢先配置成根桥这件事千万别嫌麻烦。第二拔线是技术活不是体力活。拔之前拍照、做记录、标注端口这三点做不到后面100%会出幺蛾子。我之前有一次连夜处理风暴拔了三根线故障还是没消失后来检查发现拔掉的那几根里有两根本来就是不用的闲置线真正有问题的那根还在岗位上。折腾到凌晨最后靠逐一恢复端口观察计数器变动才定位出来。那之后我学乖了每次插拔线都先画拓扑、写端口编号、贴标签一个小时能定位的问题绝不用一整夜。第三风暴控制的比例设多少合适要根据业务特点来。办公网如果跑了很多组播、视频会议正常广播比例会比普通园区高一些把风暴控制压得太低会误伤正常业务。我一般建议初始设在带宽的20%左右运行两周观察正常广播峰值再根据实际数据收紧到10%甚至更低而不是上来就一刀切设个5%。第四排障记录一定要留痕。这个虽然看起来不是技术问题但非常重要。每次风暴故障从现象出现到定位到根因、再到解决中间所有判断依据、命令输出、端口状态变化最好都保留下来。一方面事故复盘时这些记录能让真正的原因浮出水面另一方面以后同样的故障再出现你翻一下之前的记录10分钟就能定位。我见过太多同事处理完故障把记录随手一删下次同样的问题换个楼层再现又从头开始查。说实话广播风暴治理这件事越是早做预防越省心。你回去以后可以先检查一下网络拓扑里有没有未受STP保护的物理环再统一一下风暴控制策略最后看看核心设备的根桥配置。这三件事做完你的网络至少不会在下个季度末再给你准时来一次大罢工。