VLAN-Trunk-STP-路由综合转发过程深度剖析
在复杂园区网络中,一次简单的Ping测试(ICMP Echo)往往涉及到二层VLAN隔离、Trunk跨设备打标、STP生成树拓扑、ARP三层映射二层以及跨网段的三层路由转发的多个环节。理解跨设备、跨VLAN的详细转发流程是高级网络工程师排错的核心能力。
🗺️ 场景设定:不同设备、不同子网、不同VLAN互访
逻辑拓扑设定:
- PC A (IP: 33.3, 网关: 33.254, VLAN 33) 连接在 Switch 1 (下挂 Router 3)
- PC B (IP: 11.1, 网关: 11.254, VLAN 11) 连接在 Switch 3 (下挂 Router 1)
- Switch 1 和 Switch 3 之间通过 Switch 2 互联,所有互联接口为 Trunk,且允许VLAN 100通过。
- Switch 1 和 Switch 3 内部使用 VLANIF 100 进行三层互联,VLANIF 100 网段用于骨干路由互访。
- 目标:PC A (33.3) 尝试 Ping 通 PC B (11.1)。
🔍 详细包转发与处理底层流程
阶段1:PC A 发起访问与网关 ARP 解析
- 查询路由表:PC A 检查目的IP
11.1,发现与自己不在同一子网,决定将包发送给配置的默认网关33.254。 - ARP请求网关MAC:PC A 查询本地ARP表,若无网关
33.254的MAC地址,则发送 ARP Request (目的MAC为全F的广播帧)。 - Switch 1 二层处理:
- 收到没有标记的以太帧,根据接口的PVID打上 VLAN 33 的Tag。
- 学习源MAC地址,构建本地MAC地址表 (MAC: PC_A, VLAN: 33, Interface: Gx)。
- 因为是广播帧,Switch 1 根据DMAC在 VLAN 33 内进行泛洪,其中包括虚拟的三层接口 VLANIF 33。
- VLANIF 33 响应ARP:
- 三层接口 VLANIF 33 收到ARP Request,检查Target IP是自身接口IP
33.254,接收并更新本地ARP表(记录PC A的IP和MAC)。 - 构建并回复 ARP Reply 给 PC A (单播,目的MAC为PC A)。
- 由于从Access接口发出,Switch 1 执行 Untag (UT) 动作,剥离VLAN 33标签发给 PC A。
- 三层接口 VLANIF 33 收到ARP Request,检查Target IP是自身接口IP
- 构建第一个ICMP包:PC A 收到ARP Reply,正式封装第一个数据包:
SIP: 33.3, DIP: 11.1 | SMAC: PC_A, DMAC: 网关MAC(VLANIF33)
阶段2:Switch 1 路由查表与骨干链路 ARP 解析
- 网关路由转发:VLANIF 33 收到单播数据包,解封装发现目的IP是
11.1,不是接口IP,查询全局路由表,匹配到去往11.0/24的静态路由:Static 11.0/24 ----> 100.3 interface vlanif 100(下一跳为 Switch 3 的 VLANIF 100,出接口为 VLANIF 100)。
- 三层重封装:Switch 1 需要将包从 VLANIF 100 发出,此时:
- 三层IP头部绝对不变 (
SIP: 33.3, DIP: 11.1)。 - 二层MAC地址彻底改写:
SMAC: 自身VLANIF100的MAC, DMAC: ? (需要下一跳100.3的MAC)。
- 三层IP头部绝对不变 (
- 跨设备ARP请求:查询ARP表发现没有
100.3的MAC,VLANIF 100 发送 ARP Request (目的MAC全F,Target IP 100.3)。 - Trunk 链路二层转发 (Switch 1 -> Switch 2 -> Switch 3):
- ARP请求在 VLAN 100 内泛洪。Switch 1 从Trunk接口发出时,执行 Tag (TG) 动作,打上 VLAN 100 标签。
- Switch 2 处理:
- 收到带 Tag 100 的帧,检查VLAN List允许通过,接收并刷新MAC表,学习到 Switch 1 的MAC地址对应接口。
- 由于是广播,向其他允许VLAN 100的Trunk接口泛洪,保持 Tag 100 转发。
- Switch 3 处理:
- 同样学习MAC,向其内部的 VLAN 100 及 三层接口 VLANIF 100 转发。
- Switch 3 响应ARP:VLANIF 100 收到ARP请求,回复 ARP Reply (单播给 Switch 1)。沿途经过 Switch 2 和 Switch 1 时,各交换机依据已学习的MAC地址表进行精确的二层单播转发,Trunk链路始终保持 Tag 100,最终到达 Switch 1。
阶段3:跨设备路由转发与最终目标递交
- Switch 1 转发ICMP:Switch 1 获得了
100.3的MAC地址,完成ICMP包的重封装,发送 ICMP Echo Request 到 Switch 3。- 包格式:
SIP: 33.3, DIP: 11.1 | SMAC: Switch1_MAC, DMAC: Switch3_MAC | Tag 100。
- 包格式:
- Switch 3 接收与路由查表:
- Switch 3 在二层剥离 Tag 100,提交给三层 VLANIF 100。
- 检查目的IP
11.1,发现为直连网段,指向内部接口 VLANIF 11。
- 最后一段ARP解析与递交:
- Switch 3 需要知道 PC B (
11.1) 的MAC地址,于是通过 VLANIF 11 发送最后的 ARP Request。 - ARP请求在 VLAN 11 内泛洪,经Access接口剥离Tag发给PC B。
- PC B 回复 ARP Reply。Switch 3 学习到PC B的MAC,同时更新ARP表。
- Switch 3 需要知道 PC B (
- 最终递交数据:
- Switch 3 重封装最后的以太帧:
SMAC: Switch3_VLANIF11_MAC, DMAC: PC_B_MAC。 - 从Access接口发出,执行 Untag 动作,无标记的IP报文成功抵达 PC B,完成去程转发。
- Switch 3 重封装最后的以太帧:
📌 核心转发法则总结
在整个从源到目的的转发过程中,存在以下不变的铁律:
🔥 转发铁律与底层逻辑
- 三层信息端到端不变:无论经过多少台路由器或三层交换机,IP报文头部的 源IP (SIP) 和 目的IP (DIP) 始终保持不变(除非经过NAT)。IP地址的意义在于跨链路全局寻址。
- 二层信息逐跳转写:以太网帧的 源MAC (SMAC) 和 目的MAC (DMAC) 在每一次经过三层网关路由时,必然发生改写。MAC地址只具有链路内局部寻址的意义。
- 接口动作 UT/TG 决定包形态:
- Access 接口:发送时永远执行 Untag (UT) 动作,去掉Tag,终端设备收到的是原始无标记以太网帧。
- Trunk 接口:发送时除非遇到PVID,否则永远执行 Tag (TG) 动作,带有VLAN标签的帧在骨干交换网络中流转。
🛠️ 排错 (Troubleshooting) 黄金思路
如果遇到跨VLAN无法Ping通的问题,应按照数据流向逐一排查:
🛑 故障排查核心思路
- 检查终端配置:IP、子网掩码、默认网关是否配置正确且在同一网段?
- 检查二层路径连通性:
display vlan:接口是否正确划入指定的VLAN?Trunk接口是否放行了对应的VLAN?display mac-address:交换机是否正常学习到了终端和网关的MAC地址?display stp brief:相关互联接口是否处于 Forwarding 状态?是否被STP错误阻塞导致二层不通?
- 检查三层路由与ARP:
display ip interface brief:网关VLANIF或路由器子接口状态是否为双UP (Physical UP, Protocol UP)?display arp:网关是否成功解析到了终端或下一跳路由器的ARP表项?(Incomplete表示未解析成功)display ip routing-table:设备是否有去往目的网段的路由?切记检查是否有正确的回程路由(回包路由)!