第2章 交换机的工作原理:MAC地址表与VLAN隔离

交换机这东西,说白了就是个聪明版的集线器。但它怎么聪明?核心就靠一张表——MAC地址表。我刚开始搞网络时,总觉得交换机是个黑盒子,直到有一次排查一个间歇性丢包问题,最后发现是MAC表老化了……嗯,从那以后我对这玩意儿的敬畏心就上来了。

2.1 MAC地址表的学习过程

交换机的端口刚启动时,MAC表是空的。它就像个刚入职的新人,啥都不知道。但它学得很快。

举个例子:PC-A从端口1发送一个帧。交换机会做什么?它会记下——

  • 源MAC地址(PC-A的MAC)
  • 接收端口(端口1)
  • 时间戳

这就是一次学习。我把这个过程叫做“一次转发,终身记住”。当然不是真的终身,后面会讲老化机制。

关键点:交换机只学习源MAC地址,不学习目的MAC地址。目的MAC是拿来查表的,不是拿来学的。

我在项目中遇到过这样一个坑:一台新设备上线后,网络时断时续。排查了半天,发现是设备MAC地址和另一台冲突了。交换机学到A的MAC,过一会儿又学到B的相同MAC,表项反复覆盖,数据转发就乱了。你想想看,这种问题抓包都很难抓到,因为报文链路层是通的,但数据跑错了地方。

2.2 转发与泛洪:查表决策

交换机收到帧后,会查目的MAC在不在表里。这里分三种情况:

场景 动作 解释
目的MAC已知,且端口不同 转发(Forward) 直接扔到对应端口,别的口不打扰
目的MAC已知,且端口相同 丢弃(Filter) 帧不该绕一圈回来,浪费带宽
目的MAC未知 泛洪(Flood) 除了接收口,其他口都发一遍

我记得有一次做性能测试,发现某个端口流量异常高。抓包一看,全是泛洪的广播帧。原来是下联设备的MAC表被某种攻击流量冲爆了,交换机学不到新MAC,只能不断泛洪。所以啊,泛洪是个保险机制,但也是网络风暴的导火索。

2.3 老化机制:表项不是永久的

交换机的MAC表空间是有限的。一般来说,表项会保留300秒(5分钟)。如果5分钟内没再收到该源MAC的帧,交换机会把它删掉。为啥要这么做?

  • 节省内存:设备拓扑在变,老的条目不删,新的学不进来
  • 适应移动:笔记本换个端口,旧表项还留着,帧就转发错了

个人习惯:我在排查丢包时,经常先看一下交换机的MAC表老化时间。有些设备可以调,比如从300秒改成180秒。如果是无线接入场景,终端频繁漫游,老化时间短一点更合适。

2.4 VLAN隔离:让广播域变小

默认情况下,所有端口都在同一个广播域里。一台设备发ARP广播,所有人都会收到。16台设备还好,1600台呢?广播风暴就是这么来的。

VLAN的作用就是划分子网隔离。不同VLAN之间,二层是隔离的,帧不会跨VLAN泛洪。我早期做一个园区网项目,接入层全在一个VLAN里,一到上班时间网络就卡死。后来划分成了10个VLAN,广播报文减少了90%以上。

VLAN的二层隔离也意味着跨VLAN通信必须通过三层设备(路由器或三层交换机)。所以你会发现,同一台交换机上,VLAN 10和VLAN 20的PC之间ping不通——除非你配了VLAN间路由。

曾踩过的坑:我曾经给一台核心交换机配了VLAN 99,但忘了在Trunk口上放行这个VLAN。结果VLAN 99的设备能互通,但流量出不了本机。抓包看到的是网关MAC解析成功,网关却ping不通——就是Trunk没放通。

2.5 交换机转发全流程总结

拿一个实际帧的流转过程来串一下:

  1. 设备A发一个帧,目的MAC是设备B
  2. 交换机在端口1收到这个帧,先学源MAC(A)→端口1
  3. 查目的MAC(B):如果表里有,去端口2转发;如果没有,泛洪到其他所有端口(端口1除外)
  4. 设备B在端口2收到帧,回一个帧
  5. 交换机在端口2学到B的MAC→端口2
  6. 从此A→B的通信就是单播转发了

这个过程中,我建议你关注一个点:交换机不关心IP。它只认MAC。所以抓包排查二层问题时,盯住MAC地址就行了,不用去看三层IP。

下面这张图是我自己总结的交换机核心工作逻辑,你仔细看一遍,基本就能理解整个过程了:

交换机工作原理流程图 交换机数据帧处理流程 交换机收到帧 学习源MAC → 端口 查MAC表:目的MAC 未知→泛洪到所有其他口 已知→从对应端口转发 目标设备回复,学习MAC 直接转发,不走其他口 注:同时涉及VLAN隔离——帧只在同一VLAN内泛洪/转发,不同VLAN间二层隔离

2.6 学完这章,你能解决什么问题?

说白了,理解了交换机的工作原理,你在抓包时就能回答这几个问题:

  • 这个帧为什么从多个口出去?——泛洪,因为MAC表里没找到目的
  • 明明在同一个交换机,为什么A和B不通?——可能在不同VLAN,或者Trunk没放通
  • 为什么过一会儿又突然通了?——MAC表学好了,从泛洪变成转发

我个人觉得,抓包排查二层问题,80%的线索都在MAC地址表里。先把这张表读明白,很多问题就迎刃而解。