第255篇:VXLAN 在数据中心的应用场景
关键词:VXLAN、VTEP、VNI、虚拟机迁移、多租户隔离、VXLAN头、UDP 4789、华为CloudEngine
一、引言
第254篇中,我们深入分析了传统VLAN在数量、扩展性和控制面方面的局限性,并指出Overlay网络是突破这些限制的方向。在所有Overlay技术中,VXLAN(Virtual Extensible LAN)以其简单的设计哲学和强大的功能集合,成为数据中心Overlay网络的事实标准。
VXLAN由VMware主导设计,于2013年以IETF RFC 7348的形式标准化。其核心思想极其简单:将原始二层以太网帧封装在UDP报文中,通过IP网络传输。这种"隧道中套隧道"的设计使得Overlay网络完全独立于Underlay网络的拓扑和协议,实现了逻辑与物理的彻底解耦。
本文将深入剖析VXLAN的技术细节,包括报文封装格式、VTEP的工作机制、VNI的分配策略,并结合华为CloudEngine设备给出典型应用场景的配置示例和故障案例。
二、VXLAN 报文封装格式
2.1 封装结构
VXLAN封装在原始以太网帧的外侧包裹了三层包头:外层以太网头、外层IP头和VXLAN头,并通过UDP协议在Underlay网络上传输。
VXLAN封装在原始以太网帧的外侧包裹了多层包头,按从外到内的顺序依次为:
| 层次(从外到内) | 头部名称 | 大小 | 关键字段 |
|---|---|---|---|
| 1(最外层) | Outer Ethernet Header | 14字节 | 目的MAC=远端VTEP, 源MAC=本地VTEP |
| 2 | Outer IPv4 Header / IPv6 Header | 20字节(IPv4) / 40字节(IPv6) | 目的IP=远端VTEP Lo, 源IP=本地VTEP Lo, Proto=UDP(17) |
| 3 | UDP Header | 8字节 | 目的端口=4789, 源端口=随机 |
| 4 | VXLAN Header | 8字节 | Flags(I位=1), VNI(24bit) |
| 5(最内层) | Inner Ethernet Frame | ≤1450字节 | 原始二层帧(含VM的MAC/IP) |
2.2 VXLAN 头部字段详解
VXLAN头部为8字节(64比特),其结构如下:
| 比特位 | 字段名 | 说明 |
|---|---|---|
| 0~7 | Flags | 第24位(I位)为1表示VNI字段有效 |
| 8~23 | Reserved | 保留字段,必须为0 |
| 24~47 | VNI | VXLAN Network Identifier,24比特,支持16777215个逻辑网络 |
| 48~63 | Reserved | 保留字段,必须为0 |
VNI是VXLAN的租户标识符,等价于VLAN ID但范围大得多。VNI为24比特,可分配16777215个唯一的逻辑网络(2^24 - 1)。
2.3 关键设计选择解析
为什么选择UDP而非其他传输协议?
VXLAN选择UDP作为传输协议,基于以下考量: - 无需连接建立和拆除的开销,适合大规模短生命周期隧道 - 不触发TCP的流量控制和拥塞控制,避免与应用层的TCP产生冲突 - 大多数防火墙对UDP 4789端口放行,NAT设备也能正确转发UDP报文 - 支持组播(Multicast),便于广播/组播报文的泛洪
为什么选择4789端口?
IETF正式分配UDP 4789作为VXLAN的标准端口。选择此端口而非其他端口的原因是:4789是一个高位端口(>49152以下为IANA注册端口范围),不会被操作系统动态分配给本地进程,同时也避开了常用服务端口。
三、VTEP 工作原理
3.1 VTEP 的角色
VTEP(VXLAN Tunnel Endpoint)是VXLAN网络的终结点,负责Overlay报文和Underlay报文之间的封装与解封装。在Spine-Leaf架构中,VTEP通常部署在Leaf交换机上。

3.2 VTEP 的数据面流程
封装流程(Encapsulation): 1. Leaf收到来自VM的原始以太网帧 2. 根据目的MAC地址查询本地MAC↔VTEP映射表 3. 如果目的MAC对应的VTEP是本Leaf(本地交付),直接转发到下联端口 4. 如果目的MAC对应的VTEP是远端Leaf,进行VXLAN封装: - 外层目的IP = 远端VTEP的Loopback IP - 外层源IP = 本VTEP的Loopback IP - 外层目的UDP端口 = 4789 - VXLAN头中的VNI = 源端口所属的VNI 5. 将封装后的报文通过Underlay IP网络发送
解封装流程(Decapsulation): 1. Leaf收到目的端口为4789的UDP报文 2. 解析VXLAN头,提取VNI 3. 查找VNI对应的逻辑网络(VRF或VLAN) 4. 剥离外层包头,得到原始以太网帧 5. 根据原始帧的目的MAC地址进行二层转发
3.3 VTEP 地址的选择
VTEP的Loopback接口地址作为VXLAN隧道的端点IP,具有以下优势: - 冗余性:即使某个物理链路故障,Loopback地址仍然可达 - ECMP:通过BGP或IGP将Loopback地址发布到所有Spine,形成多路径路由 - 稳定性:不依赖任何物理接口的UP/DOWN状态
四、VXLAN 典型应用场景
4.1 场景一:虚拟机热迁移(Live Migration)
需求:虚拟机从一台物理服务器迁移到另一台物理服务器时,保持IP地址和MAC地址不变。
在传统VLAN架构中,虚拟机迁移后如果跨Leaf,需要通过VLAN跨Leaf扩展(如M-LAG),扩展范围有限。在VXLAN架构中,虚拟机只需保持在同一个VNI中,无论迁移到哪个Leaf下,其通信不受影响。
# ============================================
# 场景:虚拟机热迁移后的 VXLAN 通信
# VM从 Leaf-01 迁移到 Leaf-03
# ============================================
# Leaf-01 (迁移前的 VTEP)
vxlan vtep 10.255.254.1
ip vpn-instance VRF-TenantA
vxlan vni 10001
destination-ip 10.255.254.2
destination-ip 10.255.254.3
destination-ip 10.255.254.4
# Leaf-03 (迁移后的 VTEP)
# 虚拟机迁移后,BGP EVPN 自动学习新的 MAC↔VTEP 映射
# 旧 VTEP (Leaf-01) 上的 MAC 表项自动老化删除
# 新 VTEP (Leaf-03) 上学习到该 VM 的 MAC 地址
4.2 场景二:多租户网络隔离
需求:在共享的物理基础设施上,为不同租户提供完全隔离的网络环境。
VXLAN通过VNI实现租户隔离。每个租户分配独立的VNI,不同VNI之间的报文互不可达(除非通过路由泄露或NAT)。即使两个租户使用相同的IP地址段(如192.168.1.0/24),只要VNI不同,就不会发生地址冲突。
# ============================================
# 多租户 VXLAN 隔离配置
# ============================================
# 租户 A - VNI 10001
ip vpn-instance TENANT-A
vpn-instance-mode general
ipv4-family
vxlan vtep 10.255.254.1
ip vpn-instance TENANT-A
vxlan vni 10001
# 租户 B - VNI 10002 (使用相同 IP 网段也不会冲突)
ip vpn-instance TENANT-B
vpn-instance-mode general
ipv4-family
vxlan vtep 10.255.254.1
ip vpn-instance TENANT-B
vxlan vni 10002
4.3 场景三:跨数据中心二层延伸
需求:将同一VLAN延伸至另一个地理分散的数据中心,实现跨DC的虚拟机通信。
VXLAN隧道的Underlay传输距离不受限制。只要两个DC之间的Underlay网络具备IP可达性(通过WAN或DCI链路),VXLAN隧道就能跨越任意地理距离建立。
# DC1 Leaf-01 VTEP
vxlan vtep 10.255.254.1
ip vpn-instance VRF-DC-Ext
vxlan vni 20001
destination-ip 203.0.113.10 # DC2 VTEP 的公网/专线地址
# DC2 Leaf-01 VTEP
vxlan vtep 203.0.113.10
ip vpn-instance VRF-DC-Ext
vxlan vni 20001
destination-ip 10.255.254.1 # DC1 VTEP 地址
4.4 场景四:容器网络 Overlay
需求:Kubernetes集群中,Pod跨Node通信时需要Overlay网络。
虽然容器网络更多使用Calico(BGP直连)、Flannel(VXLAN或host-gw)或Cilium(eBPF)等专用方案,但其底层隧道技术很多也基于VXLAN或类似的Overlay封装。
五、VXLAN 的广播/组播/未知单播处理
5.1 问题描述
在二层网络中,广播报文(FF:FF:FF:FF:FF:FF)、组播报文和未知单播报文(目的MAC不在本地MAC表中)需要泛洪到所有同属一个逻辑网络的其他VTEP。但VXLAN隧道是点到点的,如何在点到点的隧道上实现泛洪?
5.2 解决方案对比
| 方案 | 机制 | 优点 | 缺点 |
|---|---|---|---|
| IP组播(Multicast) | Underlay配置PIM,VTEP加入VNI对应的组播组 | 扩展性好,自动发现 | Underlay需部署PIM,配置复杂 |
| 头端复制(Head-end Replication) | 源VTEP逐个向所有远端VTEP发送复制报文 | 简单,无需组播 | 浪费带宽,VTEP数多时效果差 |
| BGP EVPN(Inclusive Multicast) | 通过EVPN Type2/Type3路由自动学习VTEP列表 | 无需组播,自动发现 | 需要BGP EVPN控制面 |
| 静态VTEP配置 | 手动在每个VTEP上配置远端VTEP IP | 最简单 | 不自动,扩展性差 |
5.3 BGP EVPN Inclusive Multicast 机制
BGP EVPN通过Type3路由(Inclusive Multicast Ethertag Route)实现VTEP自动发现。每个VTEP为每个VNI发布一条Type3路由,其他VTEP通过BGP学习到同一VNI的所有VTEP列表。当需要泛洪时,源VTEP根据VTEP列表进行头端复制。
# BGP EVPN 自动泛洪 - 无需手动配置远端 VTEP
bgp 65100
#
address-family evpn
# 使能 EVPN Inclusive Multicast
evpn inclusive-multicast
六、故障案例:VXLAN隧道建立成功但虚拟机无法跨Leaf通信
6.1 故障现象
某企业数据中心部署了4Spine×8Leaf的Spine-Leaf架构,使用静态VXLAN方案。Leaf之间VXLAN隧道状态显示正常(UDP 4789端口可达),但跨Leaf的虚拟机无法互相ping通。同Leaf内的虚拟机通信正常。
6.2 排查过程
第一步:检查VXLAN隧道状态
# 在 Leaf-01 上检查 VXLAN 隧道
Leaf-01> display vxlan vni 10001 peer
VNI Peer IP Tunnel Status
10001 10.255.254.2 Up
10001 10.255.254.3 Up
10001 10.255.254.4 Up
隧道状态均为Up。
第二步:检查MAC地址表
# 在 Leaf-01 上查看 MAC 地址表
Leaf-01> display mac-address vlan 100
Mac Address VLAN Port Type
00:50:56:xx:xx:01 100 10GE1/0/5 Dynamic
00:50:56:xx:xx:02 100 10GE1/0/6 Dynamic
# 注意:没有远端 VM 的 MAC 地址
# 在 Leaf-02 上查看 MAC 地址表
Leaf-02> display mac-address vlan 100
Mac Address VLAN Port Type
00:50:56:xx:xx:10 100 10GE1/0/3 Dynamic
00:50:56:xx:xx:11 100 10GE1/0/4 Dynamic
问题定位:各Leaf只学到了本地VM的MAC地址,没有学到远端VM的MAC。这意味着VXLAN的MAC学习没有正常工作。
第三步:分析根因
在静态VXLAN方案中,MAC地址的学习依赖两种机制: 1. 主动学习:远端VM发送报文时,源VTEP在解封装后学习目的VTEP的MAC地址 2. ARP泛洪:VM发送ARP请求时,VTEP将ARP报文封装在VXLAN中泛洪到所有远端VTEP
检查发现,Underlay网络中的ACL策略阻止了UDP 4789端口以外的所有组播和广播流量。虽然VXLAN封装后的单播报文(UDP 4789)可以通过,但ARP泛洪报文被Underlay的ACL丢弃了。
6.3 解决方案
# 方案1:在 Underlay 的 Spine 上放行 VXLAN 泛洪流量
# 如果使用 IP 组播方式泛洪,需确保 PIM 组播路由正常
# 如果使用头端复制,需确保单播 VXLAN 报文正常转发
# 检查 Spine 上的 ACL
Spine-01> display acl all
# 发现 ACL 3000 阻止了非 UDP 4789 的流量
# 修正 ACL,放行 VXLAN 流量
acl 3000
rule 5 permit udp destination-port eq 4789
rule 10 permit ip # 放行其他 IP 流量
rule 100 deny ip
# 方案2:迁移到 BGP EVPN VXLAN(推荐)
# BGP EVPN 通过单播 BGP 分发 MAC 信息,不依赖泛洪
七、总结
| 应用维度 | VXLAN解决方案 | 核心价值 |
|---|---|---|
| 虚拟机热迁移 | VNI跟随VM,IP/MAC不变 | 迁移零中断 |
| 多租户隔离 | VNI隔离,支持IP地址重叠 | 安全隔离,地址复用 |
| 跨DC二层延伸 | 隧道跨越WAN/DCI | 统一网络管理 |
| 容器网络 | CNI插件集成VXLAN | 动态网络编排 |
| 大二层扩展 | 突破VLAN 4094限制 | 灵活扩展 |
思考
- VXLAN使用UDP 4789端口传输,而UDP是不可靠传输协议。如果Underlay网络出现报文丢失,对VXLAN承载的TCP业务有什么影响?VXLAN本身是否需要可靠性保障?
- 在大规模VXLAN部署中,VTEP数量可能达到数百个。头端复制(Head-end Replication)方式的广播泛洪会产生O(N²)的报文复制开销。如何解决这一问题?
- VXLAN的封装开销为50字节(IPv4),如果Underlay网络使用IPv6,封装开销将增加20字节达到70字节。这对MTU有什么影响?
下篇预告:第256篇:DC EVPN 实现 VXLAN 控制面