第5篇:二层交换机原理——MAC 地址表是如何学习的
一、写在前面
交换机是网络中最常见的设备,但你真的理解它是如何工作的吗?
很多新工程师以为交换机"插上网线就能通",但只知道怎么用、不知道为什么能通,遇到复杂故障就无从下手。
本文用最易懂的方式,讲清楚二层交换机的三个核心机制:
- MAC 地址学习
- 转发决策(泛洪 / 转发 / 过滤)
- 广播与未知单播泛洪
二、交换机能做什么?
一句话:交换机根据 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 泛洪攻击。
十、思考
- 交换机收到一个目的 MAC 未知的帧,它会怎么处理?
- MAC 地址表为什么要设置老化时间?设得太长或太短各有什么问题?
- 广播和泛洪的根本区别是什么?
- 两台 PC 通过交换机通信,初始时 MAC 地址表是空的,第一次通信的帧经过几次泛洪?
- 如果交换机的 MAC 地址表满了,会对网络产生什么影响?
- 静态 MAC 地址和动态 MAC 地址有什么区别?什么场景需要配静态?
十一、小结思维导图
二层交换机工作原理
│
├─ MAC 地址学习
│ ├─ 从接收帧提取源 MAC + 端口
│ └─ 动态学习,5 分钟老化
│
├─ 转发决策
│ ├─ 已知单播 → 精确转发
│ ├─ 未知单播 → 泛洪
│ ├─ 广播 → 泛洪
│ └─ 源目同端口 → 过滤
│
└─ 维护与管理
├─ 老化时间配置
├─ 静态 MAC 绑定
└─ MAC 地址表监控
下篇预告:第6篇《一文读懂ARP_广播请求与应答过程》——理解ARP协议的工作流程,掌握广播请求与应答的完整过程。