交换机 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是否参与老化 有的交换机可能没有

mac地址

2.2 动态学习原理

当交换机从某个端口收到一个数据帧时:

  1. 提取帧的源 MAC 地址。
  2. 查找 MAC 表中是否已有该 MAC 的记录。
  3. 如果没有,则创建新表项;如果已有但端口/VLAN 不同,则更新。
  4. 同时重置该表项的老化定时器。

三、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 还剩多久被删除?

大多数交换机不直接显示剩余秒数,可通过以下方法估算:

  1. 两次采样法:间隔一段时间后再次查看表项是否还存在。
  2. 触发刷新:在对端设备执行 ping 后立即查看,表项应重新出现。
  3. 高端平台:部分 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
指定 VLANundo mac-address dynamic vlan 10
所有动态 MACundo mac-address dynamic
指定 MAC 地址undo mac-address xxxx-xxxx-xxxx
静态/黑洞 MACundo mac-address static / undo mac-address blackhole

6.2 注意事项

  • 清空动态 MAC 后,流量会先泛洪再重新学习,可能造成短暂广播风暴。
  • 静态/粘滞 MAC 不会被 dynamic 参数删除。
  • 在关闭 MAC 学习的端口上,清空命令无实际意义。

七、总结与常用命令速查

7.1 核心要点

  1. 动态 MAC 默认 300 秒老化,有流量则续命。
  2. 关 MAC 学习 ≠ 不通,但会退化为泛洪模式。
  3. 端口 UP 无 MAC 多因对端静默、配置错误(关学习/VLAN/STP)或链路问题。
  4. 静态/粘滞 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 莫漏下;
老化默认三百秒,清表泛洪要记牢。


Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐