4. 二层转发与MAC表项资源
二层转发是交换芯片最基础也最频繁的转发行为。理解它,关键不在于“查表转发”这四个字,而在于搞清楚三件事:MAC地址如何被学习进表、表项如何老化与迁移、以及当表项资源不足或拓扑变化时芯片如何应对。本节围绕MAC表这一核心资源,把学习、老化、泛洪、STP状态、哈希结构、容量冲突与安全策略串成一条完整的工程线索。
MAC地址学习:从源地址到表项
交换芯片收到一个以太帧后,首先解析目的MAC(DMAC)和源MAC(SMAC)。学习动作由SMAC触发:芯片在对应VLAN内查找该SMAC是否已存在。若不存在,则新建表项,记录MAC、VLAN、出端口(或端口组)、时间戳与老化标志;若已存在但出端口不同,则更新出端口并刷新时间戳,这就是MAC移动。目的转发则由DMAC决定:命中则单播转发到对应端口,未命中则在同一VLAN内泛洪。
需要强调,学习是“源地址驱动、目的地址消费”的机制。一个常见误区是认为只有收到帧才会学习目的地址,实际上目的地址只用于查表转发,不产生学习。因此双向流量才能让两端MAC都被学习到,单向流量只会学习发送方。
老化机制与表项生命周期
MAC表项不是永久的。芯片为每个动态表项维护老化计时器,默认老化时间通常为300秒(5分钟),可配置。每次收到该SMAC的帧都会刷新计时器,称为“命中刷新”。若在老化周期内没有再次收到该源地址的流量,表项被删除,后续发往该地址的帧将重新泛洪,直到被重新学习。
老化时间设置需要权衡:过短会导致表项频繁失效、泛洪增加、转发抖动;过长则会让已下线设备的表项长期占用资源,并延长MAC移动到新端口后的收敛时间。工程上常把接入层老化时间设为300秒,汇聚或核心可适当缩短以加快收敛。
泛洪、STP状态与转发域
未知单播、广播和组播帧会在VLAN内泛洪。泛洪范围受STP(生成树协议)状态约束:处于Forwarding状态的端口参与转发,Blocking/Listening/Learning状态的端口不转发用户数据。这意味着STP不仅防环,还直接决定了泛洪的边界和MAC学习的可见范围。
当拓扑变化时,STP会触发MAC表刷新(flush),让旧路径上的表项快速失效,避免流量沿失效路径转发。理解这一点很重要:MAC表与STP是联动的,拓扑收敛速度直接影响二层转发的恢复时间。
MAC表哈希结构与冲突处理
MAC表在芯片内部通常以哈希表实现。芯片对MAC+VLAN做哈希运算,映射到固定数量的哈希桶。理想情况下每个桶对应少量表项,查找一次命中。但哈希冲突不可避免:不同MAC可能映射到同一桶,形成冲突链。冲突链越长,查找需要遍历的节点越多,转发时延和表项写入时间都会上升。
工程上要关注两个指标:表项使用率和冲突率。使用率接近容量上限时,新MAC学习失败,表现为“明明有流量却学不到表项”,此时未知单播泛洪会明显增加。冲突率过高则说明哈希分布不均,可能需要调整哈希算法或重新规划VLAN划分。常见做法是把大二层域拆分为多个VLAN,降低单表压力。
MAC移动与安全策略
MAC移动指同一MAC地址在短时间内从不同端口被学习到。正常场景下(如虚拟机迁移、终端换口)属于合理行为,芯片会更新出端口。但若同一MAC在两个端口间高频振荡,往往意味着环路、攻击或配置错误。此时可启用MAC移动抑制:设定阈值(如10秒内移动超过5次),触发告警或暂时冻结该MAC的学习。
端口安全是另一层防护。可在端口上限制最大学习MAC数,超限后丢弃新MAC的帧或关闭端口;也可配置静态MAC绑定,只允许指定MAC从指定端口接入。这些策略直接作用于MAC表资源,防止表项被恶意占满。
容量规划与监控要点
不同交换芯片的MAC表容量差异很大,接入芯片可能只有几K,而高端芯片可达数十K甚至上百K。规划时要按“接入终端数 × 冗余系数”估算,并预留VLAN间隔离带来的额外开销。监控上重点关注:当前表项数、老化删除速率、学习失败计数、MAC移动告警计数。这些计数器能直接反映二层转发的健康度。
最后要记住,MAC表不是孤立资源。它与STP状态、VLAN划分、端口安全策略、哈希实现共同决定二层转发的实际表现。理解它们之间的联动关系,才能在出现泛洪异常、学习失败或转发抖动时,快速找到根因并给出可执行的调整方案。