第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)

  1. VM A 发送以太网帧(dst MAC = VM B)
  2. Leaf1(VTEP1)收到帧
  3. VTEP1 查表:VM B 在 VTEP2 下(VNI 10001)
  4. VTEP1 封装:Outer IP 10.1.1.2, Outer UDP 4789, VNI 10001
  5. Underlay 网络通过 IP 路由转发到 VTEP2
  6. VTEP2 解封装,恢复原始以太网帧
  7. 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 增强 需内层五元组哈希

七、思考

  1. VXLAN 封装格式中,50 字节的开销分别由哪些字段构成?
  2. VTEP 收到一个来自 VM 的以太网帧时,如何确定应该封装哪个 VNI 并发送到哪个远端 VTEP?
  3. VXLAN 如何解决传统 VLAN 的 4094 限制?VNI 的 1600 万隔离空间在实际部署中如何规划?
  4. 网络 VTEP 和服务器 VTEP 各有什么优劣?什么场景下应优先选择网络 VTEP?
  5. VXLAN 部署中 MTU 和 ARP 广播是两大关键问题——请分别说明它们的解决方案。

下篇预告:第256篇《DC EVPN 实现 VXLAN 控制面》——EVPN 作为 VXLAN 的控制面,如何替代传统泛洪学习模式,实现自动化 VTEP 发现和 MAC/IP 路由分发。