Aller au contenu principal

4. Geneve Frame Format (Format de trame Geneve)

4. Geneve Frame Format (Format de trame Geneve)

Geneve utilise le protocole UDP [RFC768] comme transport. Le paquet Geneve est encapsulé dans un paquet UDP, qui est lui-même encapsulé dans un paquet IP (IPv4 ou IPv6).

Le format du paquet Geneve est le suivant :

   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 (En-tête UDP standard)

Geneve fonctionne sur UDP. Les champs de l'en-tête UDP sont définis comme suit :

  • Source Port (Port source) : Défini par l'implémentation. Il est RECOMMENDED (RECOMMANDÉ) que le port source soit calculé à l'aide d'un hachage des en-têtes du paquet interne (par exemple, 5-uplet) pour prendre en charge l'entropie pour ECMP dans le réseau sous-jacent.
  • Destination Port (Port de destination) : Le port attribué par l'IANA pour Geneve est 6081.
  • Length (Longueur) : La longueur du paquet UDP, y compris l'en-tête UDP et la charge utile Geneve.
  • Checksum (Somme de contrôle) : La somme de contrôle UDP. Elle MAY (PEUT) être mise à zéro (voir Section 4.6).

4.2. Tunnel Header Fields (Champs d'en-tête de tunnel)

L'en-tête Geneve a une longueur de 8 octets, plus des options de longueur variable.

  • Ver (2 bits, Version) : Version. La version actuelle est 0.
  • Opt Len (6 bits, Longueur d'option) : Longueur de l'option. La longueur des champs d'option, exprimée en multiples de 4 octets. Si aucune option n'est présente, ce champ est à 0. La longueur maximale est de 63 * 4 = 252 octets.
  • O (1 bit) : Paquet de contrôle. S'il est défini, le paquet contient un message de contrôle (voir Section 4.5). S'il est effacé, le paquet contient des données.
  • C (1 bit) : Options critiques présentes. S'il est défini, au moins une option avec le bit Critique défini est présente dans la liste des options (voir Section 4.4).
  • Rsvd. (6 bits, Réservé) : Réservé. MUST (DOIT) être à zéro à la transmission et ignoré à la réception.
  • Protocol Type (16 bits, Type de protocole) : Le type du protocole interne. Pour les trames Ethernet, c'est 0x6558 (Ethernet Bridging). Utilise les valeurs EtherType.
  • VNI (24 bits) : Virtual Network Identifier (Identifiant de réseau virtuel). Identifie le réseau virtuel unique.
  • Reserved (8 bits, Réservé) : MUST être à zéro à la transmission et ignoré à la réception.

4.3. Tunnel Options (Options de tunnel)

Les options de longueur variable suivent l'en-tête de base. Chaque option est un champ 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, Classe d'option) : Espace de noms pour le Type d'option. Permet à différentes organisations de définir des options indépendamment. Le registre IANA gère les Classes d'options.
  • Type (8 bits, Type) : Le type d'option au sein de la Classe d'option donnée. Le bit le plus significatif (bit 0) est le bit "Critical" (Critique).
  • R (3 bits) : Réservé. MUST être à zéro à la transmission et ignoré à la réception.
  • Length (5 bits, Longueur) : Longueur des données de l'option, exprimée en multiples de 4 octets. N'inclut pas l'en-tête d'option de 4 octets. Une longueur de 0 signifie 4 octets d'en-tête uniquement (pas de données).
  • Variable Option Data (Données d'option variables) : Le contenu de l'option.

4.3.1. Type (Type)

Le champ Type indique le format des données contenues dans l'option. Le bit de poids fort (0x80) est le bit "Critical" (Critique).

  • Critical Bit (Type & 0x80) : S'il est défini, l'option est Critique. Les récepteurs MUST traiter cette option ou rejeter le paquet s'ils ne la reconnaissent pas. S'il est effacé, l'option est non critique, et les récepteurs MAY l'ignorer si elle n'est pas reconnue.

4.4. Constraints on Options (Contraintes sur les options)

Les options Geneve sont conçues pour être flexibles, mais certaines contraintes s'appliquent :

  • Total Length (Longueur totale) : La longueur totale des options est limitée par le champ Opt Len dans l'en-tête de base (max 252 octets).
  • Processing (Traitement) : Les points de terminaison MUST traiter les options dans l'ordre où elles apparaissent.

4.4.1. Option Processing Order (Ordre de traitement des options)

Les options MUST être traitées dans l'ordre où elles apparaissent dans le paquet. C'est important pour les options qui peuvent modifier le traitement des options ultérieures.

4.5. Control Messages (Messages de contrôle)

Si le bit 'O' dans l'en-tête de base est défini, le paquet est un message de contrôle. Les messages de contrôle sont utilisés pour l'OAM et la signalisation. La charge utile d'un message de contrôle est déterminée par le champ Protocol Type.

4.5.1. Loopback (Bouclage)

Une utilisation des messages de contrôle est le bouclage pour tester la connectivité.

4.5.2. Ping

Les messages Ping peuvent être utilisés pour vérifier la continuité du chemin.

4.6. UDP Checksum (Somme de contrôle UDP)

La somme de contrôle UDP externe couvre le pseudo-en-tête IP externe, l'en-tête UDP, l'en-tête Geneve et la charge utile. Elle fournit une protection de l'intégrité pour le paquet encapsulé.

IPv4 : La somme de contrôle UDP MAY être nulle. IPv6 : La somme de contrôle UDP SHOULD NOT (NE DEVRAIT PAS) être nulle, mais certaines exceptions existent pour les tunnels (voir [RFC6935] et [RFC768]). Si la somme de contrôle est nulle, le récepteur MUST l'accepter.