交换机工作原理:MAC地址表学习、泛洪与转发、广播帧在交换机中的处理流程

上一章我们聊了无线广播风暴有多头疼。要根治它,得先搞懂交换机到底是怎么工作的。说白了,交换机就是个“智能分发器”——它不像集线器那样无脑复制,而是根据一张表来决策。这张表,就是MAC地址表。

我刚开始接触网络时,总觉得交换机很神秘。后来拆了几台设备,抓了几次包,才明白它的核心逻辑其实就三件事:学习、泛洪、转发。嗯,咱们一个一个说。

MAC地址表:交换机的“记忆体”

每台交换机内部都维护着一张MAC地址表。这张表记录了三个关键信息:

  • MAC地址:连接到某个端口的主机网卡地址
  • 端口号:该MAC地址出现在哪个物理端口
  • VLAN ID:该端口所属的VLAN(如果启用了VLAN)

举个例子,我曾在一次割接中遇到一个怪现象:PC能ping通网关,但就是访问不了服务器。抓包一看,交换机的MAC地址表里,服务器的MAC地址竟然飘到了另一个端口上。这就是典型的MAC地址漂移问题。所以,这张表虽然小,但一旦出错,网络就全乱了。

核心要点:MAC地址表是交换机转发决策的唯一依据。表里没有的地址,交换机就不知道往哪发。

学习机制:交换机如何“认识”设备?

交换机刚启动时,MAC地址表是空的。它怎么知道谁在哪个端口呢?靠的是源MAC地址学习。

过程很简单:

  1. 当一台主机发送数据帧时,帧头里包含了源MAC地址。
  2. 交换机收到这个帧,会提取源MAC地址,并记录它进入的端口号。
  3. 交换机把这对关系写入MAC地址表,并设置一个老化时间(默认通常是300秒)。

我习惯把这个过程比作“认脸”。你第一次见到一个人,记住他的长相和位置。下次再见到,你就知道他在哪了。交换机也一样——它只学习源地址,不学习目的地址。

避坑指南:我曾经遇到一个案例,某台PC频繁更换网卡,导致MAC地址表不断更新。结果交换机CPU飙升,网络卡顿。后来我建议他们做端口安全绑定,才解决了问题。所以,MAC地址表不是越大越好,稳定才是关键。

转发与泛洪:两种截然不同的命运

当交换机收到一个数据帧时,它会查MAC地址表,根据目的MAC地址做决策。这里分三种情况:

目的MAC地址状态 交换机行为 说明
已知单播 转发 表里有记录,直接发往对应端口
未知单播 泛洪 表里没有记录,向所有端口(除接收端口外)发送
广播/组播 泛洪 广播帧必须泛洪,组播视情况而定

你想想看,如果交换机每次都要泛洪,那和集线器有什么区别?所以,转发是常态,泛洪是例外。但恰恰是这个“例外”,在无线网络中引发了广播风暴。

我记得有一次在数据中心排障,发现某台交换机的广播流量占了总流量的40%。查了半天,原来是一台服务器的网卡坏了,疯狂发送广播帧。交换机只能不断泛洪,整个网络都被拖垮了。

广播帧在交换机中的处理流程

广播帧的目的MAC地址是FF-FF-FF-FF-FF-FF。交换机看到这个地址,会怎么做?

  1. 交换机收到广播帧,检查目的MAC地址。
  2. 发现是广播地址,直接跳过MAC地址表查询。
  3. 交换机把该帧从所有其他端口(除接收端口外)复制并发送出去。
  4. 如果启用了VLAN,广播帧只在同一个VLAN内泛洪。

这里有个关键点:广播帧不会被交换机丢弃,也不会被转发到接收端口。这意味着,一台设备发送广播,整个广播域内的所有设备都会收到。在无线网络中,AP和客户端都在同一个广播域里,广播帧一多,信道就被占满了。

警告:广播帧是必要的(比如ARP请求、DHCP发现),但过多的广播帧就是灾难。我曾经见过一个极端案例:一个VLAN里有500多台设备,广播帧每秒超过2000个,导致交换机CPU使用率长期在90%以上。最后不得不做VLAN拆分才解决。

核心逻辑可视化:交换机处理流程图

为了让你更直观地理解,我画了一张流程图。这张图展示了交换机从收到帧到做出决策的完整路径。

交换机帧处理流程图 交换机帧处理流程图 收到数据帧 提取源MAC → 学习并更新表 检查目的MAC地址 广播/组播 未知单播 已知单播 泛洪:所有端口(除接收口) 泛洪:所有端口(除接收口) 转发:仅发往目标端口 帧处理完成 说明: • 广播帧(FF-FF-FF-FF-FF-FF)和未知单播帧都会触发泛洪,这是广播风暴的根源。 • 已知单播帧直接转发,效率最高。MAC地址表越完整,泛洪越少。 • 在无线网络中,泛洪意味着空口资源被浪费,直接影响用户体验。

为什么广播帧在无线网络中更致命?

有线网络里,广播帧虽然也泛洪,但至少带宽是独享的。无线网络不一样——所有客户端共享同一个信道。一个广播帧发出去,所有关联的客户端都得停下来听。你想想看,如果每秒有几百个广播帧,客户端几乎没时间传数据了。

我做过一个测试:在一个有30个客户端的AP上,每秒注入500个广播帧。结果TCP吞吐量从150Mbps直接掉到20Mbps。这就是广播帧的威力——它不占多少带宽,但它占用了所有客户端的处理时间。

个人经验:我建议在无线网络设计时,尽量缩小广播域。一个VLAN不要超过100个客户端。如果设备多,就拆成多个VLAN,或者用三层交换机终结广播。另外,开启风暴控制功能,设置广播帧阈值,也是个好办法。

小结:交换机的三个核心动作

回顾一下,交换机的核心动作就三个:

  • 学习:从源MAC地址入手,建立MAC地址表。
  • 转发:表里有记录,精准投递。
  • 泛洪:表里没记录,或者遇到广播帧,就群发。