4. Geneve 技术详解:封装格式、可变选项与适用场景

Geneve(Generic Network Virtualization Encapsulation)是当前网络虚拟化领域最灵活的隧道封装协议之一。它由 IETF NVO3 工作组设计,旨在统一 VXLAN、NVGRE、STT 等早期协议的优点,同时解决它们在选项扩展、协议标识和硬件卸载方面的不足。Geneve 的核心设计理念是“最小固定头 + 可变选项”,使其能够适应多租户网络、容器网络、服务网格等复杂场景。

4.1 Geneve 封装格式

Geneve 封装在 UDP 之上,默认端口为 6081。其固定头部仅 8 字节,之后跟随可变长度的选项(TLV)。完整的封装层次为:原始以太帧 → Geneve 头 + 选项 → UDP 头 → 外层 IP 头 → 外层 MAC 头。

关键设计点:Geneve 使用 UDP 作为传输层,天然支持 ECMP 负载均衡;固定头部极小,选项按需添加,避免带宽浪费。
Geneve 封装格式结构 外层 MAC 头(14 字节) 外层 IP 头(20 字节) UDP 头(8 字节,目标端口 6081) Geneve 固定头(8 字节) Geneve 选项(可变长度,TLV 格式) 内部以太帧(原始租户流量) 封装方向

4.2 Geneve 固定头部字段详解

Geneve 固定头部共 8 字节(64 位),各字段定义如下:

字段 位宽 说明
Ver 2 bit 版本号,当前固定为 0
Opt Len 6 bit 选项总长度,以 4 字节为单位,最大 252 字节
O 1 bit 控制报文标识(OAM 帧)
C 1 bit 关键选项存在位(Critical Option)
Rsvd 6 bit 保留位,必须为 0
Protocol Type 16 bit 内部载荷的以太类型(如 0x0800 为 IPv4)
VNI 24 bit 虚拟网络标识符,支持 1600 万+ 租户
Reserved 8 bit 保留位,必须为 0
VNI 空间优势:Geneve 的 VNI 为 24 位,与 VXLAN 相同,支持约 1677 万个独立网络。但 Geneve 通过选项字段可以携带额外的租户上下文,实际隔离能力远超 VNI 本身。

4.3 可变选项(TLV)机制

Geneve 最强大的特性是其可变选项机制。每个选项采用标准的 Type-Length-Value(TLV) 格式,允许在封装中携带任意元数据。选项紧跟在固定头之后,总长度由 Opt Len 字段指示。

Geneve 选项 TLV 格式(每个选项 4 字节对齐):
+-----------------+----------------+------------------+
|   Option Type   |  Option Length |   Option Data    |
|    (16 bit)     |    (8 bit)     |   (可变长度)     |
+-----------------+----------------+------------------+
- Option Type:标识选项类别,高 1 位为 Critical 标志
- Option Length:数据部分长度,以 1 字节为单位
- Option Data:实际元数据,填充至 4 字节对齐

常见的选项类型包括:

  • 隧道上下文(Tunnel Context):携带源端口、租户安全组、QoS 标记等。
  • 服务链元数据(Service Chaining):指示报文需要经过哪些服务函数(如防火墙、负载均衡器)。
  • 时间戳(Timestamp):用于测量隧道延迟和抖动。
  • OAM 控制信息:用于连通性检测、路径追踪等运维功能。
Critical 选项处理:如果 C 位为 1,表示该选项为关键选项。接收端若无法识别该类型,必须丢弃报文并记录错误。非关键选项(C=0)可被忽略,保证向后兼容。

4.4 Geneve 与 VXLAN、GRE 的对比

下表从多个维度对比三种主流隧道封装协议:

对比维度 Geneve VXLAN GRE
传输层 UDP(端口 6081) UDP(端口 4789) IP 协议 47(无端口)
固定头大小 8 字节 8 字节 4 字节(最小)
VNI 位数 24 bit 24 bit 无原生 VNI(需扩展)
可变选项 支持(TLV,最大 252 字节) 不支持 支持(但格式不统一)
协议标识 16 bit 以太类型 固定为 0x0800(IPv4) 16 bit 以太类型
ECMP 兼容性 优秀(UDP 源端口哈希) 优秀(UDP 源端口哈希) 较差(无端口,需额外配置)
硬件卸载 逐步支持(智能网卡) 广泛支持(成熟) 部分支持
扩展性 极高(选项机制) 低(固定头) 中等(扩展头不统一)
Geneve vs VXLAN vs GRE 协议栈对比 Geneve UDP 头(6081) 固定头(8B) 可变选项(TLV) 内部载荷 VXLAN UDP 头(4789) VXLAN 头(8B) 无选项空间 内部载荷 GRE IP 协议 47 GRE 头(4B+) 可选扩展头 内部载荷 ✅ 选项灵活 ✅ 协议标识 ✅ ECMP 友好 ❌ 无选项 ✅ ECMP 友好 ✅ 硬件成熟 ⚠️ 选项不统一 ❌ ECMP 差 ⚠️ 无原生 VNI

4.5 适用场景分析

Geneve 的设计使其在以下场景中具有显著优势:

  1. 多租户云网络(IaaS):利用 24 位 VNI 和选项字段携带租户安全策略、QoS 等级,实现精细化的租户隔离。
  2. 容器网络(Kubernetes CNI):Geneve 可携带 Pod 标签、命名空间信息,配合 Cilium、Calico 等方案实现基于身份的微隔离。
  3. 服务功能链(SFC):通过选项携带服务路径标识,引导流量依次经过防火墙、DPI、负载均衡器等服务节点。
  4. 混合云互联:在公有云和私有云之间建立 Geneve 隧道,利用选项携带路由策略和计量信息。
  5. 网络遥测与 OAM:携带时间戳、序列号、路径信息,实现端到端延迟测量和故障定位。
选型建议:如果网络环境需要承载丰富的元数据(如服务链、租户上下文),且硬件支持 Geneve 卸载,优先选择 Geneve。若仅需基本的二层扩展且硬件兼容性要求高,VXLAN 仍是稳妥选择。GRE 适合对 UDP 封装有顾虑的传统网络环境。

4.6 性能与卸载考量

Geneve 的可变选项虽然灵活,但也带来额外的处理开销。在实际部署中需关注以下性能因素:

  • CPU 开销:选项解析需要额外的 CPU 周期,建议使用支持 Geneve 卸载的智能网卡(如 Mellanox ConnectX-5 及以上)。
  • MTU 规划:Geneve 封装会增加 50~70 字节(含选项),物理网络 MTU 需设置为 1600 或更大,避免分片。
  • 选项长度限制:最大选项长度为 252 字节,设计选项时应避免携带过多冗余数据。
  • 硬件兼容性:部分老旧网卡不支持 Geneve 卸载,此时可回退到 VXLAN 或使用软件封装。
最佳实践:在部署 Geneve 前,先通过 ethtool -k eth0 | grep geneve 确认网卡是否支持 Geneve 卸载。若不支持,考虑使用 DPDK 或 eBPF 加速软件封装性能。