跳到内容

第 4 卷 / 第 8 章 / 第 2 课

8.2 Ethernet switching、VLAN 与环路防护 ​

以太网交换机根据目的 MAC 地址,在同一 VLAN 广播域内转发帧;同时根据收到的帧的源 MAC 地址,学习转发数据库(FDB)。分析二层转发时,需要分清这两个方向:从源地址学习,从目的地址查表。

1. Switch 学 source,查 destination ​

以下按独立 VLAN 学习模型说明。Frame 从 port 3、VLAN 10 进入,source MAC 为 A,switch 将 (VLAN 10, A) -> port 3 写入/refresh FDB。然后查 destination MAC B:

  • Known unicast:B 在 FDB 中,向允许转发的对应端口发送;若查到的正是入端口,普通桥接会过滤该帧,不原路送回;
  • Unknown unicast:在该 VLAN 内向除 ingress port 外的 eligible ports flood;
  • Broadcast:在该 VLAN 内向除入端口外允许转发的端口 flood;
  • Multicast:取决于 multicast snooping/registration 状态,无相关状态时可能按 VLAN flood。

这里的 eligible 要同时满足 VLAN 成员关系、端口转发状态和相关过滤规则;不是把每个物理端口都发一遍。Linux bridge 的 hairpin 等专门模式可允许回送入端口,需要单独解释。

动态学习的 FDB entry 会 aging,静态配置项通常不按相同规则老化。同一 source MAC 从新 port 到达时,switch 通常更新 mapping;快速来回移动可显示为 MAC flapping,常见 root cause 包括 loop、错误 bond/bridge 或 duplicate address。

bash
# Linux bridge FDB
bridge fdb show

2. Collision domain 与 broadcast domain ​

Hub 是 physical-layer repeater,所有 port 共享 medium/collision domain。Switch 的每个 full-duplex point-to-point port 可独立收发,不使用 CSMA/CD 竞争共享介质。

Switch 默认不切分 broadcast domain:属于同一 VLAN 的 broadcast 会被 flood。VLAN 把同一套交换设备分成多个逻辑广播域。在本课的独立学习模型中,查表键是 (VLAN, MAC):同一个 MAC 可在 VLAN 10 与 VLAN 20 中对应不同端口。标准也允许共享 VLAN 学习,更一般的实现用 filtering database ID(FID)确定学习域,因此需核对设备的 VLAN 到学习域映射。

3. 802.1Q tag ​

Untagged Ethernet II header:

text
Destination | Source | EtherType | Payload

802.1Q-tagged header:

text
Destination | Source | TPID 0x8100 | TCI | inner EtherType | Payload

Tag 插入 4 bytes。TCI 包含 3-bit priority code point(PCP)、1-bit drop eligible indicator(DEI)和 12-bit VLAN ID。VID 1–4094 用于普通 VLAN;0 是只携带优先级、不指定 VLAN 的 priority tag,4095 保留。12 位编码空间不等于设备一定支持同时配置 4094 个 VLAN。

增加的 4 bytes 让常见最大帧长从 1518 增为 1522 bytes(仍不含 preamble/SFD)。加 tag 通常扩大帧开销,并不自动把 1500-byte IP MTU 减成 1496;须确认沿途设备接受增大的帧。Provider bridging/QinQ 可有多层 tag,不应把 parser 写成“EtherType 永远在 offset 12 并且只有一个 tag”。

Access/trunk 是 switch configuration concept,不是 Ethernet frame 自带的 port type:

  • Access port 通常将 untagged host traffic 归入一个 VLAN,egress 去 tag;
  • Trunk port 通常允许一组 tagged VLAN 通过;
  • Native/PVID/untagged VLAN 行为因 vendor/configuration 而异,两端不一致会导致 leakage 或 connectivity failure;
  • Allowed VLAN list 应最小化,不要默认所有 VLAN 通过 trunk。

例如 VLAN 10 的主机从 access port 发送无标签帧,交换机用 PVID 10 分类;经需要标签的 trunk 发出时添加 VID 10,到另一端的 VLAN 10 access port 再去标签。若 trunk 两端分别把无标签帧归入 VLAN 10 和 VLAN 20,同一帧会被赋予不同身份。排查时要逐段记录入站分类和出站标签,不能只看端口名字。

4. Inter-VLAN communication 是 routing ​

VLAN 10 host 要访问 VLAN 20 host,在 VLAN 10 与 VLAN 20 使用不同 IP 子网、且路由指向网关的前提下,source host 将 packet 发给 VLAN 10 中的下一跳网关 MAC。若错误地把两端当成同一 on-link 子网,主机会尝试本地 ARP,而 ARP 不会自动跨 VLAN。Router/L3 switch 在 IP layer 选 route,然后在 VLAN 20 上封装新 Ethernet frame。

VLAN 提供 L2 broadcast separation,不自动提供 application authorization 或完整 security boundary。Inter-VLAN ACL/firewall、host security、802.1X/NAC 和 management-plane protection 仍需要独立设计。VLAN hopping 与 mis-tagging 也使“在不同 VLAN 就绝对安全”不成立。

5. L2 loop 为什么会放大 ​

Ethernet frame 没有像 IP TTL/Hop Limit 那样每转发一次就递减的 loop limit。一个 broadcast/unknown-unicast frame 在 redundant L2 links 中循环时,switch 可不断 flood duplicate,占满 link/control-plane resource,同时让 FDB 观测到 source MAC 在多个 port 间来回移动。

Physical redundancy 如果没有 loop-prevention / multipath mechanism,会破坏 logical topology。单纯把两根 cable 同时接上不等于安全获得两倍 bandwidth;需要 STP/RSTP、正确配置的 link aggregation 或 routed fabric 等机制。聚合把成员链路当作一条逻辑链路;常见按流哈希会把一条流固定在一个成员上,所以两条 1 Gbit/s 链路也不保证一条 TCP 流达到 2 Gbit/s。聚合并不防止网络其他位置的环路。

6. STP/RSTP 的目标是建立 loop-free active topology ​

STP family 通过 Bridge Protocol Data Unit(BPDU)选 root bridge,计算到 root 的 path cost,为 port 分配 role/state,让某些冗余路径不转发普通数据帧。Root 选举选择较小的 bridge ID;配置优先级与 MAC 等字段参与比较,不是交换机谁先开机谁当 root。阻塞数据的端口仍需处理相应 BPDU,不能理解为物理链路被拔掉。Topology 变化后 protocol 重新 convergence,恢复一条 loop-free path。

经典 STP 与 RSTP 的常见状态可这样对照;状态与 root/designated/alternate 等端口角色是两件事:

行为经典 STP 状态RSTP 状态
不学习源 MAC、不转发普通数据blocking / listening(另有 disabled)discarding
学习源 MAC,但不转发普通数据learninglearning
学习并转发普通数据forwardingforwarding

Classic 802.1D STP 的 default timer 可造成数十秒 convergence,但“固定 50 秒”不是所有 topology/event/configuration 的保证。RSTP 改进 role/state 和 proposal/agreement mechanism,在 point-to-point link 上可快速 convergence,但实际时间取决于 topology、edge-port configuration、failure detection 与 compatibility,不应保证“一定 1–3 秒”。

Operational safeguards:

  • 明确 root bridge placement 与 priority,不让随机 access switch 成 root;
  • Edge/PortFast 只用于不应接 switch 的 edge port,并结合 BPDU Guard;
  • Root Guard / Loop Guard 根据 failure model 使用;
  • 不在没有替代 loop prevention 的情况下全局关闭 STP;
  • Datacenter routed leaf-spine 常将 L3 边界下沉以减少 L2 failure domain,但 server-facing segment 仍可能存在 L2 mechanism。

7. L2 security 需要独立控制 ​

ARP/NDP、DHCP 和 source MAC 都不是 cryptographic identity。Managed network 可使用 DHCP snooping、Dynamic ARP Inspection、RA Guard、port security、802.1X 与 control-plane policing,但每项都有 topology/trust-port assumption。配置不当会阻断 legitimate failover、static host 或 IPv6 control traffic。

不要在未授权 network 上使用 packet-crafting tool 发 ARP/BPDU/tagged frame 做实验。教学实验应在 isolated namespace、virtual lab 或自有 switch 上完成。

8. 诊断顺序 ​

  1. 确认 interface link state、speed/duplex 与 error counter。
  2. 确认 ingress port 的 VLAN/PVID 和 trunk allowed list。
  3. 查 (VLAN, source MAC) 在 FDB 中学到哪个 port,是否 flapping。
  4. 区分 known unicast、unknown unicast、broadcast 和 multicast flooding。
  5. 查 STP root、port role/state、topology-change 与 BPDU guard event。
  6. 跨 VLAN 问题转到 route/ACL/firewall,不继续只查 FDB。

9. 验收问题 ​

  1. Switch 从 frame 的哪个 address 学 FDB,用哪个 address 查 egress?
  2. 为什么 unknown unicast 会 flood,FDB 学到后会怎样变化?
  3. 画出 802.1Q tag 插入的位置,说明 TPID 和 TCI。
  4. 为什么 VLAN separation 不能替代 firewall authorization?
  5. 一个 source MAC 在两个 trunk port 间 flapping,你会先查哪三类 root cause?

下一课进入8.3 MTU、IP fragmentation 与 Path MTU Discovery。

参考 ​

Built with VitePress | Software Systems Atlas