第255篇:VXLAN 在数据中心的应用场景
关键词
VXLAN、VTEP、VNI、MAC-in-UDP、隧道封装、大二层、数据中心互联、多租户
一、VXLAN 基本原理
1.1 什么是 VXLAN
VXLAN(Virtual Extensible LAN)是一种MAC-in-UDP 封装技术,将二层以太网帧封装在 UDP 报文中,通过三层 IP 网络传输:
VXLAN 封装格式(总开销 50 字节):
原始二层帧: | MAC DA | MAC SA | 802.1Q | Payload | | --- | --- | --- | --- |
VXLAN 封装后: | Outer MAC 14B | Outer IP 20B | Outer UDP 8B | VXLAN Header 8B | Original Ethernet Frame (原始帧) | | --- | --- | --- | --- | --- | ↑ VXLAN Header: Flags(8bit) | Reserved(24bit) VNI(24bit) | Reserved(8bit)
关键字段: VNI(VXLAN Network Identifier):24-bit,标识虚拟网络 Outer UDP:目标端口 4789(IANA 分配) Outer IP:VTEP 源/目的 IP Outer MAC:下一跳 MAC(Underlay 转发)
1.2 VTEP(VXLAN Tunnel Endpoint)
VTEP 是 VXLAN 隧道的端点,负责封装和解封装:
VTEP 角色:
VTEP 1(Leaf1) VTEP 2(Leaf2)
| VXLAN 隧道端点 封装:MAC→UDP Underlay IP: 10.1.1.1 源端口:随机(ECMP) | VXLAN ─ ─ ─ ─ ─ 隧道 | VXLAN 隧道端点 解封装:UDP→MAC Underlay IP: 10.1.1.2 目标端口:4789 |
|---|---|---|
| │ │ | ||
| VM A(VNI 10001) VM B(VNI 10001) | ||
| MAC: AA:AA:AA:AA:AA:01 MAC: BB:BB:BB:BB:BB:01 | ||
| IP: 192.168.1.10 IP: 192.168.1.20 |
转发流程: VM A → VM B(跨 Leaf)
- VM A 发送以太网帧(dst MAC = VM B)
- Leaf1(VTEP1)收到帧
- VTEP1 查表:VM B 在 VTEP2 下(VNI 10001)
- VTEP1 封装:Outer IP 10.1.1.2, Outer UDP 4789, VNI 10001
- Underlay 网络通过 IP 路由转发到 VTEP2
- VTEP2 解封装,恢复原始以太网帧
- VTEP2 转发给 VM B
1.3 VXLAN 数据平面
VXLAN 转发行为:
已知单播(Known Unicast):
VTEP 已有远端 MAC 的表项 → 直接封装发送
┌────► 查 MAC 表 → 找到 VTEP IP → 封装发送
未知单播/BUM(Broadcast Unknown Unicast Multicast):
VTEP 没有远端 MAC 的表项 → 需要泛洪
┌────► 封装为 VXLAN 组播或 Head-End Replication
注意:EVPN 控制面可以解决 BUM 泛洪问题
通过控制面学习远端 MAC,无需泛洪
二、VXLAN 在数据中心的核心应用场景
2.1 大二层网络(虚拟机迁移)
场景:虚拟机在线迁移
需求: 虚拟机从 Leaf1 迁移到 Leaf3 迁移过程中 IP/MAC 不变 业务不中断
VXLAN 方案:
Spine Layer
| Leaf1 Leaf3 | ||
| ┌────┴────┐ ┌────┴────┐ | ||
| VM A (迁移前) VNI10001 └─────────┘ | VNI10001 | VM A (迁移后) |
| └─────────┘ |
VXLAN 如何支持迁移: VM A 在 Leaf1 下的 VNI 10001 迁移到 Leaf3 后: Leaf3 学习到 VM A 的 MAC/IP EVPN 更新路由:VM A 的 VTEP = Leaf3 其他 VTEP 自动更新转发表 整个过程对 VM A 透明
对比传统 VLAN: VLAN 需要跨 Leaf 配置同一 VLAN VLAN 4094 限制 MAC 表在所有 Leaf 上膨胀
2.2 多租户隔离
场景:公有云/私有云多租户
VXLAN 多租户方案:
┌─────────────────────────┐
│ Spine Fabric │
└────┬────┬────┬────┬────┘
│ │ │ │
| Leaf1 | L2 | L3 | L4 | Leaf5 | ||||
|---|---|---|---|---|---|---|---|---|
| VM A1 VNI 10001 | VM B1 VNI 20001 | VM A2 VNI 10001 | VM B2 VNI 20001 | |||||
| --- | --- | --- | --- | --- | --- | --- | ||
| 租户A 租户B 租户A 租户B |
隔离方式: 租户 A 的所有 VM 在 VNI 10001 租户 B 的所有 VM 在 VNI 20001 VNI 之间完全二层隔离 VNI 之间的通信通过三层路由(分布式网关)
优势: 每个租户可以独立规划 IP 地址 租户 A 的 192.168.1.0/24 和租户 B 的 192.168.1.0/24 不冲突 Underlay 对租户完全透明
2.3 数据中心互联(DCI)
场景:跨数据中心二层互通
DC1(北京) DC2(上海) | Spine-Leaf Leaf VXLAN GW VNI 10001 VM A(192.168.1.10) | ◄────────► VXLAN over WAN | Spine-Leaf Leaf VXLAN GW VNI 10001 VM B(192.168.1.20) | | --- | --- | --- |
VXLAN 作为 DCI 的优势: 1. 基于 IP 转发,不依赖二层专线 2. 支持 WAN 链路(MPLS / Internet / SD-WAN) 3. 天然多租户隔离 4. 两端独立规划不影响
VXLAN DCI 注意事项: MTU 调整:VXLAN 加 50 字节,需调大 MTU(1600+) 安全:建议 IPSec 加密隧道 ARP 抑制:跨 DC 的 ARP 广播需优化
2.4 混合云/多云连接
场景:企业私有云 + 公有云连接
┌────────────────┐
│ 公有云(AWS) │
│ VXLAN GW │
└───────┬────────┘
│ VXLAN over IPSec
┌───────┴────────┐
│ 企业数据中心 │
│ VXLAN GW │
└───────┬────────┘
│
┌───────┴────────┐
│ VNI 10001 │
│ VNI 20001 │
│ VNI 30001 │
└────────────────┘
混合云 VXLAN 方案:
1. 企业 DC 的 VXLAN 扩展到公有云
2. 虚机可在本地和云之间迁移
3. 统一 IP 地址规划
4. 安全策略统一管控
挑战:公有云对 VXLAN 的支持有限
通常使用公有云自身的 VPC 方案
VXLAN 到 VPC 的映射需要网关转换
三、VXLAN 部署模式
3.1 模式 1:网络 VTEP(交换机作为 VTEP)
最常见模式——Leaf 交换机同时是 VTEP:
┌──────────────────────────────────────────┐ │ Spine(纯 IP 转发) │ └────┬────┬────┬────┬────┬────┬────┬────┬─┘ │ │ │ │ │ │ │ │ | Leaf1 VTEP | | | | | | | | | | | | | | | | Leaf N VTEP | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | │ │ | VM | | VM | | --- | --- | --- |
优点: VTEP 用硬件实现,性能高 不占用服务器资源 支持线速转发
缺点: 依赖交换机硬件能力 需要交换机支持 VXLAN 卸载
3.2 模式 2:服务器 VTEP(vSwitch 作为 VTEP)
服务器内部 vSwitch 作为 VTEP:
┌──────────────────────────────────────┐ │ Spine(纯 IP 转发) │ └────┬────┬────┬────┬────┬────┬────┬───┘ │ │ │ │ │ │ │ | Leaf1 | | L | | L | | L | | L | | L | | L | | Leaf N | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | │ │ | Server A ┌─────────────────────────┐ | vSwitch (OVS/OVN) VTEP VM1 ── VNI 10001 VM2 ── VNI 20001 | Server B ┌──────────┐ | | | VTEP VM3 VNI10001 | | | --- | --- | --- | --- | --- | --- | --- |
优点: 灵活,纯软件方案 不依赖交换机 VXLAN 能力
缺点: CPU 开销大(封装/解封装) 性能不如硬件 VTEP 通常需要 SmartNic 卸载
3.3 模式 3:混合 VTEP(推荐)
网络 VTEP + 服务器 VTEP 协同:
┌─────────────┐
│ Spine │
└──────┬──────┘
│
┌─────────┴─────────┐
│ Leaf(网络VTEP) │
└─────────┬─────────┘
│
| Server ┌──────────────────────┐ | vSwitch(服务器VTEP) 容器/VM Pod | |
|---|---|---|
适用场景: K8s 容器网络(Calico/Cilium) OpenStack 虚拟化 服务器 SmartNic offload
四、VXLAN 性能优化
4.1 MTU 调整
VXLAN 的 MTU 问题:
标准 MTU = 1500 字节
VXLAN 封装增加 50 字节(Outer MAC 14 + IP 20 + UDP 8 + VXLAN 8)
如果物理 MTU 为 1500:
原始最大帧 = 1500 - 50 = 1450 ← 吞吐量下降
解决方案:物理端口 MTU 设为 1600(或更大)
配置:
# 物理接口
interface 100GE1/0/1
mtu 1600
# Leaf 上开启 VXLAN 的 jumbo frame
vxlan enable
vxlan mtu 1550 # VXLAN 内部 MTU
4.2 ARP 抑制
VXLAN 的 ARP 广播问题:
场景:VNI 10001 中有 1000 台 VM
每台 VM 发送 ARP 请求:
封装为 VXLAN 组播 → 发送给所有 VTEP
每台 VTEP 解封装 → 泛洪到所有 VM
→ 1000 次 ARP = 1000 次组播泛洪
解决方案:
1. ARP 代理(ARP Proxy)
Leaf 直接代答已知的 ARP
减少跨 VTEP 的组播泛洪
2. 动静 MAC 表(EVPN 控制面)
EVPN 通过 Type 2 路由发布 MAC/IP
VTEP 有完整的远端 MAC 表
无需泛洪即可转发
# 华为 VXLAN ARP 抑制
bridge-domain 10001
arp-proxy inner-ip enable # 开启 ARP 代理
arp-proxy inner-ip route advertise # 发布 ARP 信息到 EVPN
4.3 ECMP 增强
VXLAN 流量的 ECMP 挑战:
如果只对外层 UDP 端口哈希:
所有 VXLAN 流量的外层 UDP 端口 = 4789
→ 哈希结果相同 → 所有流量走同一路径
解决方案:VXLAN 增强哈希
# 华为 VXLAN 增强哈希
load-baline profile vxlan_enhanced
hash-field inner-ip src-ip dst-ip src-port dst-port protocol
hash-field outer-ip src-ip dst-ip
原理:
用内层五元组做哈希
不同 VM 之间的流 → 不同内层五元组 → 不同路径
即使外层封装相同,也能均匀分布
五、VXLAN 配置示例
5.1 华为 VXLAN 基础配置
# Leaf1 VXLAN 配置
#
vxlan vni-prefix 1000 # VNI 前缀(用于自动分配)
#
bridge-domain 10001
description Tenant-A-Production
vxlan vni 10001 # VNI 映射
#
interface Vbdif10001
description Gateway-Tenant-A-VLAN10
ip binding vpn-instance Tenant-A
ip address 192.168.1.1 255.255.255.0
#
# VXLAN 隧道配置
interface Nve1
source 10.1.1.1 # 本端 VTEP IP(Loopback)
vni 10001 head-end peer-list protocol bgp # EVPN 控制面
六、总结
| 知识点 | 核心要点 |
|---|---|
| VXLAN 本质 | MAC-in-UDP 封装,在三层网络传输二层帧 |
| 封装开销 | 50 字节(Outer MAC + IP + UDP + VXLAN Header) |
| VNI | 24-bit,1600 万隔离网络 |
| VTEP | 隧道端点,封装/解封装 |
| 应用场景 | 大二层迁移、多租户隔离、DCI、混合云 |
| 部署模式 | 网络 VTEP(推荐)、服务器 VTEP、混合 |
| MTU 要求 | 物理端口 MTU ≥ 1600 |
| ARP 抑制 | EVPN 控制面消除泛洪 |
| ECMP 增强 | 需内层五元组哈希 |
七、思考
- VXLAN 封装格式中,50 字节的开销分别由哪些字段构成?
- VTEP 收到一个来自 VM 的以太网帧时,如何确定应该封装哪个 VNI 并发送到哪个远端 VTEP?
- VXLAN 如何解决传统 VLAN 的 4094 限制?VNI 的 1600 万隔离空间在实际部署中如何规划?
- 网络 VTEP 和服务器 VTEP 各有什么优劣?什么场景下应优先选择网络 VTEP?
- VXLAN 部署中 MTU 和 ARP 广播是两大关键问题——请分别说明它们的解决方案。
下篇预告:第256篇《DC EVPN 实现 VXLAN 控制面》——EVPN 作为 VXLAN 的控制面,如何替代传统泛洪学习模式,实现自动化 VTEP 发现和 MAC/IP 路由分发。