2. VXLAN 协议原理与多租户网络基础

VXLAN(Virtual eXtensible LAN)解决的核心问题,是在一张共享的三层 IP 网络之上,构造出大量彼此隔离的二层广播域。传统 VLAN 只有 12 位 VLAN ID,最多 4094 个可用标识,且要求同一 VLAN 的二层域在物理上连续;而多租户数据中心里,租户数量可能上千,每个租户还希望拥有多个网段,并且虚拟机可以在任意机架上迁移。VXLAN 用 24 位 VNI 把隔离标识扩展到约 1600 万个,同时把二层帧封装进 UDP 报文,让二层域可以跨越任意可达的三层路径。

封装格式:从原始以太帧到 UDP 载荷

VXLAN 的封装思路是“把整个原始二层帧当作数据”。当一台主机发出以太帧后,接入侧 VTEP 在其前面依次压入 VXLAN 头、UDP 头、外层 IP 头和外层以太头,形成一条完整的隧道报文。各字段的作用如下:

  • 外层以太头:承载隧道报文的下一跳 MAC,属于底层物理/承载网络,与租户无关。
  • 外层 IP 头:源地址是本端 VTEP 的 IP,目的地址是对端 VTEP 的 IP,协议号为 17(UDP)。
  • UDP 头:目的端口固定为 4789(IANA 分配),源端口由内层帧的哈希计算得出,用于承载网络做等价多路径(ECMP)负载分担。
  • VXLAN 头:8 字节,其中 VNI 占 24 位,是租户/网段的隔离标识;I 标志位表示 VNI 有效。
  • 内层原始帧:租户真正收发的以太帧,包含内层目的 MAC、源 MAC、可选 VLAN Tag 和上层数据。

需要特别注意的是,VXLAN 头中的 VNI 是“租户网络身份”,而外层 IP 是“承载网络位置”。二者解耦,正是 VXLAN 支持大二层和主机迁移的根本原因。

VXLAN 封装格式与字段职责 外层以太头 目的/源 MAC 外层 IP 头 VTEP 源/目的 IP UDP 头 目的端口 4789 VXLAN 头 VNI(24 位) 内层原始以太帧 内层 MAC + 可选 VLAN + 数据 封装方向: 原始帧 → 加 VXLAN 头 → 加 UDP 头 → 加外层 IP 头 → 加外层以太头 → 发出 解封装方向: 收到隧道报文 → 剥外层以太/IP/UDP/VXLAN 头 → 按 VNI 查表 → 转发原始帧 关键点:VNI 决定租户归属,外层 IP 决定承载路径,两者解耦使二层域可跨三层网络延伸。 VNI 与租户映射示例 租户 A VNI 10010 / 10011 租户 B VNI 20010 / 20011 租户 C VNI 30010

VNI 与租户映射:隔离标识如何落地

VNI 是 VXLAN 网络标识符,取值 1~16777215。工程上通常按“租户 + 网段”两个维度规划:例如租户 A 的 Web 网段用 VNI 10010,数据库网段用 VNI 10011;租户 B 对应 20010、20011。这样同一租户的不同网段天然隔离,不同租户之间即使 IP 地址重叠也不会互相干扰。

映射关系需要落到 VTEP 的转发表中。以 SONiC 为例,VNI 与 VLAN 的映射通过 vxlan_map 表配置,VLAN 再绑定到物理端口或 Vlan 接口。当内层帧从某个 VLAN 进入时,VTEP 查表得到对应 VNI,封装时写入 VXLAN 头;解封装时则用 VNI 反查 VLAN,再转发到对应二层域。这个“VLAN ↔ VNI”双向映射是租户隔离在数据面的关键锚点。

VTEP 角色:隧道两端的执行者

VTEP(VXLAN Tunnel Endpoint)是执行封装与解封装的实体,通常由 Leaf 交换机或服务器上的 vTEP 承担。按位置可分为两类:

  • 硬件 VTEP:运行在交换机上,负责物理服务器、裸金属或下挂传统设备的接入,性能高、端口密度大。
  • 软件 VTEP:运行在虚拟化主机(如 OVS、Linux VXLAN 模块)上,直接为虚拟机提供 VXLAN 接入,灵活但受主机 CPU 影响。

VTEP 之间通过三层 IP 网络建立隧道。每个 VTEP 需要知道:本端 VNI 下有哪些远端 VTEP、每个远端 VTEP 的 IP 地址、以及远端 VTEP 后面挂着哪些 MAC 地址。这些信息构成 VXLAN 转发表(VTEP 表 / MAC-VTEP 映射表)。学习方式有两种:一是数据面泛洪学习,二是控制面通过 EVPN 等协议分发。SONiC 中常用 EVPN 作为控制面,避免泛洪带来的规模问题。

BUM 流量处理:广播、未知单播与组播

BUM 指广播(Broadcast)、未知单播(Unknown Unicast)和组播(Multicast)。在 VXLAN 中,BUM 流量不能像传统二层那样直接泛洪到所有端口,因为隧道是点对点的。处理方式主要有两种:

  1. 组播模式:为每个 VNI 分配一个组播组地址,VTEP 加入该组,BUM 帧封装后发往组播组,由承载网络复制到所有成员 VTEP。配置简单,但要求底层网络支持组播,且组播组与 VNI 的映射需要统一规划。
  2. 头端复制(Ingress Replication):入口 VTEP 根据控制面学习到的远端 VTEP 列表,为每个远端 VTEP 复制一份单播隧道报文。不依赖组播,适合大规模和云环境,但入口 VTEP 需要维护完整的远端列表,复制开销随成员数增长。

无论哪种方式,BUM 流量的范围都被限制在同一个 VNI 内,不会跨租户泄漏。这是多租户隔离在控制面之外的第二道保障。

多租户隔离的基本需求与挑战

多租户网络要同时满足三点:地址空间独立(不同租户可复用相同 IP 网段)、二层广播域隔离(一个租户的广播不会到达另一个租户)、策略可控(租户之间可按需互通或完全禁止)。VXLAN 通过 VNI 天然满足前两点,第三点则需要配合 ACL、VRF 或 EVPN 路由策略实现。

实际工程中的挑战主要集中在:VNI 规划与容量管理、VTEP 表规模随租户和 MAC 数量增长、BUM 复制带来的带宽放大、以及跨租户路由时的 VRF 隔离。以一台 Leaf 接入 200 个租户、每租户 50 个 MAC 为例,单 Leaf 的 MAC-VTEP 表项可能达到万级,必须依赖 EVPN 控制面收敛而非泛洪学习。规划阶段应把 VNI 段、VTEP 地址段、租户 VLAN 段一并纳入 IPAM 管理,避免后期冲突。

实践建议:先在实验环境用两台 SONiC 交换机建立 VXLAN 隧道,配置同一 VNI 下的两个 VLAN 接口,验证同租户二层互通;再配置不同 VNI,验证跨租户隔离。观察 show vxlan tunnel 和 show mac 的输出,确认 VTEP 表项和 MAC 学习是否符合预期。