三层交换机二层转发与三层转发的判定机制
同一台三层交换机,同一个端口收进来的报文,有的被原封不动地从另一个端口转出去,有的却被”改头换面”送到了另一个网段。
交换机到底凭什么决定:这个包该二层转发,还是三层转发?
很多人的第一反应是:”看目的 IP 呗,同网段就二层,跨网段就三层。”
听起来很合理,但其实不对。今天我们就把这个问题彻底聊透。
一、判定依据:目的 MAC 是否为本机三层接口 MAC
三层交换机判断二层还是三层转发,最核心的依据是:
看报文的目的 MAC 地址,是不是本机三层接口的 MAC 地址。
- 是:说明这个包是”交给我处理”的,进入三层转发流程,查路由表。
- 不是:说明这个包只是”路过”,在 VLAN 内按 MAC 地址表做二层转发。
就这么简单。交换机做这个判断时,根本不需要先去看 IP 地址。
那问题来了:凭什么看一个 MAC 地址就能决定要不要路由?
二、目的 MAC 的来源:主机的网段判断与 ARP 解析
下面用一个简单的环境来说明。

环境说明如下:
三层交换机 SW 上创建了 VLAN 10 和 VLAN 20,并分别配置三层接口 VLANIF10(192.168.10.1/24)和 VLANIF20(192.168.20.1/24)。两个 VLANIF 使用同一个设备系统 MAC:5c:dd:70:aa:bb:cc。
PC1、PC2 接入 VLAN 10,网关为 192.168.10.1。
PC3 接入 VLAN 20,网关为 192.168.20.1。
在这个环境中,PC1 分别访问 PC2 和 PC3,两个报文都从 PC1 所连的同一个端口进入 SW。
访问 PC2 时,SW 做的是二层转发;访问 PC3 时,SW 做的是三层转发。
SW 能区分这两种情况,前提是这两个报文的目的 MAC 不一样。而目的 MAC 填什么,是由 PC1 在发包之前决定的。
主机发送 IP 报文前,必须先确定以太网帧头中的目的 MAC。
确定的方法是:用本机 IP 和子网掩码算出自己所在的网段,再判断目的 IP 是否属于这个网段。
- 目的 IP 与本机在同一网段:目的主机可以直接到达,主机通过 ARP 解析目的主机的 MAC,作为目的 MAC。
- 目的 IP 与本机不在同一网段:报文需要交给网关转发,主机通过 ARP 解析网关的 MAC,作为目的 MAC。
下面分别看这两种场景下 PC1 的处理过程。
2.1 同网段通信:PC1 访问 PC2
PC1 计算后发现 192.168.10.20 和自己在同一个网段,于是:
- 直接发 ARP 请求:”谁是 192.168.10.20?”
- PC2 回复自己的 MAC。
- PC1 发出的报文:目的 IP = PC2,目的 MAC = PC2 的 MAC。
2.2 跨网段通信:PC1 访问 PC3
PC1 发现 192.168.20.30 不在自己网段,于是决定把包交给网关:
- 发 ARP 请求:”谁是 192.168.10.1(我的网关)?”
- 交换机的 VLANIF10 回复自己的 MAC:
5c:dd:70:aa:bb:cc。 - PC1 发出的报文:目的 IP = PC3,目的 MAC = 交换机的 MAC。
看出门道了吗?
| 场景 | 目的 IP | 目的 MAC |
|---|---|---|
| PC1 → PC2 | 192.168.10.20 | PC2 的 MAC |
| PC1 → PC3 | 192.168.20.30 | 交换机的 MAC |
“这个包需不需要路由”,主机已经通过目的 MAC 告诉交换机了。
交换机只需要看一眼目的 MAC:是我的,那就是让我路由;不是我的,那我就当一台普通二层交换机,帮你转过去就好。
这就是”看目的 MAC 判定转发方式”成立的根本原因。
三、二层转发流程
当目的 MAC 不是本机 MAC 时,交换机走二层转发流程,和普通二层交换机完全一样:
- 学习源 MAC:把”源 MAC + VLAN + 入端口”记录到 MAC 地址表。
- 查目的 MAC:在该 VLAN 内查 MAC 地址表。
- 根据查表结果处理:
- 已知单播:查到了,从对应端口发出去。
- 未知单播:没查到,在本 VLAN 内泛洪(除入端口外的所有端口)。
- 广播 / 未知组播:在本 VLAN 内泛洪。
整个过程中,报文内容一个字节都不改,二层头、IP 头、TTL 统统原样保留。
四、三层转发流程
当目的 MAC 是本机 MAC 时,交换机就要真正干路由器的活了:
- 剥掉二层头,取出 IP 报文。
- 查路由表(FIB):根据目的 IP 192.168.20.30,匹配到直连路由 192.168.20.0/24,出接口 VLANIF20。
- 查 ARP 表:找到 192.168.20.30 对应的 MAC(PC3 的 MAC)。如果还没有 ARP 表项,就先在 VLAN20 里发 ARP 请求去解析。
- 重写报文:
- 源 MAC → 改成交换机 VLANIF20 的 MAC
- 目的 MAC → 改成 PC3 的 MAC
- VLAN → 从 10 改成 20
- TTL → 减 1
- IP 头校验和 → 重新计算
- 从出接口发出:在 VLAN20 内查 MAC 表,找到 PC3 所在端口发出。
我们对比一下报文进出交换机前后的变化:

规律:IP 地址端到端不变,MAC 地址逐跳改变。 这也是路由转发最本质的特征。
五、判定流程汇总

注意这里还有一个细节:目的 MAC 是我的,并且目的 IP 也是我的(比如 PC 去 ping 网关、SSH 登录交换机),那就不是”转发”,而是上送 CPU 由交换机自己处理。
六、特殊报文的处理
基本逻辑讲完了,但真实网络里总有一些特殊情况,值得单独拎出来说说。
6.1 广播报文
PC1 发 ARP 请求问”谁是 192.168.10.1”时,目的 MAC 是广播地址 ff:ff:ff:ff:ff:ff,显然不是本机 MAC。
但交换机此时既会在 VLAN10 内泛洪,也会复制一份上送 CPU,因为 VLANIF10 本身也是这个广播域的成员,它需要看看这个 ARP 是不是在问自己。如果是,就回复 ARP 应答。
6.2 二层协议报文
STP 的 BPDU、LACP、LLDP 等协议报文使用 01:80:C2:00:00:xx 这类保留组播 MAC。它们的目的 MAC 不是本机接口 MAC,但交换机芯片会专门识别这些地址并上送 CPU 处理,而不是简单泛洪。
所以严格来说,”目的 MAC 不是本机就二层转发”是针对普通数据报文而言的。
6.3 VRRP 虚拟 MAC
配置了 VRRP 之后,主机的网关是虚拟 IP,ARP 解析到的是虚拟 MAC(如 00:00:5e:00:01:xx)。
处于 Master 状态的交换机,会把这个虚拟 MAC 也加入”本机 MAC”的判定范围。目的 MAC 命中虚拟 MAC 的报文,同样会进入三层转发。而 Backup 设备不会响应这个虚拟 MAC,确保同一时刻只有一台设备在做网关。
6.4 多个 VLANIF 共用系统 MAC
细心的同学会发现,很多交换机上 display interface Vlanif 或 show interface vlan 看到的 MAC 地址都一样,都是设备的系统 MAC。
这并不冲突,因为判定时匹配的是 “VLAN + MAC” 的组合。不同 VLAN 本来就是不同的广播域,用同一个 MAC 不会造成混乱。
6.5 主机掩码配置错误导致跨网段通信失败
理解了”主机决定目的 MAC”,很多故障就好排查了。
假设 PC1 的掩码被误配成了 255.255.0.0,它会认为 192.168.20.30 和自己在同一网段,于是直接 ARP 请求 192.168.20.30,而不是请求网关。
这个 ARP 广播只在 VLAN10 内传播,PC3 在 VLAN20 根本收不到,结果就是解析失败、无法通信。除非网关开启了代理 ARP 替 PC3 应答,否则这个问题会一直存在。
交换机配置完全正确,问题却出在主机的判断上。
七、硬件实现:ASIC 流水线中的本机 MAC 匹配
传统路由器早期依赖 CPU 做路由查表,性能有限。而三层交换机之所以能做到”线速路由”,关键在于整个判定和转发流程都在交换芯片(ASIC)里完成。
报文进入芯片后,会经过一条处理流水线(Pipeline),大致是:

其中”本机 MAC 匹配”这一步,在芯片中通常由一张专门的表来实现。不同厂商和芯片的叫法不同,比如 Broadcom 芯片中的 My Station TCAM,有的设备则是在 MAC 表项上打一个”三层标志位”。
当我们创建一个 VLANIF 并配置 IP 时,设备软件就会把”VLAN + 接口 MAC”下发到这张表里。从这以后,所有匹配这个组合的报文,都会被芯片直接送入三层处理流程,全程不需要 CPU 参与。
只有少数情况需要 CPU 介入:
- 目的 IP 是本机(管理流量、ping 网关)
- 协议报文(ARP、OSPF、BPDU 等)
- 三层转发时找不到下一跳的 ARP 表项,需要 CPU 触发 ARP 解析
- TTL 超时等需要回送 ICMP 的情况
判定和转发交给硬件,”异常”交给 CPU,这就是三层交换机高性能的秘密。
八、总结
回到开头的问题:
三层交换机凭什么决定一个包是二层转发还是三层转发?
答案是:看目的 MAC 是不是自己的。
而这个判据之所以可靠,是因为真正的”决策”早在主机发包时就已经做出了:主机用子网掩码判断目的 IP 是否同网段,再通过 ARP 决定目的 MAC 填谁。交换机只是读懂了主机留在报文里的这个”暗号”。
理解了这一点,你再看 ARP、网关、VRRP、掩码配置这些知识点,会发现它们其实都串在同一条逻辑线上。
网络的很多”神奇”之处,拆开来看,往往就是一个简单而巧妙的约定。