通用网络虚拟化封装 (GENEVE) 是一种网络封装协议,可使用额外的元数据封装原始数据包。借助此类额外的元数据,可以实现灵活且可扩展的网络虚拟化。
下图显示了 GENEVE 数据包的标头格式。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Ver| Opt len |O|C| Rsvd. | Protocol type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Virtual network identifier (VNI) | Rsvd. |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
下表介绍了上图中显示的 GENEVE 标头字段:
| 字段 | 说明 | 字段长度 |
|---|---|---|
| Ver | GENEVE 协议的版本。唯一支持的版本是零 (0)。 如需了解详情,请参阅隧道标头字段。 | 2 位 |
| Opt len | 选项字段的长度,以 4 字节为单位表示,不包括 8 字节的固定隧道标头。 如需了解详情,请参阅隧道标头字段。 | 6 位 |
| O | 控制数据包位。如需了解详情,请参阅隧道标头字段。 | 1 位 |
| C | 关键选项位。如需了解详情,请参阅隧道标头字段。 | 1 位 |
| Rsvd | 预留字段,传输时必须为零 (0),接收时必须忽略。如需了解详情,请参阅隧道标头字段。 | 6 位 |
| 协议类型 | 协议类型允许使用任何以太类型,但 Network Security Integration 仅允许使用 IPv4 (0x0800) 或 IPv6 (0x86DD)。 |
16 位 |
| 虚拟网络标识符 (VNI) | 虚拟网络元素的唯一标识符。 网络安全集成不会填充此字段,这意味着 VNI 设置为零 (0)。如需了解详情,请参阅带外集成 GENEVE。 | 24 位 |
| Rsvd | 预留字段,传输时必须为零 (0),接收时必须忽略。如需了解详情,请参阅隧道标头字段。 | 8 位 |
特定于Google Cloud的 GENEVE 选项
GENEVE 标头使用类型-长度-值 (TLV) 格式来表示其选项。这意味着,每个选项都采用以下方式进行编码:类型标识符、指示值大小的长度字段以及值本身。此格式具有灵活性和可扩展性,因为可以添加新选项,而不会影响现有实现。 以下部分介绍了选项的顺序和数量。请注意,随着产品不断发展,选项的数量和顺序会有所变化。因此,为确保设备实现向前兼容,请基于 TLV 字段解析 GENEVE 标头。
特定于 Google Cloud 的 GENEVE 选项如下所示:
广告网络 ID
网络 ID 选项(也称为“网络 Cookie”)用于标识与 Google Cloud中采用 GENEVE 封装的流量相关联的虚拟网络。此选项由选项类 0x0132 (Google) 和类型 0x01(网络 ID)标识。选项数据包含 32 位,其中前 28 位表示不透明的网络 ID。其余 4 位的用途如下面的图表和表格所示。
下图显示了 GENEVE 数据包中的选项格式。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option class=0x0132 (Google) | Type=0x01 R|R|R| Len=1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Network cookie |R|R|T|D|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
下表介绍了上图中显示的选项字段:
| 字段 | 说明 | 字段长度 |
|---|---|---|
| 期权类别 | 标识定义了相应选项的组织或实体。
值 0x0132 表示 Google 是定义实体。 |
16 位 |
| 类型 | 用于标识类中的选项类型。值 0x01 表示“网络 ID”选项。
如需了解详情,请参阅隧道选项。 |
8 位 |
| R | 为将来使用而预留的选项控制标志。这些位在传输时必须为零 (0),在接收时必须忽略。 | 3 位 |
| Len | 选项载荷的长度,以 4 字节为增量。网络 ID 载荷为 32 位(4 字节),因此此选项的长度设置为 1。 | 5 位 |
| 广告网络 Cookie | 用于标识虚拟网络的不透明网络 Cookie。 | 28 位 |
| R | 预留以供日后实现。在传输时必须设置为零 (0),在接收时必须忽略。 | 2 位 |
| T | 指示封装数据包的 TLS 分流。未使用。 | 1 位 |
| D | 表示数据包的方向。值为零 (0) 表示入站数据包,值为一 (1) 表示镜像虚拟机 (VM) 上的出站数据包。对于直接互联网出站流量响应,网络设备会将此位从 1 翻转为 0。 |
1 位 |
端点 ID
端点 ID 选项(也称为“端点 Cookie”)可唯一标识捕获点,即 Google Cloud虚拟机上的网络接口控制器。此选项由选项类 0x0132 (Google) 和类型 0x02(端点 ID)标识。选项数据是一个 128 位的不透明值。
下图显示了 GENEVE 数据包中的选项格式。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option class=0x0132 (Google) | Type=0x02 |R|R|R| Len=4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Endpoint cookie +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
下表介绍了上图中显示的选项字段:
| 字段 | 说明 | 字段长度 |
|---|---|---|
| 期权类别 | 标识定义了相应选项的组织或实体。
值 0x0132 表示 Google 是定义实体。 |
16 位 |
| 类型 | 用于标识类中的选项类型。值 0x02 表示“端点 ID”选项。
如需了解详情,请参阅隧道选项。 |
8 位 |
| R | 为将来使用而预留的选项控制标志。这些位在传输时必须为零 (0),在接收时必须忽略。 | 3 位 |
| Len | 以 4 字节为增量的载荷长度。端点 ID 载荷为 128 位(16 字节),因此此选项的长度设置为 4。 | 5 位 |
| 端点 Cookie | 捕获点(虚拟机网卡)的不透明标识符。 | 128 位 |
个人资料 ID
配置文件 ID 选项用于标识应用于流量的镜像安全配置文件组。此选项由选项类 0x0132 (Google) 和类型 0x03(个人资料 ID)标识。选项数据是与安全配置文件组中的 data_path_id 字段对应的 64 位标识符。目标设备可能会根据配置文件组标识符强制执行安全政策。
下图显示了 GENEVE 数据包中的选项格式。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option class=0x0132 (Google) | Type=0x03 |R|R|R| Len=2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Profile ID +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
下表介绍了上图中显示的选项字段:
| 字段 | 说明 | 字段长度 |
|---|---|---|
| 期权类别 | 标识定义了相应选项的组织或实体。
值 0x0132 表示 Google 是定义实体。 |
16 位 |
| 类型 | 用于标识类中的选项类型。值 0x03 表示“配置文件 ID”选项。
如需了解详情,请参阅隧道选项。 |
8 位 |
| R | 为将来使用而预留的选项控制标志。这些位在传输时必须为零 (0),在接收时必须忽略。 | 3 位 |
| Len | 选项载荷的长度,以 4 字节为增量。个人资料 ID 载荷为 64 位(8 字节),因此此选项的长度设置为 2。 | 5 位 |
| 个人资料 ID | 镜像安全配置文件组的标识符。 | 64 位 |