1、广播风暴基础:什么是广播风暴、广播风暴的成因、广播风暴的危害
聊广播丢包,绕不开一个老朋友——广播风暴。我入行那会儿,第一次被半夜叫起来处理故障,就是这玩意儿搞的。整个办公网上不去,交换机CPU飙到99%,连SSH都登不进去。后来发现,就是一根网线成环了。
说白了,广播风暴就是网络里广播帧像滚雪球一样越滚越多,最终把带宽和交换机CPU全部吃光。咱们今天就把这个“雪球”拆开看看。
1.1 什么是广播风暴
先看定义。广播风暴(Broadcast Storm)是指:二层网络中,广播帧被无限循环转发,导致帧数量指数级增长,最终耗尽网络资源的现象。
为什么会指数级增长?你想想看,一个广播帧从交换机A发出去,交换机B收到后复制给所有端口,交换机C又复制……如果网络中存在环路,这个帧就会在环路里反复转圈,每转一圈就多复制几份。用不了几秒,整个网络就被塞满了。
核心特征:
- 广播帧数量呈指数增长(不是线性)
- 交换机CPU占用率飙升(通常超过80%)
- 正常数据帧几乎无法转发
- 网络延迟剧增,丢包率接近100%
我记得有一次帮客户排查,他们抱怨“网络时不时断一下”。我登上去一看,广播帧每秒超过10万个——正常网络里广播帧也就几百个每秒。这就是典型的间歇性风暴,比持续风暴更难抓。
1.2 广播风暴的成因
成因其实不复杂,我归纳成三类。大部分生产事故都逃不出这几个坑。
| 成因类别 | 具体原因 | 常见场景 |
|---|---|---|
| 物理环路 | 交换机之间多条链路形成环路,且未启用STP | 误接网线、新增交换机未配置STP |
| STP失效 | STP协议被禁用、配置错误或BPDU丢失 | STP优先级配置不当、端口关闭BPDU过滤 |
| 恶意攻击 | 攻击者伪造大量广播帧注入网络 | ARP泛洪、DHCP饿死攻击 |
1.2.1 物理环路——最常见的元凶
这是我在项目里遇到最多的。运维同事为了“冗余”,把两台交换机用两根网线连起来,结果忘了开STP。或者新来的同事插了一根网线,不小心把两个端口环上了。
一旦成环,广播帧就开始了“永动机”模式。没有STP切断逻辑链路,这个帧会一直转发到交换机内存耗尽。
我曾经踩过的坑: 有一次在数据中心做布线调整,拔了一根线又插回去,恰好形成了环路。当时STP还在收敛中(默认30-50秒),这几十秒里广播风暴已经打垮了核心交换机。后来我养成了一个习惯:任何物理链路变更前,先确认STP状态。
1.2.2 STP失效——你以为的保护其实没生效
很多网络工程师觉得“我开了STP就万事大吉”。其实不然。STP失效的情况我见过不少:
- BPDU过滤:某些端口配置了BPDU Filter,STP报文被丢弃,环路检测失效
- STP优先级冲突:两台交换机都认为自己应该是根桥,导致拓扑计算混乱
- 软件Bug:某些老版本交换机在特定流量下会“忘记”发送BPDU
嗯,这里要注意:STP不是银弹。它只是降低了环路风险,但不能100%杜绝。
1.2.3 恶意攻击——人为制造的灾难
这个在校园网、酒店网络里比较常见。攻击者用工具伪造大量ARP请求(广播帧),让交换机疲于转发。我见过一个案例:某酒店大堂的公共Wi-Fi端口没做隔离,有人用手机跑了个ARP泛洪工具,整个酒店的网络直接瘫痪。
1.3 广播风暴的危害
危害不用我多说,经历过的人都懂。我列几个关键点:
- 带宽被完全吞噬:广播帧占满所有链路带宽,正常业务流量无法通过
- 交换机CPU过载:交换机需要处理每个广播帧,CPU占用率冲到100%,导致管理面不可用(SSH/Telnet登不进去)
- 级联故障:一台交换机被风暴打垮,会牵连上游交换机,甚至整个广播域瘫痪
- 数据丢包严重:正常数据帧在队列里被丢弃,丢包率可达90%以上
- 恢复困难:风暴起来后,你连设备都登不上去,只能拔线——这就是所谓的“拔线大法”
我的经验: 广播风暴的恢复,第一件事永远是物理断环——拔掉怀疑成环的网线。等网络恢复后再慢慢查原因。别想着在风暴中通过命令行排查,来不及的。
1.4 广播风暴的传播机制(SVG图解)
下面这张图展示了广播风暴在二层环路中的传播过程。我特意把帧的复制和转发路径画清楚了。
从图上可以看得很清楚:Host A发了一个广播帧,SW1复制给所有端口,其中一份通过环路链路到了SW3。SW3又复制转发,其中一份又回到SW1。这个帧就在环路里无限循环,每循环一次就多出N份拷贝。几分钟内,网络里全是这个广播帧的副本。
1.5 如何快速判断是否发生广播风暴
不用复杂工具,几个现象就够了:
- 网络完全不通:ping任何地址都超时,包括网关
- 交换机端口指示灯狂闪:所有端口几乎同时高速闪烁
- 交换机CPU占用率>90%:如果能登上去,show process cpu一看便知
- 拔掉某根线后网络恢复:这是最直接的判断方法——拔线大法
我的习惯: 在核心交换机上配置一个简单的监控脚本,每5秒抓一次广播帧计数。如果连续3次超过阈值(比如5000帧/秒),自动发告警。这能帮你抢在用户投诉前发现问题。