第5篇:二层交换机原理——MAC 地址表是如何学习的

一、写在前面

交换机是网络中最常见的设备,但你真的理解它是如何工作的吗?

很多新工程师以为交换机"插上网线就能通",但只知道怎么用、不知道为什么能通,遇到复杂故障就无从下手。

本文用最易懂的方式,讲清楚二层交换机的三个核心机制:

  1. MAC 地址学习
  2. 转发决策(泛洪 / 转发 / 过滤)
  3. 广播与未知单播泛洪

二、交换机能做什么?

一句话:交换机根据 MAC 地址表,在端口之间转发以太网帧。

它有三大基本能力:

能力 说明
学习 从收到的帧中提取源 MAC,记录到 MAC 地址表
转发 查 MAC 地址表,找到目标 MAC 对应的端口转发
过滤 目标端口和源端口相同,丢弃(不转发)

三、MAC 地址表长什么样?

登录交换机看一眼:

<Huawei> display mac-address
------------------------------------------------------------------
MAC Address      VLAN  Learned-From        Type        Age
------------------------------------------------------------------
00e0-fc00-0001   10    GigabitEthernet0/0/1 dynamic     210
00e0-fc00-0002   10    GigabitEthernet0/0/2 dynamic     180
00e0-fc00-0003   20    GigabitEthernet0/0/3 dynamic     300
------------------------------------------------------------------

每个条目包含:

字段 含义
MAC Address 设备的 MAC 地址
VLAN 该 MAC 所在的 VLAN
Learned-From 从哪个端口学到的
Type dynamic=动态学习, static=静态配置, blackhole=黑洞
Age 距离上次刷新的秒数

四、MAC 地址学习过程

让我们用一个场景来理解:两台 PC 接在同一台交换机上。

         [Switch]
    G0/0/1      G0/0/2
       │          │
    PC-A        PC-B
    MAC: A      MAC: B
    IP: 10.1    IP: 10.2

第 1 步:初始状态 MAC 表为空

MAC 地址表:空

第 2 步:PC-A 发送数据给 PC-B

PC-A 发出一个以太网帧: - 源 MAC = A - 目的 MAC = B

交换机从 G0/0/1 收到该帧:

学习阶段: 交换机把源 MAC (A) 记录到 MAC 地址表:

MAC A  ── 从 G0/0/1 学到  ──→  表项:A → G0/0/1

转发阶段: 查 MAC 地址表,找目的 MAC (B): - 表里没找到 B → 未知单播 - 从除了接收端口以外的所有端口转发出去 → 泛洪

┌─ 交换机 ───────────────┐ MAC 表: A → G0/0/1 (刚学到) PC-A的帧 从G0/0/1进来 → 泛洪到 G0/0/2

第 3 步:PC-B 回复

PC-B 回复一个帧: - 源 MAC = B - 目的 MAC = A

交换机从 G0/0/2 收到:

学习阶段:

MAC B  ── 从 G0/0/2 学到  ──→  表项:B → G0/0/2

转发阶段: 查表找 MAC A: - 找到了 → 从 G0/0/1 精确转发

此时 MAC 地址表:

MAC A → G0/0/1
MAC B → G0/0/2

两台设备之间后续通信都精确转发,不再泛洪。


五、三种转发行为

5.1 泛洪(Flooding)

场景:目的 MAC 不在 MAC 地址表中。

动作:从接收端口外的所有其他端口转发一份。

影响:浪费带宽,会降低网络效率。

5.2 转发(Forwarding)

场景:目的 MAC 在表中,且有对应端口。

动作:只从该端口转发出去。

效率:最高,只发往目标设备。

5.3 过滤(Filtering)

场景:目的 MAC 对应的端口等于接收端口。

动作:丢弃该帧,不转发。

意义:避免一个端口进来的帧又从同一端口出去。


六、MAC 地址表的维护

6.1 老化时间(Aging Time)

MAC 地址表条目不会永久存在,默认老化时间通常是 300 秒(5 分钟)

事件 行为
设备持续通信 每次收到帧刷新 Age 计数器
设备静默 5 分钟 表项被删除
设备下线 表项自然老化删除

为什么要老化? - MAC 表容量有限 - 防止设备移走后的错误转发 - 适应网络拓扑变化

6.2 查看和配置老化时间

# 查看当前老化时间
<Huawei> display mac-address aging-time

# 修改老化时间(全局)
[Huawei] mac-address aging-time 600

6.3 静态 MAC 地址

对于关键设备(服务器、网络设备),可以手动配置静态 MAC 条目:

[Huawei] mac-address static 00e0-fc00-00a0 gigabitethernet 0/0/24 vlan 10

优点:不会被老化,防止 MAC 欺骗。


七、广播与泛洪的区别

很多新工程师混淆这两个概念:

概念 定义 原因
广播 目的 MAC = FF-FF-FF-FF-FF-FF 主动发向所有设备(如 ARP 请求)
泛洪 目的 MAC 未知,交换机自动行为 交换机不知道目标在哪,只好全发

交换机对广播帧的处理:永远泛洪(因为广播 MAC 不会被学习到 MAC 表中)。


八、MAC 地址表的局限性

局限 说明
无法跨 VLAN 通信 MAC 表是 VLAN 隔离的,不同 VLAN 的 MAC 互不可见
MAC 表大小有限 低端交换机 8K,中端 16K~32K,高端 128K+
MAC 漂移 同一 MAC 在不同端口出现(环路或配置错误)
无法做路径选择 二层不懂路由,只能桥接不能路由

九、工程经验与排错

9.1 查看某个 MAC 在哪个端口

<Huawei> display mac-address 00e0-fc00-0001

实战场景:用户报"上网慢",查发现某个服务器的 MAC 飘到了接入交换机的另一个端口——确认是环路导致的 MAC 漂移。

9.2 MAC 表满了会怎样?

交换机 MAC 表满后,新到的帧找不到目的 MAC 就全部泛洪: - 广播风暴风险 - 整网性能下降 - CPU 负载升高

排查display mac-address statistics 查看 MAC 表使用率。

9.3 端口安全

限制端口能学习到的 MAC 地址数量:

[Huawei-GigabitEthernet0/0/1] port-security enable
[Huawei-GigabitEthernet0/0/1] port-security max-mac-num 3
[Huawei-GigabitEthernet0/0/1] port-security mac-address sticky

用途:防止私接交换机(HUB 扩展),防止 MAC 泛洪攻击。


十、思考

  1. 交换机收到一个目的 MAC 未知的帧,它会怎么处理?
  2. MAC 地址表为什么要设置老化时间?设得太长或太短各有什么问题?
  3. 广播和泛洪的根本区别是什么?
  4. 两台 PC 通过交换机通信,初始时 MAC 地址表是空的,第一次通信的帧经过几次泛洪?
  5. 如果交换机的 MAC 地址表满了,会对网络产生什么影响?
  6. 静态 MAC 地址和动态 MAC 地址有什么区别?什么场景需要配静态?

十一、小结思维导图

二层交换机工作原理
    │
    ├─ MAC 地址学习
    │    ├─ 从接收帧提取源 MAC + 端口
    │    └─ 动态学习,5 分钟老化
    │
    ├─ 转发决策
    │    ├─ 已知单播 → 精确转发
    │    ├─ 未知单播 → 泛洪
    │    ├─ 广播     → 泛洪
    │    └─ 源目同端口 → 过滤
    │
    └─ 维护与管理
         ├─ 老化时间配置
         ├─ 静态 MAC 绑定
         └─ MAC 地址表监控

下篇预告:第6篇《一文读懂ARP_广播请求与应答过程》——理解ARP协议的工作流程,掌握广播请求与应答的完整过程。