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 的职责:

  1. 封装:本地虚拟机发出的原始二层帧,在 VTEP 处被加上 VXLAN 头、UDP 头、外层 IP 头后发往对端;
  2. 解封装:收到外层报文后,剥掉外层头,还原出原始二层帧,再交给本地虚拟机;
  3. 地址学习:维护「远端 MAC → 远端 VTEP IP」的映射关系。

3.3 VNI 网络标识

VXLAN 使用 VNI(VXLAN Network Identifier) 代替 VLAN ID 作为隔离标识。VNI 字段有 24 bit,理论上可以支持 约 1600 万个隔离网络,彻底突破了 VLAN 的 4096 限制。

逻辑关系如下:

概念作用位宽数量
VLAN ID传统二层隔离12 bit4094
VNIVXLAN 二层隔离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
Reserved24 bit紧随 Flags 之后,保留字段,必须为 0
VNI24 bitVXLAN 网络标识,用于识别所属虚拟二层网络
Reserved8 bitVNI 之后的保留字段,必须为 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 把网络清晰地分成逻辑上的三层:

租户业务流量(原始二层帧)

VTEP 封装(Overlay)

UDP/IP 承载(Underlay)

底层 IP 网络路由转发

对端 VTEP 解封装

还原原始二层帧交给目标主机

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-BHost-2 VTEP底层 IP 网络Host-1 VTEPVM-AVM-BHost-2 VTEP底层 IP 网络Host-1 VTEPVM-A1. 原始 ARP Request(广播)2. 在本地 VNI 100 内广播3. 封装后经 IP 组播/泛洪发往远端 VTEP4. 转发到 VTEP25. 解封装还原 ARP 广播6. ARP Reply(单播)7. 封装后发回 VTEP18. 转发到 VTEP19. 解封装还原 ARP Reply

逐步说明:

  1. VM-A 发起 ARP 请求:VM-A 想给 192.168.1.20 发包,先发出 ARP Request 广播,询问谁是 192.168.1.20,源 MAC 为 MA;
  2. VTEP1 处理广播:Host-1 上的 VTEP 收到 ARP 广播。由于 VTEP 之间尚未学习到目标 MAC,该广播需要在 VNI 100 内泛洪;
  3. VTEP1 封装泛洪:VTEP1 将原始 ARP 广播帧封装,外层源 IP 为 10.0.0.1,外层目的 IP 为组播地址(用于 BUM 流量泛洪),VNI 填 100,通过底层 IP 网络转发给所有相关 VTEP;
  4. 底层 IP 网络转发:底层交换机/路由器只根据外层 IP 目的地址转发报文到各个 VTEP;
  5. VTEP2 解封装:Host-2 上的 VTEP 收到后剥掉外层头,发现 VNI 为 100,将原始 ARP 广播还原并广播到本地属于 VNI 100 的虚拟接口,VM-B 收到;
  6. VM-B 回复 ARP:VM-B 发现问的是自己的 IP,单播回复 ARP Reply,携带自己的 MAC MB;
  7. VTEP2 封装单播:VTEP2 将 ARP Reply 封装,外层目的 IP 为对端 VTEP IP 10.0.0.1;
  8. 底层 IP 网络转发:报文到达 VTEP1;
  9. 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
源 MAC=MA

VTEP1 查 MAC 表
MB -> 10.0.0.2

VTEP1 封装
外层源 IP=10.0.0.1
外层目的 IP=10.0.0.2
VNI=100

底层 IP 网络转发

VTEP2 解封装
还原原始帧

VM-B 收到原始帧

逐步说明:

  1. VM-A 发送普通以太网帧,目的 MAC 为 MB;
  2. VTEP1 在内层查 MAC 表,得知 MB 对应的远端 VTEP IP 为 10.0.0.2;
  3. VTEP1 封装:外层目的 IP 直接填 10.0.0.2,外层源 IP 填 10.0.0.1,VNI 填 100;
  4. 报文在 Underlay IP 网络中逐跳三层路由转发到 Host-2;
  5. VTEP2 收到后解封装,确认 VNI 有效并还原原始帧;
  6. VM-B 收到与 VM-A 直连二层网络完全一致的原始帧。

6.3 跨网段转发(经过三层网关)

如果 VM-A(192.168.1.10)要访问另一 VNI 或另一网段的主机,则需要经过 VXLAN 三层网关。

简化流程如下:

VM-A

VTEP1 封装
目的=网关 VTEP IP

底层 IP 网络

VXLAN 网关(分布式/集中式)

解封装后查路由表
执行三层转发

重新封装
目的=目标 VTEP IP

底层 IP 网络

目标 VTEP 解封装

目标主机

核心点:

  1. 内层报文的「目的 MAC」指向网关的虚拟 MAC,网关通常以 SVI(交换机虚拟接口) 或分布式网关形式存在;
  2. 报文先被送到网关 VTEP,解封装后在内层执行三层路由查找;
  3. 找到出口后,网关重新封装报文,将外层目的 IP 改为目标主机所在 VTEP 的 IP,VNI 改为目标网段对应的 VNI;
  4. 最终目标 VTEP 解封装后把报文交给目标主机。

6.4 关键转发结论

转发场景内层目的 MAC外层目的 IP是否走网关
同 VNI 已知单播目标主机 MAC目标主机所在 VTEP IP否
同 VNI BUM 流量广播/组播组播地址或泛洪列表否
跨 VNI/跨网段网关虚拟 MAC网关 VTEP IP是

7. 总结

VXLAN 的核心可以归纳为以下几点:

  1. 背景:解决 VLAN 4094 上限和大二层跨三层扩展问题;
  2. 机制:基于 MAC-in-UDP 的 Overlay 技术,通过 VTEP 实现封装与解封装;
  3. 标识:使用 24 bit 的 VNI 提供约 1600 万级别的逻辑隔离;
  4. 报文:原始二层帧外层依次封装 VXLAN 头、UDP 头、IP 头;UDP 目的端口固定为 4789;
  5. 转发:内层依靠 MAC 地址定位目标主机,外层依靠 IP 地址定位远端 VTEP;首次通信走泛洪学习,学习完成后走单播转发;
  6. 与 IP 结合:Underlay 只需保证 VTEP 之间 IP 可达,底层网络完全不感知租户二层内容。

理解 VXLAN,本质上就是理解「如何利用成熟的 IP 网络,承载一个虚拟的、可大规模扩展的二层网络」。掌握了背景、报文字段和两种转发流程,再去看 EVPN-VXLAN、VTEP 之间的 BGP EVPN 控制平面就有了坚实的基础。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐