交换机 MAC 地址表:学习、老化与泛洪

查询排障

交换机与集线器的根本差别在于它知道该把帧发往哪个端口,而这份知识来自一张动态维护的 MAC 地址表,也常被称为 CAM 表。理解它的三种行为,基本就理解了二层转发。

学习:从源地址建表

交换机不需要任何配置就能建表。每收到一个帧,它读取源 MAC 地址,记下"这个地址出现在这个端口的这个 VLAN 里"。表项形如:

VLANMAC 地址端口
1000:1B:A9:12:34:56Gi1/0/3
1040:6C:8F:18:2C:03Gi1/0/7

注意学习依据的是源地址而不是目标地址。这意味着交换机只能通过设备说话来认识它。一台从不发包、只接收的设备,在表里不会出现。

转发决策:三种情况

收到帧之后,交换机查目标 MAC:

表里有且不是入口。 只从对应端口发出,这是交换机高效的来源。

表里有且就是入口。 直接丢弃。目标和源在同一端口说明发送方自己会收到,无需转发。

表里没有。 向该 VLAN 内除入口外的所有端口泛洪。这时行为和集线器一样。目标设备收到后通常会回应,回应帧让交换机学到它的位置,此后就不再泛洪。

广播帧和组播帧也走泛洪路径,映射规则见组播 MAC 地址,保留地址清单见广播地址与特殊 MAC 地址。

老化:表项不会永久保留

表项有老化时间,典型默认值是 300 秒。计时在该地址再次作为源出现时重置。设备拔线或长时间不发包,条目就被清除,后续发给它的帧重新泛洪。

老化时间短会增加泛洪,长会导致设备移动后转发到旧端口。默认值对大多数网络合适,不建议随意调整。有一个例外:生成树拓扑变化时,交换机会主动快速清空相关表项,避免按旧拓扑转发。

查看当前表:

show mac address-table
show mac address-table count

容量与 MAC 泛洪攻击

MAC 地址表有硬件容量上限,接入层交换机常见几千到几万条。攻击者可以持续发送大量伪造源 MAC 的帧,把表填满。表满之后新地址无法学习,交换机对大量流量退化为泛洪,攻击者在任意端口就能嗅探到本不该经过自己的流量。这就是 MAC 泛洪攻击,也叫 CAM 表溢出。

防御手段是端口安全:限制单个端口可学习的 MAC 数量,超限则告警、丢弃或关闭端口。

switchport port-security
switchport port-security maximum 3
switchport port-security violation restrict

接入端口设个合理上限是低成本的加固。设成 1 对服务器端口合适,办公区要留出余量,因为一台电脑接了 IP 电话或虚拟机就会有多个 MAC,参见虚拟机与容器的 MAC 地址。

用它定位设备

MAC 地址表是根据 MAC 定位设备的核心工具。查到端口后若是上行口,就登录下一级交换机继续查。配合在查询页确认厂商,能很快判断该往哪个方向找。

相关文章
关于作者 · Lin

7n4.cn 技术编辑,负责数据链路层与 IP 层主题。文章以协议规范和抓包行为为基础,把容易混淆的字段与流程拆开解释。

← 返回博客列表