当前位置: 首页 > news >正文

从零到三层互通:用Wireshark抓包带你理解VXLAN跨子网转发全过程

从零到三层互通:用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

关键抓包位置规划

  1. VTEP入口:在CE1的物理接口GE1/0/0抓取原始以太网帧
  2. VTEP出口:在CE1的NVE隧道接口抓取封装后的VXLAN报文
  3. Underlay网络:在CE1与CE3间的物理链路抓取传输中的UDP报文
  4. 网关入口:在CE3的NVE接口抓取解封装前的VXLAN报文
  5. 网关路由后:在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内容不变]

关键字段解析

字段层级关键字段说明
外层以太网目标MACUnderlay网络的下一跳MAC
外层IP源/目的IPVTEP的环回口地址
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)

网关处理的三个关键步骤

  1. 解封装:剥离外层UDP/IP头,根据VNI=10将内层帧送入BD 10
  2. 路由查找:检查目的IP 192.168.2.100,匹配Vbdif20接口路由
  3. 重新封装:以Vbdif20的MAC为源,Host2的MAC为目的,重新构造以太网帧

注意:在跨子网通信时,网关不会保留原始帧的MAC地址,而是执行完整的L3路由过程。这与同子网通信有本质区别。

4. 回程报文:完整的通信闭环

为了全面理解VXLAN三层互通,我们需要观察从192.168.2.100返回192.168.1.100的ICMP响应报文。这个过程中最有趣的是网关如何维护双向流的状态。

回程报文的特殊处理

  1. 网关收到来自Host2的原始帧(目的MAC为Vbdif20)
  2. 执行路由查找,发现目的IP属于Vbdif10接口
  3. 检查ARP表获取Host1的MAC地址
  4. 使用VNI=10重新进行VXLAN封装

关键对比项

方向源VNI目的VNI外层源IP外层目的IP
去程10-1.1.1.13.3.3.3
回程20103.3.3.31.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)

关键统计功能

  1. Conversations统计:查看各VTEP间的流量分布
  2. IO Graphs:分析流量随时间变化趋势
  3. Flow Graph:可视化端到端通信流程

典型问题诊断方法

  1. 隧道建立问题:检查VTEP间能否ping通,确认UDP 4789端口开放
  2. 封装问题:验证VNI配置一致性,确认头端复制列表正确
  3. 路由问题:检查Vbdif接口状态和路由表是否正确

在实际项目中,我经常遇到VXLAN隧道两端配置不一致导致通信失败的情况。这时候对比两端抓包文件中的VXLAN头字段,往往能快速定位问题根源。

http://www.jsqmd.com/news/689267/

相关文章:

  • 别再死记硬背PID公式了!用这个水槽模型,5分钟搞懂P、I、D到底在干啥
  • 从Git SSL报错到HTTPS原理:手把手教你用OpenSSL诊断并修复证书链问题
  • 家有小学生必看!在家学同步教材,这4类工具刚需不踩坑 - 品牌测评鉴赏家
  • 没搞清楚这组概念之前,先别碰你的毕业论文——实测好写作AI降重降AIGC“三步闭环法”
  • 为什么越来越多女性创业者选择“玫瑰工程”?一个运营十五年的社区健康品牌深度解析 - 速递信息
  • utron与其他Go框架对比:为什么选择这个轻量级MVC方案
  • Unitree R1人形机器人:低成本高性能的开发者平台
  • go-dockerclient Swarm 集群管理:服务部署与节点调度实战
  • MeshAnything核心技术解析:自回归变压器如何实现艺术家级网格生成
  • PCIe 6.0实战避坑:为什么你的Flit里TLP塞不到9个?聊聊Half-Flit那8个TLP的硬性规定
  • STM32CubeIDE HAL库实战:搞定W25Q128跨页跨扇区写入的坑(附完整代码)
  • Python数据可视化实战:用Seaborn boxplot解锁数据分布洞察
  • 基于 AI Agent 架构,侠客工坊如何将移动端设备重塑为 24 小时运转的“数字员工”?
  • 音乐自由解码:3分钟解锁你的加密音乐库
  • FlyonUI实战案例:从零搭建现代化管理后台
  • 基于微信小程序实现校车购票管理系统【内附项目源码+论文说明】
  • Vue2集成WebUploader如何实现农田监控图片的自动分片断点续传与云端同步插件?
  • BPE算法解析:NLP预处理技术的核心原理与实践
  • 别再瞎买辅导课!4款探究类学习APP,真正帮孩子提升理解能力 - 品牌测评鉴赏家
  • QuantEcon.py入门指南:10分钟掌握经济学计算利器
  • Vivado FIR IP核的‘硬件过采样’到底省了多少DSP?一个实例带你算明白
  • 别再踩坑了!微信小程序支付signType必须用‘HMAC-SHA256’,total_fee缺失的真相在这里
  • libwebp性能优化秘籍:10个技巧让你的WebP图片加载更快
  • 如何将libwebp集成到你的项目中:C、Python、Java多语言绑定
  • mahjong-helper安全与部署:本地证书与HTTPS配置完整教程
  • JoinQuant新手避坑指南:从零搭建你的第一个Python量化策略(附完整代码)
  • 告别SFINAE与宏地狱,用C++26反射实现类型安全的序列化引擎,性能提升47%
  • WinKawaks 宏指令:从入门到实战的格斗连招自动化指南
  • 今日总计
  • 邮件骚扰取证分析:digital-forensics-lab Email_Harassment 案例研究