Passa al contenuto principale

4. Geneve Frame Format (Formato del frame Geneve)

4. Geneve Frame Format (Formato del frame Geneve)​

Geneve utilizza il protocollo UDP [RFC768] come trasporto. Il pacchetto Geneve è incapsulato in un pacchetto UDP, che è a sua volta incapsulato in un pacchetto IP (IPv4 o IPv6).

Il formato del pacchetto Geneve è il seguente:

   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 (Intestazione UDP standard)​

Geneve viene eseguito su UDP. I campi dell'intestazione UDP sono impostati come segue:

  • Source Port (Porta sorgente): definita dall'implementazione. È RECOMMENDED (CONSIGLIATO) calcolare la porta sorgente utilizzando un hash delle intestazioni del pacchetto interno (ad es. 5-tuple) per supportare l'entropia per ECMP nell'underlay.
  • Destination Port (Porta di destinazione): la porta assegnata dalla IANA per Geneve è 6081.
  • Length (Lunghezza): la lunghezza del pacchetto UDP, incluse l'intestazione UDP e il payload Geneve.
  • Checksum (Checksum): il checksum UDP. MAY (PUÒ) essere impostato a zero (vedere la sezione 4.6).

4.2. Tunnel Header Fields (Campi dell'intestazione del tunnel)​

L'intestazione Geneve è lunga 8 byte, più le opzioni di lunghezza variabile.

  • Ver (2 bit): Versione. La versione corrente è 0.
  • Opt Len (6 bit): Lunghezza dell'opzione. La lunghezza dei campi opzione, espressa in multipli di 4 byte. Se non sono presenti opzioni, questo campo è 0. La lunghezza massima è 63 * 4 = 252 byte.
  • O (1 bit): Pacchetto di controllo. Se impostato, il pacchetto contiene un messaggio di controllo (vedere la sezione 4.5). Se non impostato, il pacchetto contiene dati.
  • C (1 bit): Opzioni critiche presenti. Se impostato, è presente almeno un'opzione con il bit critico impostato nell'elenco delle opzioni (vedere la sezione 4.4).
  • Rsvd. (6 bit): Riservato. MUST (DEVE) essere pari a zero durante la trasmissione e ignorato alla ricezione.
  • Protocol Type (16 bit): Il tipo del protocollo interno. Per i frame Ethernet, questo è 0x6558 (Ethernet Bridging). Utilizza i valori EtherType.
  • VNI (24 bit): Identificatore di rete virtuale. Identifica la rete virtuale univoca.
  • Reserved (8 bit): MUST essere diverso da zero durante la trasmissione e ignorato alla ricezione.

4.3. Tunnel Options (Opzioni del tunnel)​

Le opzioni di lunghezza variabile seguono l'intestazione di base. Ogni opzione è un campo 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 bit): spazio dei nomi per il tipo di opzione. Consente a diverse organizzazioni di definire opzioni in modo indipendente. Il registro IANA gestisce le classi di opzioni.
  • Type (8 bit): il tipo di opzione all'interno della data classe di opzioni. Il bit più significativo (bit 0) è il bit "Critical" (Critico).
  • R (3 bit): Riservato. MUST essere pari a zero durante la trasmissione e ignorato alla ricezione.
  • Length (5 bit): Lunghezza dei dati dell'opzione, espressa in multipli di 4 byte. Non include l'intestazione dell'opzione di 4 byte. Lunghezza 0 significa solo 4 byte di intestazione (nessun dato).
  • Variable Option Data: il contenuto dell'opzione.

4.3.1. Type​

Il campo Type indica il formato dei dati contenuti nell'opzione. Il bit di ordine superiore (0x80) è il bit "Critical".

  • Critical Bit (Type & 0x80): Se impostato, l'opzione è critica. I ricevitori MUST elaborare questa opzione o scartare il pacchetto se non la riconoscono. Se non impostato, l'opzione non è critica e i ricevitori MAY ignorarla se non riconosciuta.

4.4. Constraints on Options (Vincoli sulle opzioni)​

Le opzioni Geneve sono progettate per essere flessibili, ma si applicano alcuni vincoli:

  • Total Length (Lunghezza totale): la lunghezza totale delle opzioni è limitata dal campo Opt Len nell'intestazione di base (max 252 byte).
  • Processing (Elaborazione): gli endpoint MUST elaborare le opzioni nell'ordine in cui appaiono.

4.4.1. Option Processing Order (Ordine di elaborazione delle opzioni)​

Le opzioni MUST essere elaborate nell'ordine in cui appaiono nel pacchetto. Questo è importante per le opzioni che possono modificare l'elaborazione delle opzioni successive.

4.5. Control Messages (Messaggi di controllo)​

Se il bit 'O' nell'intestazione di base è impostato, il pacchetto è un messaggio di controllo. I messaggi di controllo vengono utilizzati per OAM e segnalazione. Il payload di un messaggio di controllo è determinato dal campo Protocol Type.

4.5.1. Loopback​

Un utilizzo dei messaggi di controllo è il loopback per testare la connettività.

4.5.2. Ping​

I messaggi ping possono essere utilizzati per verificare la continuità del percorso.

4.6. UDP Checksum (Checksum UDP)​

Il checksum UDP esterno copre lo pseudo-intestazione IP esterna, l'intestazione UDP, l'intestazione Geneve e il payload. Fornisce protezione dell'integrità per il pacchetto incapsulato.

IPv4: il checksum UDP MAY essere zero. IPv6: il checksum UDP SHOULD NOT (NON DOVREBBE) essere zero, ma esistono alcune eccezioni per i tunnel (vedere [RFC6935] e [RFC768]). Se il checksum è zero, il ricevitore MUST accettarlo.