VXLAN:背景、机制、报文字段与主机转发流程
1. 引言
VXLAN(Virtual eXtensible Local Area Network,虚拟可扩展局域网)是当前数据中心、云计算和容器网络中最主流的 Overlay 网络技术之一。它解决了传统 VLAN 在大规模多租户场景下的诸多限制,让二层网络可以跨越三层 IP 网络进行扩展。
本文面向初学者,按照「背景 → 机制 → 报文 → 字段含义 → 结合 IP 的主机转发流程」这条主线,把 VXLAN 的核心知识系统地串起来。
2. 背景:为什么需要 VXLAN
在了解 VXLAN 之前,先看传统 VLAN 遇到的两个核心问题。
2.1 VLAN 的 4096 上限
传统二层网络通过 VLAN 实现隔离,VLAN ID 在以太网 802.1Q 标签中只有 12 bit,因此最多只能划分 4094 个 VLAN。在单机时代这个数量足够,但在大型云平台中:
- 一个云平台可能同时服务成千上万个租户;
- 每个租户往往需要多个独立的二层网段;
- 4094 个 VLAN 很快就被耗尽。
因此,需要一种能提供更多隔离标识的机制。
2.2 二层网络难以跨越三层边界
VLAN 本质上是二层技术,广播域被限制在同一个二层网络中。当虚拟机被调度到不同机架、不同机房,或者需要跨越三层 IP 网络时:
- 传统的 STP(生成树协议)会阻塞冗余链路,导致链路利用率低;
- 二层网络规模过大时,广播风暴、MAC 表膨胀等问题会急剧恶化;
- 数据中心希望所有主机都处在同一个「大二层」网络中,但底层物理网络却是三层的 IP 网络。
VXLAN 正是为了解决「大二层 + 多租户 + 跨三层」的矛盾而诞生。
3. VXLAN 核心机制
3.1 Overlay 与 Underlay
VXLAN 采用 Overlay(叠加网络) 思想:
- Underlay 网络:底层的物理 IP 网络,负责提供三层可达性,不关心上层业务;
- Overlay 网络:在 Underlay 之上构建的虚拟二层网络,承载租户的原始以太网帧。
可以把 Underlay 理解为「高速公路」,VXLAN 隧道理解为「在高速公路上跑的封闭摆渡车」——车里的内容(租户二层帧)对高速公路本身是透明的。
3.2 VTEP 端点
VTEP(VXLAN Tunnel End Point,VXLAN 隧道端点) 是 VXLAN 中的关键角色,通常集成在支持 VXLAN 的硬件交换机、虚拟交换机(如 Open vSwitch)上,也有独立部署的情况。
VTEP 的职责:
- 封装:本地虚拟机发出的原始二层帧,在 VTEP 处被加上 VXLAN 头、UDP 头、外层 IP 头后发往对端;
- 解封装:收到外层报文后,剥掉外层头,还原出原始二层帧,再交给本地虚拟机;
- 地址学习:维护「远端 MAC → 远端 VTEP IP」的映射关系。
3.3 VNI 网络标识
VXLAN 使用 VNI(VXLAN Network Identifier) 代替 VLAN ID 作为隔离标识。VNI 字段有 24 bit,理论上可以支持 约 1600 万个隔离网络,彻底突破了 VLAN 的 4096 限制。
逻辑关系如下:
| 概念 | 作用 | 位宽 | 数量 |
|---|---|---|---|
| VLAN ID | 传统二层隔离 | 12 bit | 4094 |
| VNI | VXLAN 二层隔离 | 24 bit | 约 1677 万 |
4. VXLAN 报文格式
VXLAN 的本质是 MAC-in-UDP:完整的原始二层以太网帧作为「乘客数据」,被封装在 UDP 报文中传输。
4.1 整体封装结构
+---------------------------------------------------+
| Outer Ethernet Header | <- 底层物理网络承载
+---------------------------------------------------+
| Outer IP Header | <- 源/目的 VTEP IP
+---------------------------------------------------+
| Outer UDP Header | <- 目的端口固定为 4789
+---------------------------------------------------+
| VXLAN Header | <- 携带 VNI 等信息
+---------------------------------------------------+
| Original Ethernet Frame | <- 原始二层帧(乘客)
| (原始 MAC 头 + 原始 IP 头 + 原始数据) |
+---------------------------------------------------+
| FCS | <- 外层帧校验
+---------------------------------------------------+
4.2 VXLAN 头部字段详解
VXLAN 头部固定为 8 字节,位于 UDP 头之后、原始二层帧之前。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|R|R|R|I|R|R|R| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| VXLAN Network Identifier (VNI) | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
其中:第一行的 R 均为保留位,I 为 I 标志位。
| 字段 | 位宽 | 说明 |
|---|---|---|
| Flags(R/I) | 8 bit | 第 5 bit 为 I 标志位,置 1 表示 VNI 字段有效;其余为保留位,必须为 0 |
| Reserved | 24 bit | 紧随 Flags 之后,保留字段,必须为 0 |
| VNI | 24 bit | VXLAN 网络标识,用于识别所属虚拟二层网络 |
| Reserved | 8 bit | VNI 之后的保留字段,必须为 0 |
4.3 外层 UDP 报文
VXLAN 使用 UDP 承载,其中:
- 目的端口固定为 4789(IANA 分配的 VXLAN 标准端口);
- 源端口通常由 VTEP 根据内层报文的哈希值(如五元组)动态生成,这样可以使不同业务的流量分散到不同的等价路径上,便于 ECMP 负载均衡;
- UDP 让 VXLAN 能够依托成熟的 IP 网络进行转发,并利用五元组实现更好的负载分担。
4.4 外层 IP 头
外层 IP 头的源地址和目的地址分别是「本端 VTEP 的 IP」和「对端 VTEP 的 IP」。也就是说:
- 外层源 IP:发送方 VTEP 的 Underlay IP;
- 外层目的 IP:接收方 VTEP 的 Underlay IP。
底层 IP 网络只关注外层 IP 头进行转发,完全感知不到内层租户的二层帧。
5. VXLAN 与 IP 网络的结合
5.1 逻辑分层
VXLAN 把网络清晰地分成逻辑上的三层:
5.2 Underlay 只需保证 VTEP 间 IP 可达
VXLAN 对底层网络的核心要求非常简单:所有 VTEP 之间三层 IP 可达。
- 底层可以是三层交换机、路由器,也可以是基于 BGP/OSPF 的 IP Fabric;
- 底层网络不需要学习租户的 MAC 地址;
- 底层网络只需要根据外层 IP 目的地址转发报文。
这种「把二层问题交给三层解决」的思路,极大简化了物理网络的设计,也避免了大规模二层网络的广播与 MAC 表问题。
6. 主机转发实际流程
下面通过两个典型场景说明数据从主机发出后,是如何在 VXLAN 网络中完成转发的。
6.1 场景一:同一 VNI 内不同主机互访(首次通信)
假设有两台虚拟机:
- VM-A:MAC 为
MA,IP 为192.168.1.10,挂载在主机Host-1,属于VNI 100; - VM-B:MAC 为
MB,IP 为192.168.1.20,挂载在主机Host-2,属于VNI 100; Host-1的 VTEP IP 为10.0.0.1,Host-2的 VTEP IP 为10.0.0.2。
假设 VM-A 第一次 ping VM-B,完整流程如下:
逐步说明:
- VM-A 发起 ARP 请求:VM-A 想给
192.168.1.20发包,先发出 ARP Request 广播,询问谁是192.168.1.20,源 MAC 为MA; - VTEP1 处理广播:Host-1 上的 VTEP 收到 ARP 广播。由于 VTEP 之间尚未学习到目标 MAC,该广播需要在
VNI 100内泛洪; - VTEP1 封装泛洪:VTEP1 将原始 ARP 广播帧封装,外层源 IP 为
10.0.0.1,外层目的 IP 为组播地址(用于 BUM 流量泛洪),VNI 填100,通过底层 IP 网络转发给所有相关 VTEP; - 底层 IP 网络转发:底层交换机/路由器只根据外层 IP 目的地址转发报文到各个 VTEP;
- VTEP2 解封装:Host-2 上的 VTEP 收到后剥掉外层头,发现 VNI 为
100,将原始 ARP 广播还原并广播到本地属于VNI 100的虚拟接口,VM-B 收到; - VM-B 回复 ARP:VM-B 发现问的是自己的 IP,单播回复 ARP Reply,携带自己的 MAC
MB; - VTEP2 封装单播:VTEP2 将 ARP Reply 封装,外层目的 IP 为对端 VTEP IP
10.0.0.1; - 底层 IP 网络转发:报文到达 VTEP1;
- VTEP1 解封装:还原 ARP Reply 交给 VM-A。
说明:BUM 流量即 Broadcast(广播)、Unknown unicast(未知单播)、Multicast(组播),这类流量在 VXLAN 中需要泛洪。对于标准 VXLAN,底层依赖 IP 组播完成泛洪;对于 EVPN-VXLAN 或集中式控制平面,则通过控制平面同步 MAC 和 VTEP 信息,减少泛洪。
6.2 场景二:MAC 学习完成后的单播转发
当上面的 ARP 过程完成后,VTEP1 已经学习到映射关系:
远端 MAC:MB -> 远端 VTEP IP:10.0.0.2(VNI 100)
此时 VM-A 再次向 VM-B 发送 ICMP 请求,进入纯单播转发流程:
逐步说明:
- VM-A 发送普通以太网帧,目的 MAC 为
MB; - VTEP1 在内层查 MAC 表,得知
MB对应的远端 VTEP IP 为10.0.0.2; - VTEP1 封装:外层目的 IP 直接填
10.0.0.2,外层源 IP 填10.0.0.1,VNI 填100; - 报文在 Underlay IP 网络中逐跳三层路由转发到 Host-2;
- VTEP2 收到后解封装,确认 VNI 有效并还原原始帧;
- VM-B 收到与 VM-A 直连二层网络完全一致的原始帧。
6.3 跨网段转发(经过三层网关)
如果 VM-A(192.168.1.10)要访问另一 VNI 或另一网段的主机,则需要经过 VXLAN 三层网关。
简化流程如下:
核心点:
- 内层报文的「目的 MAC」指向网关的虚拟 MAC,网关通常以 SVI(交换机虚拟接口) 或分布式网关形式存在;
- 报文先被送到网关 VTEP,解封装后在内层执行三层路由查找;
- 找到出口后,网关重新封装报文,将外层目的 IP 改为目标主机所在 VTEP 的 IP,VNI 改为目标网段对应的 VNI;
- 最终目标 VTEP 解封装后把报文交给目标主机。
6.4 关键转发结论
| 转发场景 | 内层目的 MAC | 外层目的 IP | 是否走网关 |
|---|---|---|---|
| 同 VNI 已知单播 | 目标主机 MAC | 目标主机所在 VTEP IP | 否 |
| 同 VNI BUM 流量 | 广播/组播 | 组播地址或泛洪列表 | 否 |
| 跨 VNI/跨网段 | 网关虚拟 MAC | 网关 VTEP IP | 是 |
7. 总结
VXLAN 的核心可以归纳为以下几点:
- 背景:解决 VLAN 4094 上限和大二层跨三层扩展问题;
- 机制:基于 MAC-in-UDP 的 Overlay 技术,通过 VTEP 实现封装与解封装;
- 标识:使用 24 bit 的 VNI 提供约 1600 万级别的逻辑隔离;
- 报文:原始二层帧外层依次封装 VXLAN 头、UDP 头、IP 头;UDP 目的端口固定为 4789;
- 转发:内层依靠 MAC 地址定位目标主机,外层依靠 IP 地址定位远端 VTEP;首次通信走泛洪学习,学习完成后走单播转发;
- 与 IP 结合:Underlay 只需保证 VTEP 之间 IP 可达,底层网络完全不感知租户二层内容。
理解 VXLAN,本质上就是理解「如何利用成熟的 IP 网络,承载一个虚拟的、可大规模扩展的二层网络」。掌握了背景、报文字段和两种转发流程,再去看 EVPN-VXLAN、VTEP 之间的 BGP EVPN 控制平面就有了坚实的基础。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)