DC娱乐网

MAC 学习 与 泛洪很多人都搞不清,这篇文章解释清楚了!

打开交换机的世界,你会发现两样看似反向的行为经常同时发生:一方面交换机在悄悄记住谁在哪个端口(MAC 学习),另一方面它

打开交换机的世界,你会发现两样看似反向的行为经常同时发生:一方面交换机在悄悄记住谁在哪个端口(MAC 学习),另一方面它又在大声喊话把帧发给“所有人”(泛洪)。乍看矛盾,其实二者是二层转发机制互补的两面:学习带来精准转发,泛洪保证未知目标不丢包。理解二者如何协作,对做设计、排障和优化都至关重要。

先说结论(方便记忆)MAC 学习(Learning):交换机通过观察帧的源 MAC 来构建 MAC 表(CAM 表),实现“定点投递”。这是交换机实现高效转发的核心机制。泛洪(Flooding):当目标 MAC 不在 MAC 表中(或是广播/多播/未知单播),交换机会将帧发到除来源端口外的所有端口,保证目标主机能收到帧。两者不是对立,而是互补:学习减少泛洪;泛洪弥补“未知”带来的盲点。MAC 学习

每个以太网帧都有源 MAC 和目的 MAC。交换机接收到帧时,先读取源 MAC和该帧进入的物理端口,并在 MAC 表中记录:MAC -> port(同时带上时间戳)。这一步称为学习(learning)。

典型的 MAC 表项包含:MAC 地址、端口、VLAN、类型(静态/动态)、学习时间(timestamp)等。动态学习的条目有老化定时器(aging time),常见默认值为 300 秒(厂商可配置)。老化的目的是清理长期不活跃或搬迁的设备,避免 CAM 表膨胀和错误转发。

当交换机看到目标 MAC 在表中时就做单播转发:只把帧发到对应端口——这是交换机效率远超集线器(hub)的关键。

泛洪

泛洪并不是“意外”,而是二层设计的必要行为。

泛洪发生的典型场景:

未知单播(Unknown Unicast):目的 MAC 不在本交换机的 MAC 表中。交换机无法定位目标,只能泛洪。广播(Broadcast):目的 MAC 为 FF:FF:FF:FF:FF:FF(例如 ARP 请求);必须发给广播域内所有设备。多播(Multicast)在未做 IGMP Snooping 的情况下:传统交换机会把多播当作广播泛洪。

广播/未知单播/未经侦听的多播 —— 交换机都会选择泛洪(或多播泛洪)以保证连通性。

具体帧流

场景:交换机 S,有端口 Fa0/1 连接主机 A(MAC A),Fa0/2 连接主机 B(MAC B),Fa0/3 连接主机 C(MAC C)。初始 MAC 表为空。

A 发送给 B(帧:src=A dst=B)S 从帧读取 src=A,记录 A -> Fa0/1(学习)查表发现 dst=B 不存在 → 泛洪:帧发到 Fa0/2、Fa0/3当 B 收到帧并回包或发送 ARP,应答时,S 学到 B -> Fa0/2,下次 A 发给 B 就定向转发。之后 A 再发给 BS 已有 B->Fa0/2,直接把帧发到 Fa0/2(无泛洪)

这说明:第一次通信常伴随泛洪,学习随之发生,从而为后续通信提供精准转发。

两者的性能与资源影响泛洪的代价网络带宽浪费:一个未知单播会被复制到所有端口(N-1 份),在端口多或链路窄时,容易引发拥塞。CPU/缓冲压力:大量泛洪帧会占用交换机缓存,甚至引起丢包。安全风险:敏感帧被更多主机接收,增加被嗅探的概率。学习的限制与风险CAM 表容量有限(硬件 TCAM/CAM);大量设备或吓人的 MAC 学习速率(如 MAC 风暴)会导致表溢出,进而退化为泛洪(因为表项被覆盖或丢失)。MAC 颠簸(MAC flapping):同一 MAC 在不同端口频繁切换,交换机不断更新 MAC 表,导致转发不稳定,可能是环路或恶意行为(MAC spoofing)引起。与生成树、VLAN、Trunk 的互动生成树协议(STP):防止二层环路,若 STP 无效或配置不当,环路会导致广播/未知单播在环中循环放大,触发广播风暴与 MAC flapping。VLAN 与 Trunk:MAC 表是以 VLAN 为维度的(MAC + VLAN -> port)。Trunk 上传递带标签的帧,学习与泛洪都按 VLAN 范围进行隔离。跨 VLAN 通信需要三层转发(路由),不会通过泛洪直接穿越 VLAN 边界。常见问题与排查步骤问题 A:网络忽然变慢,大量未知单播/广播?

检查顺序:

show mac address-table / show mac address-table dynamic(查看 CAM 表)show interfaces / show interface counters errors(查看端口流量与错误)show spanning-tree(查看 STP 状态)使用端口镜像 & Wireshark 捕获,观察是否有大量 ARP 或未知单播洪泛包。

可能原因:

某台主机发起洪泛(病毒、蠕虫、误配置)CAM 表溢出(攻击或设备过多)二层环路(STP 未收敛或被禁用)问题 B:某 MAC 在 A、B 端口来回切换(MAC flapping)

排查:

show mac address-table address <mac>(定位端口)检查是否有环路、链路聚合(LACP)配置不当、或虚拟化平台(VM迁移)在频繁移动 MAC。

以 Cisco 为例

查看 MAC 表:

Switch# show mac address-table

查看特定 MAC:

Switch# show mac address-table address 00-11-22-33-44-55

配置端口安全:

Switch(config)# interface fa0/1 Switch(config-if)# switchport mode access Switch(config-if)# switchport port-security Switch(config-if)# switchport port-security maximum 2 Switch(config-if)# switchport port-security mac-address sticky Switch(config-if)# switchport port-security violation shutdown

开启 storm-control

Switch(config-if)# storm-control broadcast level 2.00 1.00