跨 VLAN 三层转发 — IP与MAC地址变化
核心结论(口诀)
源 IP 和目的 IP 始终不变;源 MAC 和目的 MAC 每过一次网关就换一次壳。
基础环境假设
| 设备 | VLAN | IP | MAC | 网关接口 |
| 10 | 192.168.10.2 | MAC-A | VLANIF 10: 192.168.10.1 / MAC-GW10 | |
| 20 | 192.168.20.2 | MAC-B | VLANIF 20: 192.168.20.1 / MAC-GW20 |
详细过程
阶段一:A → B
A 发现 B 的 IP 不在自己网段,必须丢给网关:
| 字段 | 值 | 说明 |
| 源 IP | 192.168.10.2 | A 的 IP |
| 目的 IP | 192.168.20.2 | B 的 IP(终点不变) |
| 源 MAC | MAC-A | A 的 MAC |
| 目的 MAC | 网关 VLANIF 10 的 MAC |
如果 A 不知道网关 MAC,会先在 VLAN 10 内发 ARP 请求。
交换机解开二层 MAC,查看三层 IP,发现目的地在 VLAN 20,重新封装:
| 字段 | 值 | 说明 |
| 源 IP | 192.168.10.2 | 依然是 A 的 IP |
| 目的 IP | 192.168.20.2 | 依然是 B 的 IP |
| 源 MAC | 变成网关 VLANIF 20 的 MAC | |
| 目的 MAC | MAC-B | 变成设备 B 的 MAC |
如果交换机没有 B 的 MAC,会在 VLAN 20 内发 ARP 请求。
阶段二:B → A(回复)
B 收到包后回包,发现 A 不在自己网段,同样丢给网关。
| 字段 | 值 | 说明 |
| 源 IP | 192.168.20.2 | B 的 IP |
| 目的 IP | 192.168.10.2 | A 的 IP(终点不变) |
| 源 MAC | MAC-B | B 的 MAC |
| 目的 MAC | 网关 VLANIF 20 的 MAC |
| 字段 | 值 | 说明 |
| 源 IP | 192.168.20.2 | 依然是 B 的 IP |
| 目的 IP | 192.168.10.2 | 依然是 A 的 IP |
| 源 MAC | 变成网关 VLANIF 10 的 MAC | |
| 目的 MAC | MAC-A | 变成设备 A 的 MAC |
总结一览表
| 阶段 / 传输位置 | 源 IP | 目的 IP | 源 MAC | 目的 MAC |
| (VLAN 10) | 192.168.10.2 | 192.168.20.2 | MAC-A | |
| (VLAN 20) | 192.168.10.2 | 192.168.20.2 | MAC-B | |
| (VLAN 20) | 192.168.20.2 | 192.168.10.2 | MAC-B | |
| (VLAN 10) | 192.168.20.2 | 192.168.10.2 | MAC-A |
关键点
- :无论怎么跨 VLAN、跨路由器,只要不做 NAT,源 IP 和目的 IP 绝对不变。
- :每经过一个三层接口(网关),二层 MAC 头部会被整个,换上新接口的源 MAC 和下一个接收者的目的 MAC。