4. Geneve Frame Format (Geneve フレームフォーマット)
4. Geneve Frame Format (Geneve フレームフォーマット)
Geneve はトランスポートとして UDP プロトコル [RFC768] を使用します。Geneve パケットは UDP パケットにカプセル化され、UDP パケット自体は IP パケット(IPv4 または IPv6)にカプセル化されます。
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Outer Ethernet Header (Optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Outer IP Header (IPv4 or IPv6) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Outer UDP Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Ver | Opt Len |O|C| Rsvd. | Protocol Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Virtual Network Identifier (VNI) | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
~ Variable Length Options ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| Inner Packet (Ethernet Frame, IP Packet, etc.) |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
4.1. Standard UDP Header (標準 UDP ヘッダー)
Geneve は UDP 上で動作します。UDP ヘッダーフィールドは次のように設定されます。
- Source Port (送信元ポート): 実装定義。アンダーレイにおける ECMP のエントロピーをサポートするために、内部パケットヘッダー(例:5 タプル)のハッシュを使用して送信元ポートを計算することが RECOMMENDED (推奨される)。
- Destination Port (宛先ポート): IANA が Geneve に割り当てたポートは 6081 です。
- Length (長さ): UDP ヘッダーと Geneve ペイロードを含む UDP パケットの長さ。
- Checksum (チェックサム): UDP チェックサム。ゼロに設定される場合が MAY (ある)(セクション 4.6 参照)。
4.2. Tunnel Header Fields (トンネルヘッダーフィールド)
Geneve ヘッダーは 8 バイト長で、可変長オプションが加わります。
- Ver (2 bits, バージョン): バージョン。現在のバージョンは 0 です。
- Opt Len (6 bits, オプション長): オプション長。4 バイトの倍数で表されるオプションフィールドの長さ。オプションが存在しない場合、このフィールドは 0 です。最大長は 63 * 4 = 252 バイトです。
- O (1 bit): 制御パケット。セットされている場合、パケットには制御メッセージが含まれています(セクション 4.5 参照)。クリアされている場合、パケットにはデータが含まれています。
- C (1 bit): 重要なオプションが存在する。セットされている場合、オプションリスト内に Critical (重要) ビットがセットされたオプションが少なくとも 1 つ存在します(セクション 4.4 参照)。
- Rsvd. (6 bits, 予約): 予約。送信時にはゼロでなければならず (MUST)、受信時には無視されます。
- Protocol Type (16 bits, プロトコルタイプ): 内部プロトコルのタイプ。Ethernet フレームの場合、これは 0x6558 (Ethernet Bridging) です。EtherType 値を使用します。
- VNI (24 bits): Virtual Network Identifier (仮想ネットワーク識別子)。一意の仮想ネットワークを識別します。
- Reserved (8 bits, 予約): 送信時にはゼロでなければならず (MUST)、受信時には無視されます。
4.3. Tunnel Options (トンネルオプション)
可変長オプションは基本ヘッダーの後に続きます。各オプションは TLV (Type-Length-Value) フィールドです。
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 | Type |R|R|R| Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
~ Variable Option Data ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Option Class (16 bits, オプションクラス): オプションタイプの名前空間。異なる組織が独自にオプションを定義できるようにします。IANA レジストリがオプションクラスを管理します。
- Type (8 bits, タイプ): 指定されたオプションクラス内のオプションのタイプ。最上位ビット(ビット 0)は「Critical (重要)」ビットです。
- R (3 bits): 予約。送信時にはゼロでなければならず (MUST)、受信時には無視されます。
- Length (5 bits, 長さ): 4 バイトの倍数で表されるオプションデータの長さ。4 バイトのオプションヘッダーは含まれません。長さ 0 は、4 バイトのヘッダーのみ(データなし)を意味します。
- Variable Option Data (可変オプションデータ): オプションの内容。
4.3.1. Type (タイプ)
Type フィールドは、オプションに含まれるデータの形式を示します。上位ビット (0x80) は「Critical (重要)」ビットです。
- Critical Bit (Type & 0x80): セットされている場合、オプションは Critical です。受信者はこのオプションを処理しなければならず (MUST)、認識できない場合はパケットを破棄しなければなりません。クリアされている場合、オプションは non-critical (非重要) であり、認識できない場合、受信者はそれを無視してもよい (MAY)。
4.4. Constraints on Options (オプションに関する制約)
Geneve オプションは柔軟であるように設計されていますが、いくつかの制約が適用されます。
- Total Length (全長): オプションの全長は、基本ヘッダーの
Opt Lenフィールドによって制限されます(最大 252 バイト)。 - Processing (処理): エンドポイントは、オプションが出現する順序でオプションを処理しなければなりません (MUST)。
4.4.1. Option Processing Order (オプション処理順序)
オプションは、パケット内に出現する順序で処理しなければなりません (MUST)。これは、後続のオプションの処理を変更する可能性のあるオプションにとって重要です。
4.5. Control Messages (制御メッセージ)
基本ヘッダーの 'O' ビットがセットされている場合、パケットは制御メッセージです。制御メッセージは、OAM およびシグナリングに使用されます。制御メッセージのペイロードは、Protocol Type フィールドによって決定されます。
4.5.1. Loopback (ループバック)
制御メッセージの用途の 1 つは、接続性をテストするためのループバックです。
4.5.2. Ping
Ping メッセージは、パスの連続性を検証するために使用できます。
4.6. UDP Checksum (UDP チェックサム)
Outer UDP Checksum (外部 UDP チェックサム) は、外部 IP 疑似ヘッダー、UDP ヘッダー、Geneve ヘッダー、およびペイロードをカバーします。これは、カプセル化されたパケットの整合性保護を提供します。
IPv4: UDP チェックサムはゼロであってもよい (MAY)。 IPv6: UDP チェックサムはゼロであるべきではない (SHOULD NOT) が、トンネルには特定の例外が存在します([RFC6935] および [RFC768] 参照)。チェックサムがゼロの場合、受信者はそれを受け入れなければなりません (MUST)。