3. Overlay 网络架构:Underlay 与 Overlay 区别、VTEP 角色、VNI 标识符、隧道封装解封装流程

Overlay 网络是构建多租户隔离网络的核心技术。它通过在物理 Underlay 网络之上构建一层逻辑网络,使得租户流量与底层物理拓扑解耦,从而实现灵活的 IP 地址分配、广播域隔离和跨子网通信。本节将深入剖析 Overlay 与 Underlay 的区别、关键组件 VTEP、VNI 标识符以及隧道封装解封装流程。

3.1 Underlay 与 Overlay 的区别

Underlay 网络是物理基础设施,负责提供 IP 可达性和高带宽转发;Overlay 网络则是构建在 Underlay 之上的虚拟逻辑网络。两者在职责、寻址方式和故障域上存在本质区别。

对比维度 Underlay 网络 Overlay 网络
职责 提供物理连通性、路由收敛、高带宽转发 提供租户隔离、逻辑拓扑、虚拟网络功能
寻址方式 物理 IP/MAC 地址(设备接口地址) 租户 IP/MAC 地址(虚拟机/容器地址)
路由协议 OSPF、IS-IS、BGP 等传统 IGP/EGP EVPN、VXLAN 控制平面(通常基于 BGP)
故障域 物理设备故障、链路中断、光模块失效 VTEP 故障、VNI 配置错误、隧道封装异常
扩展性 受限于物理端口、布线、设备容量 逻辑上可支持 1600 万+ 个隔离网络(VNI)
多租户感知 无感知,仅转发 IP 报文 通过 VNI 标识租户,实现租户级隔离
关键理解:Underlay 是“高速公路”,Overlay 是“车道线”。高速公路(Underlay)保证车辆(数据包)能快速从 A 到 B,而车道线(Overlay)则确保不同车队(租户)互不干扰,即使它们行驶在同一条路上。

3.2 VTEP 角色与功能

VTEP(VXLAN Tunnel End Point,VXLAN 隧道端点)是 Overlay 网络的核心执行组件。它负责对租户流量进行封装和解封装,是连接物理网络与虚拟网络的桥梁。

VTEP 的核心职责:

  • 封装: 将租户的原始以太网帧(Inner MAC + Inner IP)封装到 UDP 隧道中,添加 VXLAN 头部和外部 UDP/IP 头部。
  • 解封装: 从接收到的 VXLAN 报文中剥离外部头部,还原出原始租户帧,并转发给目标租户设备。
  • VNI 映射: 维护 VNI 与租户网络的映射关系,确保流量被正确隔离和转发。
  • ARP/ND 代理: 在分布式场景下,VTEP 可以代理租户的 ARP 请求,减少广播流量。
部署形态:VTEP 可以部署在物理交换机(硬件 VTEP)、虚拟化 Hypervisor(软件 VTEP,如 Open vSwitch)、或容器网络插件(如 Calico VXLAN 模式)中。

3.3 VNI 标识符

VNI(VXLAN Network Identifier,VXLAN 网络标识符)是 Overlay 网络中用于区分不同租户网络的 24 位标识符。它类似于传统 VLAN 的 12 位 ID,但提供了更大的扩展空间。

VNI 的关键特性:

  • 隔离粒度: 每个 VNI 对应一个独立的 Layer 2 广播域,不同 VNI 之间的流量完全隔离。
  • 扩展能力: 24 位长度支持最多 16,777,216 个逻辑网络,远超 VLAN 的 4096 个。
  • 映射关系: 在 VTEP 上,VNI 与租户的 VRF(虚拟路由转发)实例或逻辑交换机绑定。
标识符 位数 最大数量 典型用途
VLAN ID 12 4096 传统二层隔离
VNI 24 16,777,216 VXLAN Overlay 多租户隔离
VRF ID 32 4,294,967,296 三层路由隔离

3.4 隧道封装与解封装流程

VXLAN 封装采用 MAC-in-UDP 技术,将原始二层帧封装在 UDP 数据包中,通过 Underlay 网络传输。以下是标准的封装与解封装流程。

3.4.1 封装流程(发送方向)

  1. 租户帧到达: 源虚拟机(VM-A)发送一个以太网帧,目标为 VM-B 的 MAC 地址。
  2. VNI 映射: VTEP-A 根据 VM-A 所属的租户网络,确定对应的 VNI(例如 VNI 100)。
  3. 外部头部构建: VTEP-A 查询目标 VTEP-B 的 IP 地址(通过 EVPN 控制平面或静态配置),构建外部头部:
    • 外部 MAC:源为 VTEP-A 的 MAC,目标为下一跳路由器或 VTEP-B 的 MAC。
    • 外部 IP:源为 VTEP-A 的 IP,目标为 VTEP-B 的 IP。
    • UDP 头部:源端口(基于内层帧哈希生成,用于负载均衡),目标端口 4789。
  4. VXLAN 头部插入: 在 UDP 头部之后插入 VXLAN 头部,包含 24 位 VNI(100)和标志位。
  5. 发送: 封装后的报文通过 Underlay 网络转发至 VTEP-B。

3.4.2 解封装流程(接收方向)

  1. 报文到达: VTEP-B 收到一个目标 UDP 端口为 4789 的报文。
  2. VNI 验证: VTEP-B 检查 VXLAN 头部中的 VNI(100),确认本地是否存在对应的租户网络。
  3. 头部剥离: 剥离外部 MAC、外部 IP、UDP 头部和 VXLAN 头部。
  4. 租户帧还原: 还原出原始的以太网帧(源 MAC: VM-A, 目标 MAC: VM-B)。
  5. 转发: VTEP-B 根据内层目标 MAC 地址,将帧转发给 VM-B。
故障排查要点: 封装/解封装失败通常表现为租户间通信中断。常见原因包括:VTEP 间 IP 不可达(Underlay 故障)、VNI 配置不一致、UDP 端口 4789 被 ACL 或防火墙阻断、MTU 不足导致分片丢失。

3.5 VXLAN 封装结构示意图

下图展示了 VXLAN 封装后的报文结构,清晰呈现了从内层租户帧到外层 Underlay 头部的层次关系。

VXLAN 封装报文结构 VXLAN 封装报文结构 外层 MAC 头部 外层 IP 头部 UDP 头部 VXLAN 头部 内层帧 关键字段说明: • 外层 MAC 头部:源 MAC = VTEP-A,目标 MAC = 下一跳路由器或 VTEP-B • 外层 IP 头部:源 IP = VTEP-A,目标 IP = VTEP-B • UDP 头部:源端口 = 基于内层帧哈希(用于 ECMP 负载均衡),目标端口 = 4789 • VXLAN 头部:包含 24 位 VNI(标识租户网络)和标志位(通常为 0x08) • 内层帧:原始租户以太网帧(包含租户 MAC、租户 IP 和 Payload) • 总封装开销:50 字节(14 外层 MAC + 20 外层 IP + 8 UDP + 8 VXLAN)

3.6 VTEP 间隧道通信流程

下图展示了两个 VTEP 之间通过 Underlay 网络建立 VXLAN 隧道,并完成租户流量封装与解封装的完整流程。

VTEP 间 VXLAN 隧道通信流程 VTEP 间 VXLAN 隧道通信流程 租户 A 域 VM-A (租户 A) VTEP-A 封装操作 1. 接收 VM-A 帧 2. 映射 VNI 100 3. 添加 VXLAN/UDP/IP 头 Underlay 物理网络 IP 网络 VXLAN 隧道 VXLAN 隧道 租户 A 域 VM-B (租户 A) VTEP-B 解封装操作 1. 接收 VXLAN 报文 2. 验证 VNI 100 3. 剥离头部还原帧

3.7 多租户隔离下的 Overlay 关键配置示例

以下是一个基于 Open vSwitch (OVS) 的 VTEP 配置示例,展示了如何为不同租户创建 VXLAN 隧道并指定 VNI。

# 创建租户 A 的 VXLAN 隧道接口 (VNI 100)
ovs-vsctl add-port br-int vxlan-tenant-a \
  -- set interface vxlan-tenant-a type=vxlan \
  options:remote_ip=192.168.10.2 \
  options:key=100 \
  options:dst_port=4789

# 创建租户 B 的 VXLAN 隧道接口 (VNI 200)
ovs-vsctl add-port br-int vxlan-tenant-b \
  -- set interface vxlan-tenant-b type=vxlan \
  options:remote_ip=192.168.10.3 \
  options:key=200 \
  options:dst_port=4789

# 查看已创建的隧道接口
ovs-vsctl show
配置要点:
  • remote_ip:对端 VTEP 的 IP 地址,必须通过 Underlay 网络可达。
  • key:VNI 标识符,不同租户使用不同的 key 值。
  • dst_port:IANA 分配的 VXLAN 标准端口 4789,确保 Underlay 网络未阻断此 UDP 端口。

3.8 常见故障场景与排查思路

故障现象 可能原因 排查命令/方法
租户间无法通信 VNI 配置不一致 检查两端 VTEP 的 key 值是否匹配
封装后报文丢失 Underlay 路由不可达 ping 对端 VTEP IP;检查路由表
UDP 端口被阻断 ACL 或防火墙过滤 4789 tcpdump -i any udp port 4789 抓包验证
MTU 导致分片 Underlay MTU 小于封装后报文 设置接口 MTU ≥ 1550;检查分片标志
ARP 解析失败 VTEP 未启用 ARP 代理或广播抑制 检查 VTEP 的 ARP 表项;查看 EVPN 控制平面
最佳实践: 在生产环境中,建议使用 EVPN 作为 VXLAN 的控制平面,实现 VTEP 自动发现、VNI 动态分发和 ARP 抑制,减少手工配置错误导致的故障。