了解 GENEVE 格式

通用网络虚拟化封装 (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(广告联盟 Cookie)
  • 端点 ID(端点 Cookie)
  • 个人资料 ID
  • 时间戳(预览版
  • 网络稳定 ID(预览版

广告网络 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 位

时间戳