交换机工作原理:二层交换机的转发机制

说到二层交换机,我脑子里第一个蹦出来的画面,就是刚入行时在机房调试的那台老 Cisco 2950。那时候我就在想,这玩意儿到底是怎么知道数据该往哪个口送的?

其实说白了,二层交换机的核心工作就三件事:学习、转发、过滤。它不像集线器那样无脑广播,而是聪明地根据 MAC 地址做决策。嗯,咱们一步步拆开看。

MAC 地址表的建立与维护

交换机内部维护着一张表,叫 MAC 地址表(也叫 CAM 表)。这张表记录了:

  • MAC 地址:设备的物理地址
  • 端口号:数据从哪个口进来的
  • VLAN ID:数据属于哪个虚拟局域网
  • 老化时间:这条记录还能活多久

我习惯把这张表想象成一张「门牌号登记表」。每个设备接入交换机时,交换机就会默默记下它的 MAC 地址和对应端口。这个过程叫 MAC 地址学习

MAC 地址学习流程:

  1. 设备 A 发送数据帧到交换机
  2. 交换机提取源 MAC 地址(A 的 MAC)和入端口
  3. 检查 MAC 地址表,如果没有这条记录,就新增
  4. 如果已有记录,更新老化时间

你想想看,如果设备 A 从端口 1 换到了端口 2,交换机怎么知道?它会发现从端口 2 收到了 A 的数据,而表中记录的是端口 1。这时候交换机会更新这条记录,把端口改成 2。这就是 MAC 地址表的动态维护。

我的经验:曾经有个项目,网络老是丢包。排查了半天,发现是有人把一台服务器从交换机端口 1 拔下来插到了端口 2,但交换机 MAC 表还没更新。等了几十秒,表老化后重新学习,问题就消失了。所以,MAC 表老化时间这个参数,在频繁变更设备的环境里特别重要。

转发机制:三种处理方式

当交换机收到一个数据帧,它会根据目标 MAC 地址做三种处理:

目标 MAC 地址状态 处理方式 说明
已知单播 转发 MAC 表中有记录,直接发往对应端口
未知单播 泛洪 MAC 表中没有记录,向所有端口转发(除入端口)
广播/组播 泛洪 目标 MAC 为广播地址(FF-FF-FF-FF-FF-FF)或组播地址

这里有个关键点:已知单播是直接转发,效率最高。未知单播和广播都要泛洪,会消耗带宽。我建议你在设计网络时,尽量让 MAC 表保持稳定,减少泛洪。

注意:交换机不会转发数据帧到入端口本身。这是为了防止环路和浪费带宽。如果收到一个数据帧,目标 MAC 对应的端口就是入端口,交换机会直接丢弃这个帧。这叫「过滤」功能。

广播域与冲突域的概念

这两个概念,我当年考试时背得滚瓜烂熟,但真正理解是在一次网络故障排查中。那次整个办公室的网络突然变慢,抓包一看,全是广播帧。嗯,广播域太大了。

冲突域:指的是可能发生数据冲突的区域。在集线器时代,所有端口都在一个冲突域里,两台设备同时发数据就会碰撞。交换机每个端口是一个独立的冲突域,所以交换机天然解决了冲突问题。

广播域:指的是广播帧能到达的范围。交换机的所有端口默认都在同一个广播域里。也就是说,一台设备发广播,所有设备都能收到。

设备 冲突域数量 广播域数量
集线器 1 1
二层交换机 每个端口 1 个 1(默认)
路由器 每个端口 1 个 每个端口 1 个

你看,二层交换机虽然隔离了冲突域,但广播域还是一个大池子。如果网络里有 500 台设备,一台发 ARP 广播,其他 499 台都要处理。这就是为什么大型网络要用 VLAN 来分割广播域。

核心结论:

  • 二层交换机基于 MAC 地址表做转发决策
  • MAC 表通过动态学习建立,有老化机制
  • 交换机每个端口是一个独立的冲突域
  • 交换机所有端口默认属于同一个广播域
  • 广播域过大时,需要用 VLAN 或三层设备来分割

我曾经在一个园区网项目中,发现核心交换机上广播流量占了 30%。查了半天,是某个接入交换机下挂了一台打印机,它每隔几秒就发一次广播。后来用 VLAN 把打印机单独隔离,广播流量直接降到 5% 以下。所以,广播域的管理,是网络优化里容易被忽视但很重要的一环。

好了,二层交换机的工作原理就聊到这儿。下一章咱们会讲 VLAN 如何分割广播域,以及三层交换机怎么实现跨 VLAN 通信。到时候你会发现,今天学的 MAC 表知识,是理解三层交换的基础。