从 VLAN 到 VXLAN:用一个 Leaf-Spine 示例理解 EVPN 报文转发

本文是我的 AIDC 网络学习记录,重点解释同一业务网段内的 VXLAN 二层转发。文中的华为 VRP 命令为学习示例,具体语法需要根据 CloudEngine 型号和 VRP 版本确认。

一、为什么需要 VXLAN EVPN

传统 VLAN 主要解决本地二层网络隔离问题,但在数据中心中,服务器可能分布在不同 Leaf,虚拟机也可能在不同设备之间迁移。仅依赖本地 VLAN,二层业务的扩展范围和管理复杂度都会受到限制。

VXLAN 的做法是把原始二层以太网帧封装到 UDP 报文中,再通过底层三层 IP 网络传输。EVPN 则通过 BGP 控制平面发布 MAC、IP 和主机位置,让 Leaf 能够更准确地找到远端主机。

可以先记住三者的分工:

EVPN:告诉 Leaf 目的主机在哪里
VXLAN:把业务帧封装进隧道
Underlay:把封装报文送到远端 VTEP

二、实验模型

服务器 A                         服务器 B
192.168.10.10                    192.168.10.20
MAC-A                            MAC-B
VLAN 10                          VLAN 10
   |                                  |
 Leaf1                              Leaf2
 VTEP 3.3.3.3                      VTEP 4.4.4.4
   |                                  |
   +---------- Spine Underlay --------+

业务映射规划为:

VLAN 10 → Bridge-Domain 10 → VNI 10010

Leaf1 和 Leaf2 的 VTEP 地址分别使用 Loopback:

Leaf1:3.3.3.3/32
Leaf2:4.4.4.4/32

因此,Underlay 必须先能让 3.3.3.3/324.4.4.4/32 互相可达。

三、VLAN、Bridge-Domain、VNI 和 VTEP

VLAN

VLAN 是服务器接入侧的本地二层网络标识,本例中服务器接入 VLAN 10。

Bridge-Domain

Bridge-Domain 是 Leaf 内部的二层转发域:

VLAN 10 → BD 10

VNI

VNI 是 VXLAN Network Identifier,用来标识 Overlay 中的虚拟业务网络:

BD 10 → VNI 10010

两台 Leaf 如果要扩展同一个二层业务,通常需要使用相同的 VNI。VNI 不一定要和 VLAN 使用相同数字。

NVE 和 VTEP

NVE 是承载 VXLAN 的逻辑接口,VTEP 是负责 VXLAN 封装和解封装的隧道端点。

Loopback:提供稳定 IP
NVE:承载 VXLAN 的逻辑接口
VTEP:使用该 IP 执行封装和解封装

单独配置 Loopback 不会自动启用 VTEP 功能,还需要在 NVE/VXLAN 配置中指定源地址和 VNI。

四、EVPN 控制平面

假设服务器 B 接入 Leaf2,Leaf2 学到:

MAC:MAC-B
IP:192.168.10.20
VTEP:4.4.4.4
VNI:10010

Leaf2 通过 BGP EVPN 发布主机位置。

Type 2

Type 2 主要传播:

MAC/IP → 远端 VTEP

Leaf1 学到后,可以建立:

MAC-B → 4.4.4.4 → VNI 10010

Type 3

Type 3 主要传播某个 VNI 的远端 VTEP 成员,用于:

  • 广播;
  • 未知单播;
  • 组播。

Type 3 不是一条专用物理路径,而是帮助 VTEP 确认 VNI 的泛洪成员关系。

五、同子网二层 VXLAN 报文流程

服务器 A 和服务器 B 都属于 192.168.10.0/24,因此不需要经过三层网关。

1. 服务器 A 生成原始帧

内层源 MAC:MAC-A
内层目的 MAC:MAC-B
内层源 IP:192.168.10.10
内层目的 IP:192.168.10.20

2. Leaf1 确定业务网络

Leaf1 收到 VLAN 10 的帧,根据映射确定:

VLAN 10 → BD 10 → VNI 10010

通过 EVPN Type 2,Leaf1 知道 MAC-B 位于远端 VTEP 4.4.4.4

3. Leaf1 进行 VXLAN 封装

外层 Ethernet:Leaf1 出接口 MAC → 下一跳 Spine MAC
外层 IP:3.3.3.3 → 4.4.4.4
UDP:目的端口通常为 4789
VXLAN:VNI 10010
内层 Ethernet:MAC-A → MAC-B
内层 IP:192.168.10.10 → 192.168.10.20

封装后可以表示为:

外层 Ethernet
外层 IP(Leaf1 VTEP → Leaf2 VTEP)
UDP 4789
VXLAN VNI 10010
内层 Ethernet
内层 IP
业务数据

4. Spine 转发

Spine 查询外层目的 IP 4.4.4.4,根据 Underlay 路由转发报文。

普通 Underlay Spine 不需要学习:

  • 服务器 MAC;
  • VLAN 10;
  • VNI 10010;
  • VLAN-VNI 映射。

它把 VXLAN 报文当作普通 IP/UDP 报文处理。

5. Leaf2 解封装

Leaf2 收到目标地址为 4.4.4.4、UDP 4789、VNI 10010 的报文后,删除外层 Ethernet、IP、UDP 和 VXLAN 头,恢复原始服务器帧。

6. 映射回本地 VLAN

Leaf2 根据:

VNI 10010 → BD 10 → VLAN 10

查询 MAC 表,把原始帧发送给服务器 B。

返回方向则相反:

服务器 B
→ Leaf2 封装
→ 外层 4.4.4.4 → 3.3.3.3
→ Underlay Spine
→ Leaf1 解封装
→ 服务器 A

六、跨子网时的三层转发

如果服务器 C 位于:

192.168.20.20/24
VLAN 20

服务器 A 和服务器 C 不在同一网段,必须经过网关。

VXLAN EVPN 常通过分布式 Anycast Gateway,让多台 Leaf 使用相同的网关 IP 和网关 MAC。服务器把报文交给本地 Leaf,Leaf 在租户 VRF 中完成三层路由,再通过 VXLAN 把报文送到远端 Leaf。

服务器 A
→ 本地 Leaf Anycast Gateway
→ 租户 VRF 路由查询
→ Leaf1 完成三层路由
→ VXLAN 封装
→ Underlay 转发
→ Leaf2 解封装
→ 服务器 C

区别可以概括为:

同子网:主要是二层桥接
跨子网:本地 Leaf 先三层路由,再进行 VXLAN 传输

七、L2 VNI、L3 VNI 和 VRF

L2 VNI:扩展二层广播域
L3 VNI:标识租户三层路由空间
VRF:维护相互隔离的路由表

例如:

VLAN 10 → L2 VNI 10010
租户 A VRF → L3 VNI 50001

八、验证思路

VXLAN 配置完成后,可以按以下顺序检查:

1. 服务器接入口和 VLAN
2. Bridge-Domain
3. BD-VNI 映射
4. VTEP Loopback 可达性
5. BGP EVPN 邻居 Established
6. Type 2 主机位置
7. Type 3 VNI 成员
8. NVE 和 VNI 状态
9. MAC 表
10. 业务 Ping

如果 EVPN 邻居是 Established,但 VTEP Loopback 不可达,控制平面可能看起来正常,VXLAN 数据面仍然会失败。

九、学习总结

今天最重要的理解是:

EVPN:告诉 Leaf 目的主机在哪里
VXLAN:把业务帧装进隧道
Underlay:把外层 VTEP 报文送到远端
VTEP/NVE:负责封装和解封装
VNI:标识虚拟业务网络

后续还需要在华为设备或模拟器中验证 Bridge-Domain、VNI、NVE、EVPN 地址族和 Type 2/Type 3 的具体输出。

建议标签

VXLAN EVPN VTEP NVE VNI Spine-Leaf AIDC 数据中心网络

Logo

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

更多推荐