以太网帧没有 TTL,接成环就会永远转下去,几秒钟能把整网打死。 生成树的办法是「主动堵住一条」,但那 50 秒是用时间换正确性。
上一节讲帧长,这一节讲「拓扑」。这是接入层最容易出事故的地方。 这一节要算:50 秒怎么来的,以及它对不同业务的后果。
一、环路为什么致命
IP 包有 TTL,转够了就丢;以太网帧没有这个字段。所以一个环会让帧永远转下去。
更糟的是广播帧:每经过一台交换机就复制一份, 指数增长,几秒钟就能把带宽和 CPU 全占满。这叫广播风暴。
所以「接线接成环」是网络里最严重的物理错误之一, 而且它常常是「为了冗余」接出来的——动机是好的,后果是灾难。
二、50 秒是三个定时器加出来的
Hello Time 2 秒:根桥多久发一次 BPDU。 Max Age 20 秒:多久收不到就认为邻居死了。 Forward Delay 15 秒:Listening 与 Learning 各等一次。
收敛时间 = 20 + 15 + 15 = 50 秒。
Learning 那 15 秒是必须的:换拓扑后 MAC 表里的记录全错了,直接转发会把帧送到错误的端口。 这 15 秒是拿时间换正确性。
三、对业务意味着什么
VoIP 直接断线要重拨、视频会议掉线重连通常失败、TCP 长连接超时、文件传输中断要重传。
只有网页浏览几乎无感——刷新一下就好了。所以「50 秒」对不同业务的严重程度差得很远。
现代网络基本不用 STP 了:用 RSTP(收敛 1 秒内)或者干脆不制造环路(链路聚合、堆叠)。 MSTP 则是给不同 VLAN 配不同的树,把闲置链路用起来。
四、动手 Demo:三个定时器与 50 秒的由来
这段列三个定时器的默认值与作用,再按业务列 50 秒断网的后果。
TH([u"定时器", u"默认值", u"干什么"], [0, 0, 0])
for a, b, c in ((u"Hello Time", u"2 秒", u"根桥多久发一次 BPDU"),
(u"Max Age", u"20 秒", u"多久收不到就认为邻居死了"),
(u"Forward Delay", u"15 秒", u"Listening/Learning 各等一次")):
T([a, b, c], [0, 0, 0])
实跑输出:
--------------------------------------------------------------------
生成树,那 50 秒是怎么来的
--------------------------------------------------------------------
**交换机最怕环路。**因为以太网帧没有 TTL,一个环路会让帧永远转下去,
而且越转越多——**几秒钟就能把整网打死。**
**生成树(STP)的做法是:主动把环路上的某个口「堵住」**,让逻辑上变成一棵树。
堵住的那个口留着监听,主链路一断就顶上。
**50 秒的账是三个定时器加出来的**:
定时器 默认值 干什么
-------------------------------------------------------------
Hello Time 2 秒 根桥多久发一次 BPDU
Max Age 20 秒 多久收不到就认为邻居死了
Forward Delay 15 秒 Listening/Learning 各等一次
**收敛时间 = Max Age + 2 × Forward Delay = 20 + 15 + 15 = 50 秒。**
**为什么 Learning 要等 15 秒**:换拓扑后 MAC 表里的记录全错了,直接转发会把帧送到错误的端口。
Learning 期间只学不发,等表重新长对。
**这 15 秒是拿时间换正确性。**
**50 秒对业务意味着什么**:
业务 50 秒断网的后果
---------------------------------------------------
VoIP 通话 直接断线,要重拨
视频会议 掉线重连,通常失败
TCP 长连接(数据库) 连接超时,应用报错
网页浏览 刷新一下,用户几乎无感
文件传输 中断,多半要重传
**所以现代网络基本不用 STP 了,改用两个东西**:
1. **RSTP(802.1w)**:把「等」改成「问」,收敛从 50 秒降到 1 秒以内。
它还能区分「边缘端口」——接终端的口直接进转发,不参与等待。
2. **链路聚合 + 堆叠**:干脆不制造环路,靠多路径分担而不是堵一条。
**MSTP(802.1s)解决的是另一个问题**:STP 与 RSTP 全网只有一棵树,所有 VLAN 走同一条路。
MSTP 可以给不同 VLAN 组配不同的树,**让一半 VLAN 走左边、一半走右边**,把闲置链路用起来。
注意 Max Age 是 20 秒,但 Hello 是 2 秒——也就是「连续丢 10 个 BPDU 才认为邻居死了」。 这个余量是为了容忍偶发丢包。
50 秒这个数的构成要记清:20 + 15 + 15。 有些资料写「30 到 50 秒」,是因为「拓扑变化被直接感知」时可以跳过 Max Age, 直接从 15 + 15 = 30 秒开始算。
最后一行「文件传输中断」是最容易被低估的:很多应用不支持断点续传, 一次 50 秒的抖动等于重传几 GB。这也是为什么存储网络对生成树收敛时间要求特别高。
30 秒实验
- 在交换机上查生成树的根桥是哪一台。
- 看有没有端口处于 Blocking 状态。
- 看生成树用的是 STP、RSTP 还是 MSTP。
常见误区
- 以为交换机自动防环。不开生成树照样打死网络。
- 以为冗余接线就一定更可靠。接成环反而最不可靠。
- 以为 50 秒无所谓。对实时业务是致命的。
自测三问(点开对答案)
1. 为什么以太网环路比 IP 环路更致命? —— 以太网帧没有 TTL,会永远转下去,广播还会指数复制。 2. 50 秒是怎么算出来的? —— Max Age 20 秒加 Listening 15 秒加 Learning 15 秒。 3. 现代网络用什么代替 STP? —— RSTP(收敛 1 秒内)、链路聚合、堆叠,或不制造环路。下一节:第四个功能是把几条线捆成一条——链路聚合。
- ☐ (本节完,下一节 02.08.04 链路聚合)