第5篇:二层交换机原理:MAC 地址表是如何学习的
关键词:二层交换机 MAC地址表 地址学习 帧转发 泛洪 广播 VLAN 华为设备
一、引言
交换机是局域网中最常见的设备,但它并非简单的"网线插线板"。当一台 PC 发送数据帧进入交换机后,交换机会做出一个精确的决策:这个帧应该从哪个端口发出去?这个决策的依据就是 MAC 地址表。
一个真实的案例:某网络管理员抱怨"交换机太慢了,数据包要排队"。实际上,现代交换机的转发速度以线速(Wire-speed)运行,延迟仅为微秒级。真正影响局域网性能的不是交换机本身,而是广播风暴、MAC 地址表溢出或环路等配置问题。
本文将从交换机的工作原理出发,深入讲解 MAC 地址学习、帧转发决策、泛洪机制以及华为交换机上的验证方法。
二、交换机与 Hub 的本质区别
2.1 Hub(集线器):无脑转发
Hub 是物理层(L1)设备,它没有任何智能。收到一个信号后,Hub 将其放大并从所有端口复制出去(除了接收端口)。这导致: - 所有端口共享带宽 - 任意两台主机通信都会占用所有端口 - 无法隔离冲突域
2.2 交换机(Switch):智能转发
交换机是数据链路层(L2)设备,它的核心能力是根据目的 MAC 地址进行精确转发: - 每个端口拥有独立带宽 - 只在目标端口发送数据 - 每个端口是一个独立的冲突域
| 对比维度 | Hub(集线器) | Switch(交换机) |
|---|---|---|
| 工作层次 | L1(物理层) | L2(数据链路层) |
| 转发方式 | 广播式(全部端口) | 查表转发(精确端口) |
| 带宽 | 共享带宽 | 每端口独立带宽 |
| 冲突域 | 所有端口一个冲突域 | 每个端口独立冲突域 |
| 当前状态 | 已基本淘汰 | 主流设备 |
三、MAC 地址基础知识
3.1 MAC 地址格式
MAC 地址(Media Access Control Address)是全球唯一的 48 位(6 字节)标识符,以十六进制表示,如 00E0.FC12.3456。
| 部分 | 长度 | 说明 |
|---|---|---|
| OUI(组织唯一标识符) | 前 24 位 | 厂商编码,由 IEEE 统一分配 |
| 序列号 | 后 24 位 | 厂商自行分配,保证唯一性 |
| 第 40 位(第 3 字节最低位) | 1 bit | 0 = 单播,1 = 广播 |
| 第 41 位(第 3 字节次低位) | 1 bit | 0 = 全球管理(厂家烧录),1 = 本地管理(软件生成) |
3.2 MAC 地址类型
| 类型 | MAC 地址 | 说明 |
|---|---|---|
| 单播 | 第 40 位 = 0 | 发给特定一台设备 |
| 组播 | 第 40 位 = 0,第 41 位 = 1 | 发给一组设备 |
| 广播 | FFFF.FFFF.FFFF |
发给同一广播域内所有设备 |
3.3 查看 MAC 地址
# Windows 查看本机 MAC
ipconfig /all
# 输出示例:物理地址 . . . . . . . . . . : 00-1A-2B-3C-4D-5E
# Linux 查看本机 MAC
ip link
# 输出示例:link/ether 00:1a:2b:3c:4d:5e
# 华为交换机查看 MAC 地址表
display mac-address
四、MAC 地址学习过程
4.1 核心机制:源 MAC 学习
交换机学习 MAC 地址的核心规则是:看源 MAC,不看目的 MAC。每当一个数据帧从某个端口进入交换机,交换机会提取该帧的源 MAC 地址,并将其与进入端口的映射关系记录到 MAC 地址表中。

4.2 详细示例:从学习到精确转发
假设一台华为 S5720 交换机有三个端口连接了三台设备:
| 端口 | 设备 | MAC 地址 | IP 地址 |
|---|---|---|---|
| GE0/0/1 | PC_A | AA-AA-AA-AA-AA-01 | 192.168.1.101 |
| GE0/0/2 | PC_B | AA-AA-AA-AA-AA-02 | 192.168.1.102 |
| GE0/0/3 | PC_C | AA-AA-AA-AA-AA-03 | 192.168.1.103 |
第一阶段:初始状态,MAC 地址表为空
- PC_A 首次发送数据帧给 PC_B
- 交换机从 GE0/0/1 收到帧
- 学习:记录
AA-AA-AA-AA-AA-01 → GE0/0/1 - 查表:目的 MAC
AA-AA-AA-AA-AA-02不在表中 - 泛洪:从 GE0/0/2 和 GE0/0/3 转发该帧
- PC_B 收到帧并处理,PC_C 收到帧但丢弃(目的 MAC 不匹配)
第二阶段:PC_B 回复 PC_A
- PC_B 发送回复帧给 PC_A
- 交换机从 GE0/0/2 收到帧
- 学习:记录
AA-AA-AA-AA-AA-02 → GE0/0/2 - 查表:目的 MAC
AA-AA-AA-AA-AA-01在表中,对应 GE0/0/1 - 精确转发:仅从 GE0/0/1 转发
第三阶段:稳定状态
此时 MAC 地址表已学习完毕,后续所有单播通信均为精确转发,不再泛洪。
4.3 MAC 地址表老化
MAC 地址表不是永久存储的。如果某个 MAC 地址对应的端口在一段时间内没有收到该 MAC 的数据帧,表项会被自动删除。
| 参数 | 华为默认值 | 说明 |
|---|---|---|
| 老化时间 | 300 秒(5 分钟) | 无更新则删除 |
| MAC 地址表容量 | 16K/32K/80K(因型号而异) | 到达上限后停止学习新 MAC |
# 查看 MAC 地址老化时间
[HUAWEI] display aging-time
# 修改 MAC 地址老化时间(秒)
[HUAWEI] mac-address timer aging 600
五、交换机帧转发的三种行为
5.1 已知单播(Known Unicast)
- 条件:MAC 地址表中存在目的 MAC 的记录
- 行为:仅从对应端口转发数据帧
- 示例:PC_A → PC_B,表中已知 PC_B 在 GE0/0/2,仅从 GE0/0/2 发出
5.2 未知单播(Unknown Unicast)
- 条件:MAC 地址表中不存在目的 MAC 的记录
- 行为:泛洪(Flooding),从同一 VLAN 内除接收端口外的所有端口转发
- 场景:新设备首次通信时必然发生未知单播泛洪
5.3 广播和组播
- 条件:目的 MAC 为广播地址(FFFF.FFFF.FFFF)或组播地址
- 行为:泛洪到同一 VLAN 内的所有端口
- 说明:ARP 请求、DHCP Discover 均为广播帧,会触发泛洪
5.4 转发行为总结
| 帧类型 | 目的 MAC 状态 | 行为 | 是否占用全网带宽 |
|---|---|---|---|
| 已知单播 | 表中存在 | 精确转发到单一端口 | 否 |
| 未知单播 | 表中不存在 | 泛洪到同 VLAN 所有端口 | 是 |
| 广播 | FFFF.FFFF.FFFF | 泛洪到同 VLAN 所有端口 | 是 |
| 组播 | 组播 MAC | 泛洪(未配置组播优化时) | 是 |
六、华为交换机 MAC 地址表管理
6.1 查看 MAC 地址表
# 查看所有 MAC 地址表项
[HUAWEI] display mac-address
# 输出示例:
# MAC Address VLAN Type Interfaces
# AA-AA-AA-AA-AA-01 10 Dynamic GE0/0/1
# AA-AA-AA-AA-AA-02 10 Dynamic GE0/0/2
# AA-AA-AA-AA-AA-03 10 Dynamic GE0/0/3
# FFFF-FFFF-FFFF 1 Static All
# 查看指定接口的 MAC 地址
[HUAWEI] display mac-address interface GigabitEthernet 0/0/1
# 查看指定 MAC 地址
[HUAWEI] display mac-address AA-AA-AA-AA-AA-01
6.2 MAC 地址表类型
| 类型 | 产生方式 | 掉电是否保留 | 老化 |
|---|---|---|---|
| Dynamic(动态) | 交换机自动学习 | 否 | 是(老化时间到后删除) |
| Static(静态) | 手动配置 | 否 | 否 |
| Blackhole(黑洞) | 手动配置 | 否 | 否(丢弃目的为该 MAC 的帧) |
6.3 静态 MAC 配置
# 将某个 MAC 地址静态绑定到指定端口和 VLAN
[HUAWEI] mac-address static AA-AA-AA-AA-AA-FF vlan 10 interface GigabitEthernet 0/0/24
# 配置黑洞 MAC(丢弃目的为此 MAC 的帧,用于安全隔离)
[HUAWEI] mac-address blackhole AA-AA-AA-AA-AA-BB vlan 10
6.4 MAC 地址表溢出故障案例
故障现象:某办公区域 30 台终端频繁断网,每次断网持续约 5 分钟后自动恢复。
排查过程:
# 查看 MAC 地址表项数
[HUAWEI] display mac-address statistics
# 发现表项数已达最大值 16384
# 查看 MAC 漂移告警
[HUAWEI] display trapbuffer
# 发现某 MAC 地址在 GE0/0/5 和 GE0/0/12 之间频繁漂移
根因分析:某员工私接了一个 Hub 到交换机端口 GE0/0/5,Hub 下又接了多台设备。这些设备与网络中已有设备的 MAC 地址发生冲突(实际是两台不同 VLAN 的设备使用了相同的 MAC 地址克隆的虚拟机),导致 MAC 地址表项不断被覆盖和刷新,最终表项溢出。
解决方案: 1. 更换 Hub 为小型交换机 2. 将 MAC 地址表容量升级(更换更大规格交换机) 3. 启用端口安全,限制每个端口最大学习 MAC 数量
# 启用端口 MAC 地址数量限制
[HUAWEI] interface GigabitEthernet 0/0/5
[HUAWEI-GigabitEthernet0/0/5] mac-limit enable
[HUAWEI-GigabitEthernet0/0/5] mac-limit maximum 5
[HUAWEI-GigabitEthernet0/0/5] mac-limit action shutdown # 超限则关闭端口
七、总结
| 概念 | 说明 | 关键点 |
|---|---|---|
| MAC 地址学习 | 看源 MAC 记录端口映射 | 只学源,不学目的 |
| 已知单播转发 | 查表命中,精确转发 | 交换机最高效的转发方式 |
| 未知单播泛洪 | 查表未命中,泛洪到同 VLAN | 首次通信必有泛洪 |
| MAC 老化 | 超时未更新则删除 | 默认 300 秒 |
| MAC 表溢出 | 表项数达到上限 | 导致新设备无法通信 |
核心要点: 1. 交换机转发的核心是 MAC 地址表,通过"学习源 MAC"自动构建 2. 交换机启动后需要一定的"学习期"才能完成精确转发,初期泛洪是正常现象 3. MAC 地址表有容量限制,需根据端口数和终端密度选择合适规格的设备 4. MAC 地址漂移是环路或非法集线器的典型特征,需及时排查 5. 华为交换机支持动态、静态、黑洞三种 MAC 表项类型
思考题
- 一台交换机连接了 100 台 PC,如果某台新 PC 首次发送数据给另一台 PC,交换机会如何处理这个数据帧?请描述完整的学习和转发过程。
- MAC 地址表老化时间设置得太短或太长各有什么影响?
- 如果两台 PC 之间的通信始终无法命中 MAC 地址表(始终泛洪),可能的原因有哪些?
下篇预告
交换机通过 MAC 地址实现了二层转发,但 MAC 地址和 IP 地址之间是如何关联的?当 PC 要发送数据给另一个 IP 地址时,它怎么知道对方的 MAC 地址?下一篇文章《一文读懂 ARP:广播请求与应答过程》将揭秘 IP 到 MAC 的解析魔法。