Zum Hauptinhalt springen

4. Geneve Frame Format (Geneve-Frame-Format)

4. Geneve Frame Format (Geneve-Frame-Format)

Geneve verwendet das UDP-Protokoll [RFC768] als Transport. Das Geneve-Paket wird in einem UDP-Paket gekapselt, das wiederum in einem IP-Paket (IPv4 oder IPv6) gekapselt ist.

Das Format des Geneve-Pakets ist wie folgt:

   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 (Standard-UDP-Header)

Geneve läuft über UDP. Die Felder des UDP-Headers werden wie folgt gesetzt:

  • Source Port (Quellport): Implementierungsdefiniert. Es wird RECOMMENDED (EMPFOHLEN), dass der Quellport unter Verwendung eines Hashs der inneren Paket-Header (z. B. 5-Tupel) berechnet wird, um Entropie für ECMP im Underlay zu unterstützen.
  • Destination Port (Zielport): Der von der IANA für Geneve zugewiesene Port ist 6081.
  • Length (Länge): Die Länge des UDP-Pakets, einschließlich des UDP-Headers und der Geneve-Nutzlast.
  • Checksum (Prüfsumme): Die UDP-Prüfsumme. Sie MAY (KANN) auf Null gesetzt werden (siehe Abschnitt 4.6).

4.2. Tunnel Header Fields (Tunnel-Header-Felder)

Der Geneve-Header ist 8 Bytes lang, zuzüglich Optionen variabler Länge.

  • Ver (2 Bits): Version. Die aktuelle Version ist 0.
  • Opt Len (6 Bits): Optionslänge. Die Länge der Optionsfelder, ausgedrückt in Vielfachen von 4 Bytes. Wenn keine Optionen vorhanden sind, ist dieses Feld 0. Die maximale Länge beträgt 63 * 4 = 252 Bytes.
  • O (1 Bit): Steuerpaket. Wenn gesetzt, enthält das Paket eine Steuernachricht (siehe Abschnitt 4.5). Wenn nicht gesetzt, enthält das Paket Daten.
  • C (1 Bit): Kritische Optionen vorhanden. Wenn gesetzt, ist mindestens eine Option mit gesetztem Critical-Bit in der Optionsliste vorhanden (siehe Abschnitt 4.4).
  • Rsvd. (6 Bits): Reserviert. MUST (MUSS) bei der Übertragung Null sein und beim Empfang ignoriert werden.
  • Protocol Type (16 Bits): Der Typ des inneren Protokolls. Für Ethernet-Frames ist dies 0x6558 (Ethernet Bridging). Verwendet EtherType-Werte.
  • VNI (24 Bits): Virtual Network Identifier. Identifiziert das eindeutige virtuelle Netzwerk.
  • Reserved (8 Bits): MUST bei der Übertragung Null sein und beim Empfang ignoriert werden.

4.3. Tunnel Options (Tunnel-Optionen)

Die Optionen variabler Länge folgen dem Basis-Header. Jede Option ist ein TLV-Feld (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): Namensraum für den Optionstyp. Ermöglicht es verschiedenen Organisationen, Optionen unabhängig voneinander zu definieren. Die IANA-Registrierung verwaltet die Optionsklassen.
  • Type (8 Bits): Der Typ der Option innerhalb der gegebenen Optionsklasse. Das höchstwertige Bit (Bit 0) ist das "Critical" (Kritisch) Bit.
  • R (3 Bits): Reserviert. MUST bei der Übertragung Null sein und beim Empfang ignoriert werden.
  • Length (5 Bits): Länge der Optionsdaten, ausgedrückt in Vielfachen von 4 Bytes. Beinhaltet nicht den 4-Byte-Options-Header. Länge 0 bedeutet nur 4 Bytes Header (keine Daten).
  • Variable Option Data: Der Inhalt der Option.

4.3.1. Type

Das Type-Feld gibt das Format der in der Option enthaltenen Daten an. Das High-Order-Bit (0x80) ist das "Critical" Bit.

  • Critical Bit (Type & 0x80): Wenn gesetzt, ist die Option kritisch. Empfänger MUST diese Option verarbeiten oder das Paket verwerfen, wenn sie es nicht erkennen. Wenn nicht gesetzt, ist die Option nicht kritisch, und Empfänger MAY sie ignorieren, wenn sie nicht erkannt wird.

4.4. Constraints on Options (Einschränkungen für Optionen)

Geneve-Optionen sind flexibel konzipiert, aber es gelten bestimmte Einschränkungen:

  • Total Length (Gesamtlänge): Die Gesamtlänge der Optionen wird durch das Feld Opt Len im Basis-Header begrenzt (max. 252 Bytes).
  • Processing (Verarbeitung): Endpunkte MUST Optionen in der Reihenfolge verarbeiten, in der sie erscheinen.

4.4.1. Option Processing Order (Reihenfolge der Optionsverarbeitung)

Optionen MUST in der Reihenfolge verarbeitet werden, in der sie im Paket erscheinen. Dies ist wichtig für Optionen, die die Verarbeitung nachfolgender Optionen ändern können.

4.5. Control Messages (Steuernachrichten)

Wenn das 'O'-Bit im Basis-Header gesetzt ist, handelt es sich bei dem Paket um eine Steuernachricht. Steuernachrichten werden für OAM und Signalisierung verwendet. Die Nutzlast einer Steuernachricht wird durch das Feld Protocol Type bestimmt.

4.5.1. Loopback

Eine Verwendung von Steuernachrichten ist Loopback zum Testen der Konnektivität.

4.5.2. Ping

Ping-Nachrichten können verwendet werden, um die Pfadkontinuität zu überprüfen.

4.6. UDP Checksum (UDP-Prüfsumme)

Die äußere UDP-Prüfsumme deckt den äußeren IP-Pseudo-Header, den UDP-Header, den Geneve-Header und die Nutzlast ab. Sie bietet Integritätsschutz für das gekapselte Paket.

IPv4: Die UDP-Prüfsumme MAY Null sein. IPv6: Die UDP-Prüfsumme SHOULD NOT (SOLLTE NICHT) Null sein, aber es gibt bestimmte Ausnahmen für Tunnel (siehe [RFC6935] und [RFC768]). Wenn die Prüfsumme Null ist, MUST der Empfänger sie akzeptieren.