Generic Network Virtualization Encapsulation(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 ビット |
| プロトコル タイプ | プロトコル タイプでは任意の ethertype を使用できますが、ネットワーク セキュリティ統合では IPv4(0x0800)または IPv6(0x86DD)のみが許可されます。 |
16 ビット |
| 仮想ネットワーク識別子(VNI) | 仮想ネットワーク要素の一意の識別子。ネットワーク セキュリティ統合ではこのフィールドは入力されません。つまり、VNI は 0 に設定されます。詳細については、アウトオブバンド統合 GENEVE をご覧ください。 | 24 ビット |
| Rsvd | 予約済みのフィールド。送信時は 0(ゼロ)にする必要があり、受信時は無視する必要があります。詳細については、トンネル ヘッダー フィールドをご覧ください。 | 8 ビット |
Google Cloud固有の GENEVE オプション
GENEVE ヘッダーでは、オプションに Type-Length-Value(TLV)形式を使用します。つまり、各オプションは、型識別子、値のサイズを示す長さフィールド、値自体でエンコードされます。この形式は、既存の実装を中断することなく新しいオプションを追加できるため、柔軟性と拡張性に優れています。以降のセクションでは、オプションの順序と数について説明します。オプションの数と順序は、プロダクトの進化に伴って変化します。したがって、デバイス実装の上位互換性を確保するには、TLV フィールドに基づいて GENEVE ヘッダーを解析します。
Google Cloud に固有の GENEVE オプションは次のとおりです。
- ネットワーク ID(ネットワーク Cookie)
- エンドポイント ID(エンドポイント Cookie)
- プロフィール ID
ネットワーク ID
ネットワーク ID オプション(「ネットワーク Cookie」とも呼ばれます)は、 Google Cloudの GENEVE カプセル化トラフィックに関連付けられた仮想ネットワークを識別します。このオプションは、オプション クラス 0x0132(Google)とタイプ 1(ネットワーク 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=01 |R|R|R| Len=1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Network cookie |R|R|T|D|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
次の表に、上の図に示されているオプション フィールドの説明を示します。
| フィールド | 説明 | フィールドの長さ |
|---|---|---|
| オプション クラス | オプションを定義した組織またはエンティティを識別します。値 0x0132 は、Google を定義エンティティとして指定します。 |
16 ビット |
| タイプ | クラス内のオプションのタイプを識別します。値 0x1 は、ネットワーク 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 ビット |
エンドポイント ID
エンドポイント ID オプション(エンドポイント Cookie とも呼ばれます)は、キャプチャ ポイント( Google CloudVM のネットワーク インターフェース コントローラ)を一意に識別します。このオプションは、オプション クラス 0x0132(Google)とタイプ 2(エンドポイント 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=02 |R|R|R| Len=4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Endpoint cookie +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
次の表に、上の図に示されているオプション フィールドの説明を示します。
| フィールド | 説明 | フィールドの長さ |
|---|---|---|
| オプション クラス | オプションを定義した組織またはエンティティを識別します。値 0x0132 は、Google を定義エンティティとして指定します。 |
16 ビット |
| タイプ | クラス内のオプションのタイプを識別します。値 0x2 は、エンドポイント ID オプションを指定します。詳細については、トンネル オプションをご覧ください。 |
8 ビット |
| R | 将来の使用のために予約されたオプション制御フラグ。これらのビットは送信時にゼロ(0)でなければならず、受信時に無視されなければなりません。 | 3 ビット |
| LEN | ペイロードの長さ(4 バイト単位)。エンドポイント ID ペイロードは 128 ビット(16 バイト)であるため、このオプションの長さは 4 に設定されます。 | 5 ビット |
| エンドポイント Cookie | キャプチャ ポイント(VM NIC)の不透明な識別子。 | 128 ビット |
プロフィール ID
プロファイル ID オプションは、トラフィックに適用されるミラーリング セキュリティ プロファイル グループを識別します。このオプションは、オプション クラス 0x0132(Google)とタイプ 3(プロフィール 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=03 |R|R|R| Len=2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Profile ID +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
次の表に、上の図に示されているオプション フィールドの説明を示します。
| フィールド | 説明 | フィールドの長さ |
|---|---|---|
| オプション クラス | オプションを定義した組織またはエンティティを識別します。値 0x0132 は、Google を定義エンティティとして指定します。 |
16 ビット |
| タイプ | クラス内のオプションのタイプを識別します。値 0x3 は、プロファイル ID オプションを指定します。詳細については、トンネル オプションをご覧ください。 |
8 ビット |
| R | 将来の使用のために予約されたオプション制御フラグ。これらのビットは送信時にゼロでなければならず、受信時に無視されなければなりません。 | 3 ビット |
| LEN | オプションのペイロードの長さ(4 バイト単位)。プロファイル ID ペイロードは 64 ビット(8 バイト)であるため、このオプションの長さは 2 に設定されます。 | 5 ビット |
| プロフィール ID | ミラーリング セキュリティ プロファイル グループの識別子。 | 64 ビット |
Network Security Integration の GENEVE ヘッダー形式
このセクションでは、ネットワーク セキュリティ統合サービスで使用される GENEVE ヘッダー形式について説明します。
IPv4 ヘッダー
GENEVE パケット形式は、IPv4 経由の UDP でコンパクトなトンネル ヘッダーをカプセル化します。小さな固定トンネル ヘッダーは、制御情報とベースレベルの機能および相互運用性を提供します。
次の図は、GENEVE パケットの IPv4 ヘッダー フィールドを示しています。
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of service| Total length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to live | Proto=17 (UDP)| Header checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
次の表に、前の図に示されている IPv4 ヘッダー フィールドの説明を示します。
| フィールド | 説明 |
|---|---|
| Proto=17(GENEVE の場合は常に UDP) | カプセル化されたペイロードが UDP プロトコルを使用することを示します。 |
| 送信元アドレス | ローカル サブネットのゲートウェイ IP アドレス。 |
| アーカイブ先のアドレス | お客様所有のロードバランサの VIP。 |
UDP ヘッダー
UDP RFC 0768 ヘッダーはデータをカプセル化し、イーサネットと IP アドレスの接続なしのセマンティクスを維持します。また、等価コスト マルチパス(ECMP)を実行するルーターにエントロピーも提供します。
次の図は、UDP 内にカプセル化された 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source port = <hash> | Dest port = 6081 (Geneve) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| UDP length | UDP checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
次の表に、前の図に示されている UDP ヘッダー フィールドの説明を示します。
| フィールド | 説明 |
|---|---|
| 送信元ポート | 16 ビットの範囲全体にわたる不透明なハッシュ。この値は、単一のカプセル化されたフローに属するすべてのパケット(両方向)で同じです。 |
| 宛先ポート | GENEVE トラフィックの指定された宛先ポート番号。6081 に設定されます。 |
| UDP の長さ | UDP ヘッダーとカプセル化された GENEVE パケットを含む、UDP データグラムの合計長。 |
| UDP チェックサム | エラー検出に使用される UDP データグラムのチェックサム値。 |
アウトオブバンド統合 GENEVE
このセクションでは、ネットワーク セキュリティ統合サービス(特にアウトオブバンド統合)で使用される GENEVE ヘッダー形式について説明します。帯域外統合では、GENEVE トンネルを使用してミラーリングされたパケットをカプセル化して配信します。パケットはコレクタの内部ロードバランサの仮想 IP アドレス(VIP)宛てで、ネットワーク Cookie などの Google Cloud固有のメタデータでアノテーションが付けられています。
アウトオブバンド統合で使用される Google Cloud固有の GENEVE オプションは、ネットワーク Cookie、エンドポイント Cookie、プロファイル ID です。詳細については、Google Cloud固有の GENEVE オプションをご覧ください。
次の図は、アウトオブバンド統合で Google Cloud固有の 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=0| Opt len |O|C| Rsvd | Protocol type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Virtual network identifier (VNI) = 0 | Rsvd. |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option class=0x0132 (Google) | Type=01 |R|R|R| Len=1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Network cookie |R|R|T|D|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option class=0x0132 (Google) | Type=02 |R|R|R| Len=4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Endpoint cookie +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option class=0x0132 (Google) | Type=03 |R|R|R| Len=2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Profile ID +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
インバンド統合 GENEVE
インバンド統合では、GENEVE トンネルを使用して、傍受されたパケットをカプセル化して配信します。プロデューサーの内部ロードバランサの仮想 IP アドレス(VIP)は、ネットワーク Cookie などの Google Cloud固有のメタデータでアノテーションが付けられたパケットを受信します。
インバンド統合では、次の Google Cloud固有の GENEVE オプション(ネットワーク Cookie、エンドポイント Cookie、プロファイル ID)を使用します。詳細については、Google Cloud固有の GENEVE オプションをご覧ください。
インバンド統合では、2 つの単方向 GENEVE トンネルで構成される論理双方向 GENEVE トンネルを使用して、元のエンドポイントへのパケットの再注入がサポートされています。プロデューサー ネットワーク アプライアンスは、パケットをインターセプトして検査した後、パケットをドロップするか、再挿入できます。パケットを再注入するために、アプライアンスは次の処理を行います。
- 元の GENEVE ヘッダー(同じオプション)を使用してパケットを再カプセル化します。
- 外側の IP ヘッダーで送信元アドレスと宛先アドレスを入れ替えます。
- チェックサムが正しいことを確認します。
次の図は、インバンド統合で Google Cloud固有の 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=0| Opt len |O|C| Rsvd | Protocol type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Virtual network identifier (VNI) = 0 | Rsvd. |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Class=0x0132 (Google) | Type=01 |R|R|R| Len=1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Network Cookie |R|R|T|D|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Class=0x0132 (Google) | Type=02 |R|R|R| Len=4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Endpoint Cookie +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Class=0x0132 (Google) | Type=03 |R|R|R| Len=2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Profile ID +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
GENEVE カプセル化と MTU 要件
最大伝送単位(MTU)は、イーサネット フレーム内に収まる IP パケットの最大サイズ(バイト単位)です。これには、IP ヘッダー、レイヤ 4 プロトコル ヘッダー、レイヤ 4 データが含まれます。詳細については、最大伝送単位をご覧ください。
Google Cloud ネットワークで許可される MTU は 8, 896 バイトです。ただし、Network Security Integration の場合は、Geneve カプセル化オーバーヘッド用に 396 バイトを保持する必要があります。この保持の必要性は、コンシューマー ネットワークとプロデューサー ネットワークの両方に影響します。
コンシューマー ネットワークの MTU: コンシューマー ネットワークの MTU は 8,500 バイト以下にする必要があります。この上限により、最大 MTU を超えることなく GENEVE オーバーヘッドに十分なスペースが確保されます。
プロデューサー ネットワークの MTU: プロデューサー ネットワークの MTU は、コンシューマー ネットワークの MTU よりも 396 バイト以上大きくする必要があります。この許容値は、追加の GENEVE カプセル化に対応しています。
GENEVE カプセル化に対応する MTU 制限が十分でない場合、パケットがドロップされることがあります。これは、仮想ネットワーク レベルまたは VM のオペレーティング システムで発生する可能性があります。