一、VXLAN 简介:为了解决 VLAN 的局限
传统的 VLAN(802.1Q)使用 12 位 VLAN ID,仅支持最多 4096 个逻辑网络。这对于现代大规模数据中心来说远远不够。VXLAN(Virtual eXtensible LAN)应运而生。它引入了 24 位的 VNI(VXLAN Network Identifier),支持 最多 1677 万个逻辑网络,是 VLAN 的 4000 倍以上。
VXLAN 的核心思想是:
将原始二层以太网帧封装进 UDP/IP 数据报中,构建基于 IP 网络的大二层 overlay 网络。
二、VXLAN 报文结构详解
下面是 VXLAN 报文的结构图,图中展示了从最外层到最内层的字段定义:
报文构自外向内包含以下几个部分:
2.1 外层封装部分:
Outer Ethernet Header :传统以太网头,MAC DA / SA,标识物理链路传输
Outer IP Header :为封装后的 IP 数据包,VTEP 的第址
Outer UDP Header : Source Port 随机,Dest Port 一般为 4789(VXLAN 默认端口)
2.2 VXLAN Header 字段详解:
Flags : 8 bit 必须设置为 0x08,表示 VNI 有效
Reserved : 8 bit 保留位,必须为 0
Group ID :16 bit 多播组 ID,现多用于保留
VNI :24 bit VXLAN Network Identifier,逻辑网络 ID
Reserved : 8 bit 保留位,必须为 0
2.3原始报文部分
L2 Inner Ethernet Header :Inner Ethernet Header,源 MAC、目的 MAC
L3 Inner IP Header :源 IP、目的 IP,协议类型(如 TCP/UDP)
L4 Inner TCP/UDP Header :源端口、目的端口、校验和等字段
应用 Payload :应用层数据,例如 HTTP、DNS、数据包负在等
三、VXLAN 的通信流程
以下是 VXLAN 的基本通信过程:
VM1 → VTEP1 → 封装为 VXLAN 报文 → 网络传输 → VTEP2 → 解封装 → VM2
具体过程如下:
1. VM1 发出一个以太网帧(如 ARP、ICMP);
2. VTEP1 查询 VXLAN 映射表,查找目标 MAC 所属的目标 VTEP 第址;
3. 若查找到,直接封装并发送到目标 VTEP;
4. 若未查找到,触发洪泛(BUM 流量);
5. VTEP2 收到 VXLAN 报文后解封装,并将内部帧送给 VM2;
6. 同时学习源 MAC、VNI、VTEP 的映射,更新本地转发。
四、OVS 中对 VXLAN 报文的分层识别与解析机制
在我们的 OVS 数据通路中,VXLAN 报文被明确划分为两层结构:外层报文(Outer Packet)与内层报文(Inner Packet)。我们通过模块化的解析流程,在
parser 阶段完成识别与字段提取,并将关键协议栈信息逐级传递给后续模块用于匹配与动作决策。以下是该过程的详细说明:
在 parser 模块 中,首先对报文的协议栈进行递归式解析,从而实现外层协议字段的快速识别:
1、当报文为以太类型为 IPv4 (0x0800)、ipv6(0x08dd),进入 L3 层解析;
2、若 IP 协议字段为 UDP ,进入 L4 层处理;
3、进一步检查,vxlan层,即可判断该报文为 VXLAN 封装。
此时,parser 将其标记为“VXLAN 报文”,并执行特定的 VXLAN 解析路径。
4.1外层字段提取
4.2 内层字段提取
解析完成后,parser 会将所有有效字段、信息封装向后续模块传递。后续模块通过读取这些字段完成匹配与动作决策