交换机 MAC 地址表:学习、老化与泛洪
交换机与集线器的根本差别在于它知道该把帧发往哪个端口,而这份知识来自一张动态维护的 MAC 地址表,也常被称为 CAM 表。理解它的三种行为,基本就理解了二层转发。
学习:从源地址建表
交换机不需要任何配置就能建表。每收到一个帧,它读取源 MAC 地址,记下"这个地址出现在这个端口的这个 VLAN 里"。表项形如:
| VLAN | MAC 地址 | 端口 |
|---|---|---|
| 10 | 00:1B:A9:12:34:56 | Gi1/0/3 |
| 10 | 40:6C:8F:18:2C:03 | Gi1/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 定位设备的核心工具。查到端口后若是上行口,就登录下一级交换机继续查。配合在查询页确认厂商,能很快判断该往哪个方向找。