Skip to the content.

GENEVE 隧道实验

架构图

┌─────────────────────────────────────────────────────────────────┐
│                         物理主机                                 │
│  ┌─────────────────────────┐      ┌─────────────────────────┐   │
│  │      host1 (NS)         │      │      host2 (NS)         │   │
│  │  ┌─────────────────┐    │      │    ┌─────────────────┐  │   │
│  │  │   geneve0       │    │      │    │   geneve0       │  │   │
│  │  │   10.0.0.1/24   │◄───┼──────┼───►│   10.0.0.2/24   │  │   │
│  │  │   VNI=100       │    │      │    │   VNI=100       │  │   │
│  │  └────────┬────────┘    │      │    └────────┬────────┘  │   │
│  │           │             │      │             │           │   │
│  │  ┌────────▼────────┐    │      │    ┌────────▼────────┐  │   │
│  │  │   veth0         │    │      │    │   veth1         │  │   │
│  │  │ 192.168.100.1/24│◄───┼──────┼───►│ 192.168.100.2/24│  │   │
│  │  └─────────────────┘    │      │    └─────────────────┘  │   │
│  └─────────────────────────┘      └─────────────────────────┘   │
│                                                                 │
│  数据流向:                                                       │
│  10.0.0.1 ──► geneve0 ──► UDP/6081 ──► veth0 ──► veth1 ──► geneve0 ──► 10.0.0.2
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

使用方法

# 一键搭建环境并测试
make setup

# 查看网络状态
make status

# 测试连通性
make test

# 抓包查看 GENEVE 封装
make capture

# 清理环境
make clean

GENEVE 协议说明

GENEVE (Generic Network Virtualization Encapsulation) 是一种灵活的网络虚拟化封装协议,特点:

常用命令

# 查看 GENEVE 接口详细信息
sudo ip -d link show geneve0

# 进入命名空间执行命令
sudo ip netns exec host1 ip addr
sudo ip netns exec host1 ping 10.0.0.2

# 手动抓包分析
sudo ip netns exec host1 tcpdump -i veth0 -nn -X udp port 6081

vxlan 和 geneve 非常类似

相似之处

 特性       VXLAN              GENEVE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 封装方式   UDP + 固定头       UDP + 可扩展头
 网络标识   24-bit VNI         24-bit VNI
 默认端口   4789               6081
 应用场景   数据中心 Overlay   数据中心 Overlay

关键区别:可扩展性

这是两者设计的核心差异:

VXLAN 头 (固定 8 字节):
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|R|R|R|I|R|R|R|            Reserved                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                VNI (24-bit)           |    Reserved           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

GENEVE 头 (最小 8 字节,可扩展):
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Ver|Opt Len|O|C|    Reserved     |          Protocol Type      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                VNI (24-bit)           |    Reserved           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              Variable Length Options (0-252 bytes)            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

为什么需要 GENEVE?

VXLAN 的问题:头部固定,无法携带额外元数据。例如:

• 无法传递源容器的安全组信息
• 无法标记流量优先级
• 无法传递 Trace/Telemetry 数据

GENEVE 的解决方案:TLV (Type-Length-Value) 选项

# 实际例子:OpenStack 可能需要传递这样的元数据
- 源 VM 的 tenant ID
- 安全组规则标记
- 负载均衡的原始目的 IP

一句话总结

▌ VXLAN = 够用但僵化,GENEVE = 灵活但复杂

如果你的场景只需要基本的网络隔离,两者没区别。但如果需要传递额外的网络策略元数据(如 Kubernetes 网络策略、云厂商的 VPC 功能),GENEVE 的扩展
能力就体现出来了。

很多云厂商(AWS、Azure)内部其实用的是类似 GENEVE 的方案,只是对外的标准接口兼容 VXLAN。

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。