从零到三层互通:用Wireshark抓包带你理解VXLAN跨子网转发全过程
当我们在数据中心网络中谈论VXLAN时,常常会听到"大二层"、"Overlay网络"这些概念。但真正理解VXLAN如何实现跨子网通信,需要深入到数据包层面,观察报文在每一跳的形态变化。本文将带你通过Wireshark抓包,像观看一部网络协议纪录片一样,直观理解VXLAN从二层封装到三层路由的全过程。
1. 实验环境搭建与抓点规划
在开始抓包前,我们需要精心设计实验拓扑和抓包位置。不同于普通配置实验,协议分析需要我们在关键网络节点部署抓包点,就像在高速公路的每个收费站安装摄像头一样。
实验采用华为eNSP模拟器搭建,包含三台CE系列交换机,其中CE1和CE2作为VTEP(VXLAN Tunnel End Point),CE3作为集中式网关。拓扑中设计了两个VXLAN网络:
- VNI 10:子网192.168.1.0/24
- VNI 20:子网192.168.2.0/24
关键抓包位置规划:
- VTEP入口:在CE1的物理接口GE1/0/0抓取原始以太网帧
- VTEP出口:在CE1的NVE隧道接口抓取封装后的VXLAN报文
- Underlay网络:在CE1与CE3间的物理链路抓取传输中的UDP报文
- 网关入口:在CE3的NVE接口抓取解封装前的VXLAN报文
- 网关路由后:在CE3的Vbdif接口抓取路由后的原始IP包
提示:在eNSP中抓包需要为每个链路创建抓包文件,建议为每个抓点命名时包含节点和方向信息,如"CE1_GE1-0-0_inbound.pcap"
2. VXLAN初始封装:从原始帧到Overlay报文
当VNI 10网络中的主机192.168.1.100向192.168.2.100发送ICMP请求时,让我们观察数据包在CE1 VTEP上的变形记。
原始以太网帧(抓点1):
Frame 1: 74 bytes on wire (592 bits) Destination: 00:11:22:33:44:55 (CE1的MAC) Source: aa:bb:cc:dd:ee:ff (Host1的MAC) Type: IPv4 (0x0800) Internet Protocol Version 4, Src: 192.168.1.100, Dst: 192.168.2.100 Version: 4 Header Length: 20 bytes Total Length: 60 Protocol: ICMP (1) Internet Control Message Protocol Type: 8 (Echo (ping) request)封装后的VXLAN报文(抓点2):
Frame 2: 154 bytes on wire (1232 bits) Outer Ethernet II Destination: 33:33:33:33:33:33 (CE3的MAC) Source: 11:11:11:11:11:11 (CE1的MAC) Outer IPv4 Source: 1.1.1.1 (CE1的VTEP IP) Destination: 3.3.3.3 (CE3的VTEP IP) Outer UDP Source Port: 48728 Destination Port: 4789 (VXLAN IANA端口) VXLAN Header Flags: 0x08 (I flag set) VNI: 10 Inner Ethernet II Destination: 00:11:22:33:44:55 (原始帧目标MAC) Source: aa:bb:cc:dd:ee:ff (原始帧源MAC) Type: IPv4 (0x0800) [原始IP和ICMP内容不变]关键字段解析:
| 字段层级 | 关键字段 | 说明 |
|---|---|---|
| 外层以太网 | 目标MAC | Underlay网络的下一跳MAC |
| 外层IP | 源/目的IP | VTEP的环回口地址 |
| UDP头 | 目的端口 | 固定4789,标识VXLAN协议 |
| VXLAN头 | VNI | 虚拟网络标识,决定报文归属哪个Overlay网络 |
| 内层以太网 | 源/目的MAC | 原始主机的MAC地址 |
这个变形过程展示了VXLAN的核心价值:将原始二层帧完整封装在UDP报文中,通过三层网络传输,实现"二层over三层"的隧道效果。
3. 跨子网路由:网关处的报文手术
当封装后的报文到达集中式网关CE3时,会发生一系列复杂的处理流程。通过对比抓点4和抓点5的报文,我们可以清晰地看到这一过程。
网关接收到的VXLAN报文(抓点4): 与抓点2的结构完全一致,只是外层源IP变为1.1.1.1,外层目的IP为3.3.3.3。
网关处理后的IP报文(抓点5):
Frame 3: 74 bytes on wire (592 bits) Ethernet II Destination: 66:77:88:99:aa:bb (Host2的MAC) Source: cc:dd:ee:ff:00:11 (CE3的Vbdif20 MAC) IPv4 Source: 192.168.1.100 (原始源IP保持不变) Destination: 192.168.2.100 (原始目的IP) ICMP Type: 8 (Echo request)网关处理的三个关键步骤:
- 解封装:剥离外层UDP/IP头,根据VNI=10将内层帧送入BD 10
- 路由查找:检查目的IP 192.168.2.100,匹配Vbdif20接口路由
- 重新封装:以Vbdif20的MAC为源,Host2的MAC为目的,重新构造以太网帧
注意:在跨子网通信时,网关不会保留原始帧的MAC地址,而是执行完整的L3路由过程。这与同子网通信有本质区别。
4. 回程报文:完整的通信闭环
为了全面理解VXLAN三层互通,我们需要观察从192.168.2.100返回192.168.1.100的ICMP响应报文。这个过程中最有趣的是网关如何维护双向流的状态。
回程报文的特殊处理:
- 网关收到来自Host2的原始帧(目的MAC为Vbdif20)
- 执行路由查找,发现目的IP属于Vbdif10接口
- 检查ARP表获取Host1的MAC地址
- 使用VNI=10重新进行VXLAN封装
关键对比项:
| 方向 | 源VNI | 目的VNI | 外层源IP | 外层目的IP |
|---|---|---|---|---|
| 去程 | 10 | - | 1.1.1.1 | 3.3.3.3 |
| 回程 | 20 | 10 | 3.3.3.3 | 1.1.1.1 |
这个对比展示了VXLAN网关的智能之处:它能根据流量方向自动选择正确的VNI进行封装,实现双向通信的无缝衔接。
5. 深度解析:Wireshark中的高级过滤技巧
为了更高效地分析VXLAN流量,我们需要掌握一些Wireshark高级过滤技巧。这些技巧能帮助我们在复杂的抓包文件中快速定位目标报文。
常用显示过滤器:
# 过滤所有VXLAN报文 vxlan # 过滤特定VNI的流量 vxlan.vni == 10 # 过滤跨子网通信的ICMP流量 icmp && (ip.src == 192.168.1.100 || ip.dst == 192.168.1.100) # 查看ARP流量 arp || (vxlan && eth.type == 0x0806)关键统计功能:
- Conversations统计:查看各VTEP间的流量分布
- IO Graphs:分析流量随时间变化趋势
- Flow Graph:可视化端到端通信流程
典型问题诊断方法:
- 隧道建立问题:检查VTEP间能否ping通,确认UDP 4789端口开放
- 封装问题:验证VNI配置一致性,确认头端复制列表正确
- 路由问题:检查Vbdif接口状态和路由表是否正确
在实际项目中,我经常遇到VXLAN隧道两端配置不一致导致通信失败的情况。这时候对比两端抓包文件中的VXLAN头字段,往往能快速定位问题根源。