CS 168 · LECTURE 17 · 2026-10-22 · 应用与端到端

以太网、学习交换与生成树

以太网用 MAC 学习减少无谓广播,生成树则主动关闭部分冗余链路,换取一个无环的二层转发拓扑。

版本快照:Fall 2026 官方课表与在线教材,核对日期 2026-09-02;官网仍标注 under construction,日期与政策可能变化。

  1. 互联网地基
  2. 路由
  3. 传输
  4. 应用与端到端
  5. 数据中心
  6. 群体通信
  7. 无线与移动

本章核心问题

交换机没有 TTL 可依赖时,为什么一个短暂二层环路会迅速演变成广播风暴?

1 · 反向学习

收到源 MAC=S 的帧,交换机把 S 与入端口绑定并刷新老化时间。对目的 D,若表中有 D 则单播到对应端口;若未知或广播,则除入端口外泛洪。

学习来源是 source,不是 destination,因为入端口提供了“返回 S 的下一跳”证据。主机移动后,新的源帧会更新绑定;老化让沉默旧位置最终消失。

2 · 环路为什么致命

二层帧通常没有类似 IP TTL 的逐跳寿命。未知单播或广播在环中被复制,多个副本又导致 MAC 表在不同端口间抖动,最终占满链路与交换机处理能力。

冗余链路对容错有价值,不能简单拔掉。需要控制平面选择当前无环子集,并在故障后重新启用备用路径。

3 · STP 收敛

桥交换 BPDU,比较 root ID、到根路径成本、发送桥 ID 与端口 ID。全网选出最小 root,每个非根桥选一条 root port,每个 LAN segment 选 designated port,其余阻塞。

树上任意两点只有一条路径,广播不会循环。代价是部分链路闲置且路径可能次优;数据中心通常采用三层 ECMP 或更现代二层方案利用多路径。

4 · 端到端位置

在同一子网内,主机用 ARP 找到目的 MAC并经交换机转发;跨子网时,帧目的 MAC 是默认网关,IP 目的仍是远端主机。路由器拆掉旧帧后进入三层转发。

这解释了为什么 traceroute通常看不到普通二层交换机:它们不递减 IP TTL,也不作为三层 hop 产生 ICMP。

交互推演:从广播环路出发逐步选出根桥并阻塞冗余端口。

MAC 学习和 STP 都依赖拓扑随消息变化的状态。

从广播环路出发逐步选出根桥并阻塞冗余端口。的静态步骤概览

纠错:最容易带走的错误模型

闭卷推演

给四交换机环,先模拟未知单播泛洪,再选 A 为 root 跑 STP;断开一条树边后说明哪个阻塞端口可能转为转发。

检查:普通二层交换机为什么通常不会显示在 traceroute 中?

机制工作台:before → event → after

Before / local state

未知目的 MAC 触发 flood

Event / after / output

未知目的 MAC 触发 flood;source learning 更新 MAC→port;STP 使冗余拓扑只保留无环 forwarding tree。

检查:判断一个实现分支是否必要,最有力的问题是什么?

Explain It Yourself

为三交换机环手推一轮 source learning 与 blocked port。

自检方法

答案必须出现 packet/message、local state/table、触发 event、after state 与 output;只给定义不算完成。

Worked Table Trace:学习、泛洪与 STP

S1、S2、S3 构成三角形,H1 接 S1,H2 接 S3;STP 已阻塞 S3→S1 的冗余口。

事件入端口table before学习 / 查表 / 输出
H1→H2 到 S1host学 H1→host;H2 unknown,泛洪
到 S2S1学 H1→S1;向 S3
到 S3S2学 H1→S2;交付 H2;blocked 口不发
H2 回复hostH1→S2学 H2→host;精确单播

从源 MAC 反向学习位置,再用目的 MAC 查输出。STP 保持 active forwarding topology 无环且连通。

Counterfactual:三角形全部 forwarding

广播/未知单播没有 IP TTL,帧循环且每轮复制;同一源 MAC 从不同端口抵达又造成 MAC flapping。阻塞冗余边不是删除物理链路,而是换取稳定的逻辑无环图。

Misconception Analysis:按目的 MAC 学习

为什么会误解
查表确实使用目的 MAC。
反例
未知目的帧没有目的位置证据,但 ingress 明确证明源主机方向。
正确模型
source→learn ingress;destination→lookup egress。

Bridge State / Event Map

状态事件更新输出
MAC tableframe arrivessource→ingress + expiryunicast/flood/filter
root ID更优 BPDU采用更小 tuple通告新 best
root portcost 变化选到 root 最佳口改变角色
port state收敛冗余 blocking数据面无环

Switching Checks

检查:端口 3 收到源 X,能学习什么?

检查:二层环为何快速恶化?

检查:blocked link 实际如何?

Explain It Yourself

  1. 为三交换机环选 root、root port、designated 与 blocked port。
  2. 闭卷解释首帧、回复帧、entry 过期后的第三帧。

一手资料

正文是 CourseStack 的中文解释与重新绘制的教学例子;官方页面负责课程原始定义,历史仓库只提供你的实现证据。