模块五 · 链路层和局域网
交换机
交换机插上就能用,没人配置过它,它怎么知道该把数据从哪个口发出去?答案是它自己学了。本章讲清这个"自我学习"的机制,以及冲突域、广播域这两个常被混淆的概念。
本章要解决的问题:交换机插上就能用,没人配置过它,它怎么知道该把数据从哪个口发出去?答案是它自己学了。本章讲清这个"自我学习"的机制,以及冲突域、广播域这两个常被混淆的概念。
本章的证据来源:交换机内部转发表(FDB)无法从本机读取 —— 本机连的是家用路由器内置的交换模块,没有开放管理接口。所以本章的交换机机制部分标注为标准/原理(IEEE 802.1D);但"你确实处在一段二层网络里"这一点有历史实测记录证据,附在正文中。
先从一个例子理解概念
四台电脑都连着同一台盒子,盒子要把A发给B的数据交到B的接口。它怎么知道B在哪一边?先看转发与学习。
按本地地址转发:交换机
普通二层交换机根据目的MAC决定把帧送往哪个端口。这里的端口是物理或逻辑连接口,别与TCP/UDP端口号混淆。
记住从哪边来:转发表
交换机看到某个源MAC从某个口出现,会记录两者关系。这张记录叫转发表或FDB,像配送员的入口索引,不是全世界设备名册。
还不知道在哪:泛洪
目的MAC没有对应记录时,普通未知单播通常被送到同VLAN中其他合适端口,叫泛洪。它不是把数据发送到全球,也不自动说明故障。
谁会互相影响:冲突域与广播域
共享介质上可能发生发送冲突的范围叫冲突域;一个广播帧可到达的范围叫广播域。全双工链路通常没有发送冲突,但广播传播范围仍需管理。
下面再用这些概念看原理、命令和结果。规范与官方资料列在本章末尾,类比只帮助理解,不代替协议规则。
先看没有交换机时的麻烦:集线器
最早的以太网用集线器(Hub)把多台设备连起来。集线器是个物理层设备,行为极其简单:
从任意一个口收到信号 → 复制一份 → 从所有其他口发出去它不认识任何地址,也看不懂帧,只是把电信号放大转发。
这带来两个严重后果:
一、所有设备共享同一条"通道"。 任何两台设备通信时,其他所有设备都必须闭嘴等着 —— 这就是《以太网帧》那一章讲的 CSMA/CD 冲突检测的由来。10 台设备接一个集线器,每台的可用带宽大约只有 1/10。
二、所有设备都能收到别人的数据。 因为信号是广播式的,安全性和隐私性为零。
交换机怎么解决:它看得懂帧
交换机(Switch)是链路层设备。它的关键能力是:它会读帧头里的 MAC 地址。
于是转发逻辑变成了:
收到一个帧 → 看目的 MAC → 只从"那台设备所在的那个口"发出去效果是:
- 每个口成为独立的冲突域 —— A 和 B 通信时,C 和 D 之间可以同时通信,互不干扰
- 已知单播通常只发往相应端口;广播、未知单播及部分多播仍可能泛洪,不能视为保密措施
再配合全双工(链路两端可同时收发;具体物理实现随以太网类型变化),冲突就彻底消失了。这也是为什么《以太网帧》那一章说现代网络里 CSMA/CD 实际上已经不用了。
历史实测记录的链路速率:
Name : WLAN
LinkSpeed : 2.2 Gbps这是WLAN的物理层速率报告,不能证明全双工。 Wi-Fi在同一信道共享介质,速率也不是可供应用持续下载的吞吐;有线交换端口的全双工是另一个概念。Cisco 无线设计指南
转发表:交换机是怎么"自己学会"的
这是交换机最巧妙的地方。它没有任何配置,插上电就能工作。 原因是它会自己观察。
学习过程
交换机内部有一张表,叫转发表(Forwarding Database,FDB),记录"哪个 MAC 在哪个口上"。它的工作流程是:
收到一个帧:
① 学习:看这个帧的【源 MAC】和它从哪个口进来
→ 在转发表里记下「MAC_X → 口 3」
(因为"从这个口进来的帧,源 MAC 一定在这条路上",这是必然的)
② 转发:看这个帧的【目的 MAC】
查到了 → 只从对应的那个口发出去(单播转发)
没查到 → 从【除入口外的所有口】发出去(这叫泛洪 flooding)
目的 MAC 是广播(FF-FF-FF-FF-FF-FF)→ 也泛洪注意第 ① 步的推理:交换机不需要"询问"设备在哪里。它只是利用了一个必然成立的规律 —— 从一个口进来的帧,发送方一定在那个方向。观察得越多,表就越完整。
表项会老化。 如果某个 MAC 长时间没有出现,表项会被删除。否则设备换口之后,交换机会一直往旧口发。
一个例外:泛洪不是故障
刚开始时表是空的,前几个帧必须泛洪(发给所有口)。这是正常行为,不是故障。
如果你在抓包时看到同一个包出现在多个口上,先想想"交换机的表里有没有这个目的 MAC" —— 很可能只是还没学到。
冲突域与广播域
这两个概念名字像,作用完全不同。这是本章最容易被考、也最容易记混的地方。
| 冲突域 | 广播域 | |
|---|---|---|
| 定义 | 会发生信号冲突的范围 | 一个广播帧能到达的范围 |
| 由谁隔开 | 交换机(每个口一个) | 路由器(或用 VLAN 在交换机上划分) |
| 交换机能否隔开 | ✅ 能 | ❌ 不能 |
| 集线器能否隔开 | ❌ 不能(所有口共享) | ❌ 不能 |
关键在于:交换机隔开冲突域,但不隔开广播域。
也就是说:一个广播帧(比如 ARP 请求)会被交换机发到所有口 —— 因为广播目的就是当前VLAN内的接收者;正常泛洪排除入口并受端口状态和策略约束。
实测:确认自己处在一段二层网络里
虽然读不到交换机的转发表,但可以从邻居缓存反推出自己所处的二层环境:
Get-NetNeighbor -AddressFamily IPv4 | Where-Object { $_.InterfaceAlias -like 'WLAN*' -and $_.State -ne 'Permanent' }实测结果(WLAN 上的邻居):
| IP | MAC | 状态 |
|---|---|---|
192.168.31.1 | A4-39-B3-0B-AB-19 | Reachable(网关) |
192.168.31.51 | E8-51-77-27-5A-9A | Probe |
192.168.31.126 | F6-E3-97-52-2A-56 | Stale |
192.168.31.248 | FA-AA-FF-92-E6-3F | Stale |
这张表说明了三件事:
- 这些记录与同一链路上的邻居相容,但Stale/Probe不是当前可达证明;Proxy ARP和虚拟接口也可能影响解释。
- 它们记录了不同MAC;是否直接对应真实端点,仍需排除代理ARP等机制。
- 网关也在这一段里 —— 本机和外网的通信,第一跳就是二层交给网关。
如果这些设备之间连的是集线器而不是交换机,那么任何两台设备通信时,其他设备都会收到副本。这是集线器和交换机在可观测行为上的差别。
实测:WSL 的虚拟交换机
本机还有一段更有意思的二层网络 —— WSL 用的虚拟交换机:
vEthernet (WSL (Hyper-V firewall)) 本机 172.30.0.1 MAC 00-15-5D-FB-2D-8A
对端 172.30.14.213 MAC 00-15-5D-FB-2F-0A两个 MAC 的前三字节完全相同(00-15-5D)。 这说明两块网卡来自同一个"厂商" —— 也就是 Hyper-V 虚拟网卡工厂(《MAC 地址》那一章讲过 OUI)。
这是一段真实存在的二层网络:本机和 WSL 侧的虚拟网卡通过 Hyper-V 虚拟交换机通信,彼此用 MAC 地址寻址。也就是说,交换机不一定是硬件盒子,也可以是软件。
交换机的三种转发方式
知道有这回事就够了,实际用不到:
| 方式 | 行为 | 特点 |
|---|---|---|
| 存储转发 | 收完整个帧、校验 FCS 通过后才转发 | 最可靠,但有延迟;现代主流 |
| 直通 | 只读到目的 MAC(前 6 字节)就开始转发 | 快,但会把损坏的帧也转发出去 |
| 无碎片 | 读到前 64 字节就转发 | 折中,避免转发冲突碎片 |
本机用的家用路由器内置交换模块,大概率是存储转发 —— 不过这一条是常见实现的推断,没有在你的设备上验证。
环路问题:为什么二层帧需要一个"防环协议"
交换机有一个致命弱点,也是下一章 STP 的由来:
二层帧里没有 TTL 字段。
回顾《以太网帧》里的帧格式:目的 MAC、源 MAC、类型、数据、FCS —— 没有任何"跳数"或"生存时间"字段。这意味着:
如果两台交换机之间不小心连成了环(或者插了两根网线):
交换机 A 发一个广播帧 → B 收到 → 转发给 C → C 转发给 A → A 又转发给 B ...
→ 缺少逐跳寿命限制,帧可反复循环,泛洪可产生副本;规模取决于拓扑与过滤
→ 几秒钟内,整个网络就被这一个帧的无数副本淹没这叫广播风暴,是二层网络最经典的故障,能让整个局域网瞬间瘫痪。
对比一下三层:IP 头里有 TTL 字段,每经过一台路由器就减 1,减到 0 就丢弃。所以单个IP包不会无限循环,但持续路由环路仍会导致丢包、资源浪费和业务中断。
二层没有这个保护机制,所以必须靠一个专门的协议来防止环路 —— 这就是生成树协议(STP),下一章的内容。
常见误解
误解一:"交换机和路由器差不多"
完全不同。交换机看 MAC 地址(二层),路由器看 IP 地址(三层)。普通二层交换机在同一VLAN内转发,并不按IP子网限制转发,路由器才能连接不同的网段。家用"路由器"其实是"路由器 + 交换机 + 无线接入点 + 防火墙"的合体,所以容易让人混淆。
误解二:"交换机需要配置才能用"
二层交换机零配置即可工作,因为它靠观察流量自建转发表。需要配置的是高级功能(VLAN、STP 参数、端口镜像等)。
误解三:"交换机隔离广播"
不隔离。 交换机隔离的是冲突域。广播帧会被泛洪到整个广播域。要隔离广播必须用 VLAN(下一章)或路由器。
误解四:"泛洪说明交换机坏了"
泛洪是正常机制:目的 MAC 不在表里、或者是广播/多播帧时,交换机就应该泛洪。只有当泛洪持续异常频繁时(比如表项容量被打满、或者存在环路),才是问题。
本章小结
| 结论 | 类型 |
|---|---|
| 集线器是物理层设备,只复制信号,所有口同属一个冲突域 | 标准 |
| 交换机是链路层设备,读帧头 MAC 决定从哪个口转发 | 标准 |
| 转发表靠"记录源 MAC + 入端口"自学,无需配置 | 标准 |
| 目的 MAC 不在表中时泛洪,这是正常机制而非故障 | 标准 |
| 交换机隔开冲突域,但不隔开广播域 | 标准 |
| 二层帧没有 TTL,连成环会导致广播风暴 | 标准 |
| 实测:本机与网关及 3 台邻居同处一段二层网络(ARP 可解析) | 实测 |
实测:WSL 侧存在一段由软件交换机承载的二层网络,两侧 MAC 同属 00-15-5D | 实测 |
| 三种转发方式中现代主流是存储转发 | 标准(本机未验证) |
自测题
6 题 · 先自己答,再展开对照
一台交换机刚通电,转发表是空的。此时收到第一个帧,它会怎么做?
泛洪 —— 从除入口外的所有端口发出去。因为它还不知道目的 MAC 在哪个口,只能先广播出去;同时它会学习这个帧的源 MAC 和入端口,记进转发表。交换机的转发表是怎么知道"某个 MAC 在哪个口"的?它需要向设备询问吗?
靠观察,不询问。 它记录"这个帧的源 MAC 是从哪个口进来的",因为从这个口进来的帧,发送方一定在那个方向。观察到的流量越多,表就越完整。交换机不需要任何配置或协议就能完成这件事,这也是它"插上就能用"的原因。一个广播帧(比如 ARP 请求)经过交换机时,交换机能不能只发给目标设备?为什么?
不能。 广播的定义就是"发给所有人",而交换机不知道(也不应该知道)"谁对广播感兴趣"。所以广播帧必须泛洪到整个广播域。这正是"交换机不隔离广播域"的含义,也是需要 VLAN 来划分广播域的原因。交换机和集线器都能连多台设备,它们在"冲突域"上的区别是什么?
交换机把冲突域隔开了(每个端口一个),集线器不隔(所有端口共享一个)。 集线器上任何两台设备通信,其他所有设备都必须等待;交换机上不同端口之间可以同时通信,互不影响。再配合全双工,交换机网络里实际上已经不存在冲突。为什么二层网络里连成环会瘫痪,而三层网络里连成环不会?
基本以太网帧缺少TTL,循环和泛洪可产生大量重复帧;IP的TTL限制单包循环,但持续三层环路也可使业务中断。二层防环可用STP、无环拓扑或其他合适机制,不只唯一一种协议。你在抓包时发现同一个包出现在交换机的多个端口上。这一定是故障吗?
不一定。 如果目的 MAC 不在转发表里,或者这是一个广播/多播帧,交换机本来就应该泛洪 —— 这是正常机制。只有持续异常的泛洪(比如转发表容量被打满、或者存在环路导致同一帧反复出现且数量越来越多)才是故障。
参考资料与适用范围
- IEEE 802.3as官方教学说明,第14–18页:基本及Q标签帧格式与长度
- Cisco:STP端口状态与防环
- Cisco无线RF参考指南:半双工、速率与信道
- RFC 1812 §4.3、§5.3、§7:ICMP选源、TTL与路由
修订核对日期:2026-10-13。规则按所列协议与实现范围理解;文中的原始命令输出是历史观察,不表示本次重新实测。跨版本、代理/隧道及不同捕获位置需要另行核对。