交换机 MAC 地址表
·
交换机 MAC 地址表深度解析:从老化机制到故障排查
一、引言
在交换机二层转发中,MAC 地址表(MAC Address Table) 是核心枢纽。交换机通过记录“MAC 地址 ↔ 端口 ↔ VLAN”的映射关系,实现数据帧的精确转发。然而,在日常运维中,我们经常会遇到诸如“端口明明 UP 却看不到 MAC 地址”、“关了 MAC 学习还能不能通”等问题。本文基于实际排障场景,系统梳理 MAC 地址表的工作原理、老化机制、管理命令及常见故障排查思路。
二、MAC 地址表基础
2.1 什么是 MAC 地址表?
MAC 地址表是交换机用于二层转发的数据库,每条表项包含:
| 字段 | 说明 |
|---|---|
| MAC Address | 设备的 MAC 地址 |
| VLAN ID | 该 MAC 所属的 VLAN |
| Port | 学习到该 MAC 的端口 |
| STATE | 表项类型(动态/静态/黑洞/安全) |
| AGING TIME | 是否参与老化 有的交换机可能没有 |

2.2 动态学习原理
当交换机从某个端口收到一个数据帧时:
- 提取帧的源 MAC 地址。
- 查找 MAC 表中是否已有该 MAC 的记录。
- 如果没有,则创建新表项;如果已有但端口/VLAN 不同,则更新。
- 同时重置该表项的老化定时器。
三、MAC 地址的“生命周期”——老化机制
3.1 默认老化时间
绝大多数交换机(华为、华三、思科等)的动态 MAC 地址默认老化时间为 300 秒(5 分钟)。
3.2 老化与刷新机制
- 刷新条件:只有收到以该 MAC 为源 MAC 的数据帧时,才会重置定时器。
- 不刷新:仅收到发往该 MAC 的帧,不会刷新。
- 删除:连续 300 秒未收到源 MAC 帧,表项被自动删除。
3.3 查看与修改老化时间
# 查看当前老化时间
display mac-address aging-time
# 修改老化时间(系统视图,单位:秒)
system-view
mac-address aging-time 600 # 设置为 600 秒
设置为
0表示动态 MAC 永不老化(不推荐,可能导致 MAC 表耗尽)。
3.4 哪些 MAC 地址“永不老化”?
| 类型 | 说明 | 命令示例 |
|---|---|---|
| 静态 MAC | 手动绑定,重启不丢失 | mac-address static xxxx GigabitEthernet 0/0/2 vlan 10 |
| 黑洞 MAC | 丢弃匹配该 MAC 的流量 | mac-address blackhole xxxx vlan 10 |
| 粘滞 MAC | 端口安全自动绑定 | port-security mac-address sticky |
3.5 如何判断 MAC 还剩多久被删除?
大多数交换机不直接显示剩余秒数,可通过以下方法估算:
- 两次采样法:间隔一段时间后再次查看表项是否还存在。
- 触发刷新:在对端设备执行
ping后立即查看,表项应重新出现。 - 高端平台:部分 CloudEngine 系列支持
display mac-address verbose,可显示已存活时间。
四、关闭 MAC 地址学习的影响
4.1 关闭后还能 Ping 通吗?
通常情况下,仍然可以 Ping 通。
关闭 MAC 学习(mac-address learning disable)后:
- 交换机不再记录源 MAC。
- 当需要将数据发往该设备时,查表失败,会将帧作为未知单播在 VLAN 内泛洪。
- 对端设备仍能收到帧并回复,通信正常。
本质上,交换机退化为**集线器(Hub)**模式。
4.2 什么时候会真正不通?
如果同时配置了以下策略,则会导致通信失败:
| 附加配置 | 效果 |
|---|---|
丢弃未知单播(unknown-unicast discard) | 查表失败直接丢包 |
| 端口隔离 | 泛洪流量也不允许转发 |
| 端口安全 | 未绑定 MAC 被丢弃 |
| ACL/MAC 过滤 | 明确拒绝流量 |
4.3 关闭学习的副作用
- 带宽浪费:所有单播流量泛洪,广播域扩大。
- 安全风险:任何设备可嗅探到本应单播的流量。
- 排障困难:
display mac-address看不到任何动态表项,容易误判为“未接入设备”。 - CPU 负担:大量泛洪帧可能触发 CPU 处理。
五、典型故障:端口 UP 但看不到 MAC 地址
5.1 故障现象
display mac-address interface GigabitEthernet 0/0/2
# 返回空,无任何 MAC 表项
5.2 可能原因分类
(1)对端设备侧
- 设备未开机、网卡禁用、系统未启动完成。
- 网卡驱动异常或处于休眠状态。
- 防火墙/安全软件禁用了所有出站流量。
- 未配置 IP 或网关,未触发 ARP 请求。
(2)链路与协商
- 双工/速率不匹配导致大量丢包。
- 链路质量差(光模块收发光异常、网线干扰)。
- 网线线序错误,本端误判为 UP。
(3)交换机配置(最常见)
- MAC 学习被关闭:
mac-address learning disable。 - 端口为三层模式:
undo portswitch。 - 端口安全限制:
port-security enable且模式为protect/restrict/shutdown。 - VLAN 配置错误:Access/Trunk VLAN 不匹配。
- STP 阻塞:端口状态为
DISCARDING。 - 端口隔离或 ACL 过滤。
5.3 排查步骤
# 1. 查看端口状态和错包
display interface GigabitEthernet 0/0/2
# 2. 查看端口配置
display current-configuration interface GigabitEthernet 0/0/2
# 3. 检查 STP 状态
display stp brief | include GigabitEthernet0/0/2
# 4. 在对端触发流量后再次查看
display mac-address dynamic interface GigabitEthernet 0/0/2
六、MAC 地址表的管理与维护
6.1 清空 MAC 地址
| 操作范围 | 命令 |
|---|---|
| 指定接口 | undo mac-address dynamic interface GigabitEthernet 0/0/2 |
| 指定 VLAN | undo mac-address dynamic vlan 10 |
| 所有动态 MAC | undo mac-address dynamic |
| 指定 MAC 地址 | undo mac-address xxxx-xxxx-xxxx |
| 静态/黑洞 MAC | undo mac-address static / undo mac-address blackhole |
6.2 注意事项
- 清空动态 MAC 后,流量会先泛洪再重新学习,可能造成短暂广播风暴。
- 静态/粘滞 MAC 不会被
dynamic参数删除。 - 在关闭 MAC 学习的端口上,清空命令无实际意义。
七、总结与常用命令速查
7.1 核心要点
- 动态 MAC 默认 300 秒老化,有流量则续命。
- 关 MAC 学习 ≠ 不通,但会退化为泛洪模式。
- 端口 UP 无 MAC 多因对端静默、配置错误(关学习/VLAN/STP)或链路问题。
- 静态/粘滞 MAC 不老化,需手动管理。
7.2 常用命令一览
display mac-address # 查看所有 MAC 表项
display mac-address interface GigabitEthernet 0/0/2 # 查看指定端口
display mac-address aging-time # 查看老化时间
display mac-address verbose # 详细信息(部分平台)
undo mac-address dynamic interface G0/0/2 # 清空指定端口动态 MAC
mac-address learning disable # 关闭 MAC 学习(接口视图)
display stp brief # 检查 STP 状态
display interface G0/0/2 # 检查端口错包
排障口诀:
端口 UP 无 MAC,先看对端发不发;
再查学习有没有,VLAN、STP 莫漏下;
老化默认三百秒,清表泛洪要记牢。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)