交换机mac表的获取?
一、“MAC 学习”到底是个啥意思?
先说人话版本:
交换机收到一个包,会记下“谁发的 + 从哪个口来的”,然后下次再发回去,就直接走那口,不用全网乱转。
这就叫 MAC 学习,也叫 MAC 地址学习、源地址学习。
比如:
- 主机 A 发包,源 MAC 是 AA-AA-AA,从端口 1 进来
- 交换机一看,“哦,这个 MAC 是从端口 1 来的”,就写进 MAC 表
- 下次要给 AA-AA-AA 发包,就直接丢端口 1,不再广播
这一步,交换机做得飞快,毫秒级。

二、交换机“学 MAC”的条件是什么?
不是所有包都能让它学,得满足两个基本条件:
- 包是从某个端口进入的
- 包头里有合法的源 MAC
只要这两个条件满足,交换机就能学起来。 学完之后会在 MAC 地址表(也叫 CAM 表)里留一条记录,格式像这样:
MAC地址 VLAN 出口端口 类型
AA-AA-AA 10 GE1/0/1 动态
三、MAC 学完之后会一直记着吗?
不会。
动态学习的 MAC 是有“保质期”的,叫做 老化时间,华为设备默认是 300秒(5分钟)。
也就是说,如果 5 分钟内那个 MAC 没有再发数据包,它就会被从 MAC 表里删掉。 删掉之后,再有包来,就得重新学习一遍。
你也可以通过命令改掉这个老化时间,比如:
[Switch] mac-address aging-time 600
四、我能不能不让它“自动学”?自己手动指定?
可以,叫做 静态 MAC 绑定。
适合的场景比如:
- 某些高安全要求的端口,不想让别人随便接设备
- 接摄像头、IoT、特殊终端,MAC 不变,手动绑定省事
- 想防止 MAC 漂移、ARP 攻击
配置方式非常简单(以华为为例):
[Switch] mac-address static AA-AA-AA vlan 10 interface GigabitEthernet1/0/1
一条命令就搞定。
你可以配在指定 VLAN 下、指定端口上,这样就算外面换了设备也不能用这个 MAC 通信。
静态 MAC 不会老化,除非你手动删。
五、MAC 太多,会不会“炸表”?
会的。
交换机的 MAC 表容量是有限的(具体容量看型号,几千条到几十万条不等),如果学的太多,会导致“MAC 地址溢出”,引发广播风暴或性能下降。
这就是很多运营商、园区网里搞“端口隔离”“防 MAC 攻击”的原因。
你可以通过命令限制某个端口最多能学多少 MAC:
[Switch-GigabitEthernet1/0/1] mac-limit maximum 10
这样即使接了个交换机上来,也不会让你整个园区的 MAC 表爆炸。
六、终极建议:什么时候手动,什么时候自动?

学 MAC,不只是“记下来”这么简单,它是交换机转发的核心逻辑。
学得对,转发快;学错了,网络炸。 动态+静态+限制+查表,几招配合起来,网就稳了。