Ce document explique pourquoi le routeur de périphérie fournisseur Cisco IOS© IPv6 (6PE) utilise deux étiquettes MPLS (Multiprotocol Label Switching) dans le plan de données.
Pour plus d'informations sur les conventions utilisées dans ce document, reportez-vous à Conventions relatives aux conseils techniques Cisco.
A. 6PE utilise deux étiquettes :
L'étiquette supérieure est l'étiquette de transport, attribuée saut par saut par le protocole LDP (Label Distribution Protocol) ou par l'ingénierie de trafic MPLS (TE).
L'étiquette inférieure est l'étiquette attribuée par le protocole BGP (Border Gateway Protocol) et annoncée par le protocole BGP interne (iBGP) entre les routeurs de périphérie du fournisseur (PE).
Lors de la sortie du 6PE, l'une des principales exigences était qu'aucun des routeurs principaux MPLS (les routeurs IP) ne devait être compatible IPv6. Cette exigence a entraîné la nécessité de deux étiquettes dans le plan de données. Il y a deux raisons pour lesquelles le 6PE a besoin des deux étiquettes.
Fonctionnalité PHP
Si seule l'étiquette de transport était utilisée, et si l'avant-dernier saut par éclatement (PHP) était utilisé, l'avant-dernier saut par éclatement (le routeur IP) devrait comprendre IPv6.
Avec PHP, cet avant-dernier routeur de saut devrait supprimer l'étiquette MPLS et transférer le paquet en tant que paquet IPv6. Ce routeur IP doit savoir que le paquet est IPv6, car il doit utiliser le type d'encapsulation de couche 2 correct pour IPv6. (Le type d'encapsulation est différent pour IPv6 et IPv4 ; par exemple, pour Ethernet, le type d'encapsulation est 0x86DD pour IPv6, alors qu'il est 0x0800 pour IPv4.) Si l'avant-dernier routeur de saut n'est pas compatible IPv6, il placera probablement le type d'encapsulation de couche 2 pour IPv4 pour le paquet IPv6. Le routeur PE de sortie croirait alors que le paquet était IPv4.
Il existe un traitement de durée de vie (TTL) dans les en-têtes IPv4 et IPv6. Dans IPv6, le champ est appelé Limite de saut. Les champs IPv4 et IPv6 se trouvent à des emplacements différents dans les en-têtes. En outre, la somme de contrôle d'en-tête dans l'en-tête IPv4 doit également être modifiée ; IPv6 ne contient pas de champ de somme de contrôle d'en-tête. Si l'avant-dernier routeur de saut n'est pas compatible IPv6, le paquet IPv6 risque d'être mal formé, car le routeur s'attend à trouver le champ TTL et le champ de somme de contrôle d'en-tête dans l'en-tête.
En raison de ces différences, l'avant-dernier routeur de saut doit savoir qu'il s'agit d'un paquet IPv6. Comment ce routeur peut-il savoir que le paquet est un paquet IPv6, puisqu'il n'a pas attribué d'étiquette à la classe d'équivalence de transfert (FEC) IPv6 et qu'il n'y a pas de champ d'encapsulation dans l'en-tête MPLS ? Il peut rechercher le premier quartet après la pile d'étiquettes et déterminer que le paquet est IPv6 si la valeur est 6. Cependant, cela implique que l'avant-dernier routeur de saut doit être compatible IPv6.
Ce scénario pourrait fonctionner si l'étiquette null explicite est utilisée (donc pas de PHP). Cependant, la décision était d'exiger PHP.
Équilibrage de charge
L’équilibrage de charge typique sur un routeur IP suit ce processus. Le routeur IP va à la fin de la pile d'étiquettes et détermine s'il s'agit d'un paquet IPv4 en examinant le premier quartet après la pile d'étiquettes.
Si le quartet a une valeur de 4, la charge utile MPLS est un paquet IPv4 et la charge du routeur IP est équilibrée en hachant les adresses IPv4 source et de destination.
Si le routeur IP est compatible IPv6 et que la valeur du quartet est 6, la charge du routeur IP est équilibrée en hachant les adresses IPv6 source et de destination.
Si le routeur IP n'est pas compatible IPv6 et que la valeur du quartet n'est pas 4 (elle peut être 6 si le paquet est un paquet IPv6), le routeur IP détermine qu'il ne s'agit pas d'un paquet IPv4 et prend la décision d'équilibrage de charge en fonction de l'étiquette inférieure.
Dans le scénario 6PE, imaginez que deux routeurs PE de sortie annoncent un préfixe IPv6 dans BGP vers le routeur PE d'entrée. Ce préfixe IPv6 serait annoncé avec deux étiquettes différentes dans BGP. Par conséquent, dans le plan de données, l'étiquette inférieure serait l'une des deux étiquettes. Cela permettrait à un routeur IP d'équilibrer la charge sur l'étiquette inférieure par flux.
Si 6PE utilisait uniquement l'étiquette de transport pour transporter les paquets 6PE à travers le coeur MPLS, les routeurs IP ne seraient pas en mesure d'équilibrer la charge de ces paquets par flux à moins que les routeurs IP ne soient compatibles IPv6. Si les routeurs IP étaient compatibles IPv6, ils pouvaient utiliser les adresses IPv6 source et de destination afin de prendre une décision d'équilibrage de charge.