三层交换机本质上是"二层交换机的线速转发能力"与"路由器的三层选路能力"的结合体。理解它的关键在于搞清楚控制平面(CPU/软件)与数据平面(ASIC/硬件)如何分工协作 ,以及 ARP 表、路由表、硬件转发表三者如何联动。下面分层次拆解。
一、核心原理:一次路由,多次交换
传统路由器做三层转发时,每个包都要经过 CPU 查路由表、重写帧头,软件处理导致延迟高、吞吐低。三层交换机用 ASIC 硬件把三层转发"硬化"。
核心思想是 "Route Once, Switch Many"(一次路由,多次交换):
- 首包(第一个数据包):上交 CPU,走完整的三层路由流程(查路由表 → ARP 解析 → 生成转发条目),这个包由软件/CPU 处理。
- 后续包(同一条数据流) :CPU 把转发条目下发给 ASIC,后续同流报文直接在硬件层完成帧头重写和转发,不再经过 CPU,达到线速。
一条"流"通常由 <源IP、目的IP、源端口、目的端口、协议> 五元组标识;硬件表项中保存了已经解析好的二层封装信息。
二、硬件转发架构:FIB + 邻接表
三层交换机在硬件里维护两张关键表,它们由控制平面的路由表和 ARP 表"编译"而来:
| 表 | 来源 | 内容 | 作用 |
|---|---|---|---|
| **RIB(路由表)** | 直连/静态/动态路由协议 | 目的网段 → 下一跳IP + 出接口 | 控制平面选路(软件) |
| **FIB(转发信息库)** | RIB 下发 | 目的前缀 → 下一跳 + 出接口 | 硬件转发时查"去哪" |
| ARP 表 | ARP 学习 | IP → MAC + 出接口/VLAN | 提供二层封装信息 |
| **邻接表(Adjacency)** | ARP 表 + FIB 生成 | 目的IP → 目的MAC、源MAC、VLAN、封装类型 | 硬件直接用来重写帧头 |
关键点:硬件转发时不需要现查 ARP,邻接表里已经"预封装"好了目的 MAC 和源 MAC。所以后续包只需一次查表 + 帧头重写,TTL 减 1、校验和硬件重算,直接转发出去。
- FIB 查表用 TCAM(三态内容寻址存储器),一次命中,速度不受表项数量影响。
- 源 MAC 改写为"出接口(SVI)的 MAC",目的 MAC 改写为"下一跳的 MAC",这是三层转发与二层交换最本质的区别(二层转发不改 MAC)。
三、ARP 报文的处理机制
三层交换机在不同场景下对 ARP 的处理方式不同:
1. ARP 请求的目的 IP = 交换机自身三层接口 IP
(比如请求网关 SVI 接口的 IP,或路由接口 IP)
→ 交换机直接回复 ARP Reply,用自己的接口 MAC 应答。这是最常见的"PC 找网关"场景。
2. ARP 请求的目的 IP = 其他网段(跨网段 ARP)
→ 检查是否开启 Proxy ARP(代理 ARP):
- 开启 且交换机有到该网段的路由:用自己的接口 MAC 回应,充当代理,后续流量由交换机做三层转发。
- 未开启 或没有对应路由:不回应,直接丢弃(ARP 请求不会跨 VLAN/网段传播)。
3. 免费 ARP(Gratuitous ARP,目标 IP = 源 IP)
→ 用于 IP 冲突检测和主动刷新邻居的 ARP 缓存。交换机收到后会更新自己的 ARP 表项,并可能触发生成/更新邻接表。
4. ARP Miss(三层转发时 ARP 表中没有目的 MAC)
这是三层转发里的关键一环:
- 首包到达,硬件查 FIB 有路由,但邻接表无对应条目 → ARP Miss。
- 报文上交 CPU,CPU 查路由表确认可达,然后在出接口所属网段/VLAN 发起 ARP 请求。
- 收到 ARP Reply,学到目的 MAC → 生成邻接表项并下发硬件。
- 首包(或前几个包)可能在等待 ARP 期间被丢弃或缓存(不同厂商有差异,有的会用"ARP 抑制/首包缓存"机制缓解)。
5. ARP 表项老化与刷新
- ARP 表项有老化时间(常见 20 分钟)。老化前会发单播 ARP 探测刷新。
- 若探测失败则删除表项,同时联动删除邻接表项和硬件转发表项,后续报文重新触发 ARP Miss 流程。
- 接口 down、VLAN 删除也会触发 ARP 和转发表项的批量清除。
四、路由表更新与转发表的联动
三层交换机同时运行二层(MAC 地址学习)和三层(路由协议)控制平面。路由表更新遵循"控制平面感知 → RIB 重算 → FIB 刷新 → 硬件表下发"的链条:
路由表的来源(RIB 构建)
- 直连路由:三层接口(SVI / 路由口 / VLANIF)配置 IP 且链路 up 即自动生成,接口 down 则立即撤销。
- 静态路由:手工配置,可指定下一跳或出接口。
- 动态路由协议:交换机可运行 OSPF、RIP、IS-IS、BGP 等,与路由器建立邻居、交换 LSA/路由更新,由协议计算出最优路由写入 RIB。
更新触发与收敛过程
拓扑变化(链路 down / 邻居失效 / 新网段)
↓
路由协议感知(OSPF SPF 重算 / BGP 更新)
↓
RIB 更新(增删改路由、下一跳变更、出接口变更)
↓
FIB 同步重算(最优路由下发、迭代下一跳)
↓
邻接表重建(若下一跳 MAC 未知则触发 ARP 解析)
↓
硬件转发表(ASIC/TCAM)更新 → 数据平面按新路径转发
几个重要机制
- 路由迭代(递归查找):若路由的下一跳不是直连,需要迭代查到直连下一跳和出接口,才能确定 ARP 解析的范围。
- ECMP(等价多路径):多条等价路由会在硬件表里生成多个表项,按流(五元组哈希)分担。
- 快速收敛:高端三层交换机支持路由表→硬件表的"增量下发",部分场景配合 BFD 实现毫秒级故障检测与切换。
- 路由与二层的联动:例如 VRRP 主备切换时,网关 MAC 会漂移到新主设备,通过免费 ARP 刷新全网 ARP,交换机同步更新邻接表,保证流量不中断。
五、完整案例:VLAN 间通信全流程
假设 PC-A(VLAN 10,192.168.10.2/24,网关 192.168.10.1)访问 PC-B(VLAN 20,192.168.20.2/24,网关 192.168.20.1):
- PC-A 判断跨网段 → 需要网关转发,先发 ARP 请求"谁是 192.168.10.1"。
- 交换机 SVI-10 应答 ARP(用 SVI-10 的 MAC),PC-A 学到网关 MAC。
- PC-A 发包 :目的 IP = 192.168.20.2,目的 MAC = SVI-10 的 MAC(注意目的 MAC 是网关,不是 PC-B)。
- 交换机收包:查目的 MAC 是自己 → 触发三层转发,查 FIB,命中直连路由(192.168.20.0/24 出接口 SVI-20)。
- ARP Miss:邻接表里没有 192.168.20.2 的 MAC → 上 CPU,从 SVI-20 发 ARP 请求。
- PC-B 应答 ARP,交换机学到 MAC,生成邻接表项(目的 MAC = PC-B MAC,源 MAC = SVI-20 MAC,出接口/VLAN 20)。
- 重写并转发:帧头源 MAC 改为 SVI-20 的 MAC,目的 MAC 改为 PC-B 的 MAC,TTL 减 1,重新计算校验和,从 VLAN 20 转发出去。
- 表项下发硬件 :后续 PC-A ↔ PC-B 的同流报文全部由 ASIC 硬件线速转发,CPU 不再参与(除非流表老化或拓扑变化)。
六、一句话总结三者关系
路由表(RIB)决定"往哪走"(下一跳 IP + 出接口),ARP 表提供"怎么封装"(下一跳 MAC),两者合成为 FIB + 邻接表下发给 ASIC,后续报文才能脱离 CPU、实现硬件线速三层转发。路由更新和 ARP 变化都会实时反向刷新硬件转发表。