📡 第二章 彻底理解L2交换机
📄 一句话概括

以太网帧没有 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 秒实验

  1. 在交换机上查生成树的根桥是哪一台。
  2. 看有没有端口处于 Blocking 状态。
  3. 看生成树用的是 STP、RSTP 还是 MSTP。

常见误区

  1. 以为交换机自动防环。不开生成树照样打死网络。
  2. 以为冗余接线就一定更可靠。接成环反而最不可靠。
  3. 以为 50 秒无所谓。对实时业务是致命的。
自测三问(点开对答案) 1. 为什么以太网环路比 IP 环路更致命? —— 以太网帧没有 TTL,会永远转下去,广播还会指数复制。 2. 50 秒是怎么算出来的? —— Max Age 20 秒加 Listening 15 秒加 Learning 15 秒。 3. 现代网络用什么代替 STP? —— RSTP(收敛 1 秒内)、链路聚合、堆叠,或不制造环路。

下一节:第四个功能是把几条线捆成一条——链路聚合。

相关笔记