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 Lennell'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.