Dans le précédent article, nous avons défini les concepts de chemin SR (suite ordonnée de segments) et de segment SR (instruction donnée à un paquet de passer par une ou plusieurs liaisons).
Aujourd’hui, nous nous pencherons sur la mise en œuvre du Segment Routing à l’aide du protocole MPLS. Nous désignerons ce type d’implémentation par le terme “SR-MPLS”. Une bonne maîtrise des implémentations SR-MPLS vous aidera à mieux comprendre notre prochain article sur les avantages du Segment Routing pour les applications d’ingénierie de trafic.
Aperçu
Dans une implémentation SR-MPLS, les chemins SR sont encodés sous forme de piles de labels (label stacks), dont chaque entrée correspond à un segment du chemin SR. Cet article explique comment les labels MPLS sont exploités pour encoder les segments d’adjacence et de préfixe.
Segments d’adjacence
Figure 1 : Segments d’adjacence
Sur la figure 1, le chemin SR relie le nœud R1 au nœud R4. Il contient trois segments d’adjacence. Le segment 1 donne l’instruction aux paquets de passer par la liaison R1-R2, tandis que le segment 2 les redirige vers la liaison R2-R3 et le segment 3 vers la liaison R3-R4.
Lorsque le nœud R1 reçoit un paquet provenant de l’extérieur du domaine SR, il y applique une politique pouvant le conduire à transférer le paquet via le chemin SR illustré sur la figure 1. Le cas échéant, le nœud R1 impose une pile de labels MPLS contenant deux entrées. L’entrée au sommet de la pile représente le segment 2 et contient le label MPLS 1002. L’entrée au bas de la pile représente le segment 3 et contient le label MPLS 1003.
Le nœud R1 transfère alors le paquet via le segment 1 (c.-à-d. la liaison R1-R2). Lorsque le nœud R2 reçoit le paquet, il extrait le label 1002 du sommet de la pile, puis recherche une entrée correspondante dans sa Forwarding Information Base (FIB). L’entrée FIB contient une instruction (POP) et la destination suivante du paquet (nœud R3). Le nœud R2 retire alors le label du sommet de la pile et transfère le paquet via le segment 2 (c.-à-d. la liaison R2-R3).
Lorsque le nœud R3 reçoit le paquet, il extrait le label 1003 du sommet de la pile restante de labels, puis recherche une entrée correspondante dans sa FIB. L’entrée FIB contient une instruction (POP) et la destination suivante du paquet (nœud R4). Le nœud R3 retire alors l’entrée restante de la pile de labels et transfère le paquet via le segment 3 (c.-à-d. la liaison R3-R4). Le paquet atteint le nœud R4 sans encapsulation MPLS.
Segments de préfixe
Figure 2 : Segments de préfixe
Sur la figure 2, le chemin SR relie le nœud R1 au nœud R7 via le nœud R4. Il contient deux segments de préfixe : le segment 1 donne instruction aux paquets d’emprunter le chemin le moins coûteux entre les nœuds R1 et R4, tandis que le segment 2 les dirige vers le chemin le moins coûteux entre les nœuds R4 et R7. Toutes les liaisons sont configurées avec la même métrique IGP (10). Le chemin le moins coûteux entre les nœuds R1 et R4 passe donc par les liaisons R1-R2, R2-R3 et R3-R4, tandis que celui entre les nœuds R4 et R7 traverse les liaisons R4-R8 et R8-R7.
Lorsque le nœud R1 reçoit un paquet provenant de l’extérieur du domaine SR, il y applique une politique pouvant le conduire à transférer le paquet via le chemin SR illustré sur la figure 2. Le cas échéant, le nœud R1 impose une pile de labels MPLS contenant deux entrées. L’entrée au sommet de la pile représente le segment 1 et contient le label 2001. L’entrée au bas de la pile représente le segment 2 et contient le label 2002.
Le nœud R1 transfère alors le paquet vers le segment 1 (c.-à-d. via la liaison R1-R2). Lorsque le nœud R2 reçoit le paquet, il extrait le label 2001 du sommet de la pile, puis recherche une entrée correspondante dans sa FIB. L’entrée FIB contient une instruction (SWAP – 3001) et la destination suivante du paquet (nœud R3). Le nœud R2 remplace alors le label situé au sommet de la pile par la valeur 3001 et transfère le paquet vers le nœud R3.
Lorsque le nœud R3 reçoit le paquet, il extrait le label 3001 du sommet de la pile, puis recherche une entrée correspondante dans sa FIB. L’entrée FIB contient une instruction (POP) et la destination suivante du paquet (nœud R4). Le nœud R4 retire alors l’entrée située au sommet de la pile de labels et transfère le paquet vers le segment 2 (via la liaison R3-R4).
Lorsque le nœud R4 reçoit le paquet, il extrait le label 2002 du sommet de la pile restante de labels, puis recherche une entrée correspondante dans sa FIB. L’entrée FIB contient une instruction (SWAP – 3002) et la destination suivante du paquet (nœud R8). Le nœud R4 remplace alors le label par la valeur 3002 et transfère le paquet vers le nœud R8.
Lorsque le nœud R8 reçoit le paquet, il extrait le label 3002 du sommet de la pile restante de labels, puis recherche une entrée correspondante dans sa FIB. L’entrée FIB contient une instruction (POP) et la destination suivante du paquet (nœud R7). Le nœud R8 retire alors l’entrée située au sommet de la pile restante de labels et transfère le paquet vers le nœud R7 sans encapsulation MPLS.
Procédures PHP (Penultimate Hop Popping) et labels Explicit NULL
Chaque segment illustré dans les exemples ci-dessus exécute des procédures PHP. Lorsqu’un paquet traverse un segment, l’avant-dernier nœud de ce segment retire le label qui lui est associé.
Si le chemin SR prévoit de passer par un autre segment, le nœud de sortie du segment en cours fait office de nœud d’entrée pour le segment suivant. Le paquet atteint alors ce nœud avec le label du segment suivant placé au sommet de la pile. Si le chemin SR ne passe par aucun autre segment, le nœud de sortie du segment en cours fait également office de nœud de sortie du chemin. Dans ce cas, le paquet atteint le nœud de sortie du chemin sans encapsulation MPLS.
Il arrive parfois que la liaison finale du chemin SR ne soit pas en mesure de transporter le paquet sans encapsulation MPLS. Par exemple lorsqu’il s’agit d’un paquet IPv6 et que la liaison ne prend en charge que le protocole IPv4. Pour éviter ce problème, le nœud de sortie SR peut ajouter un label MPLS Explicit NULL dans la pile de labels MPLS.
Ainsi, lorsque l’avant-dernier nœud du dernier segment retire le label associé au segment final, c’est le label Explicit NULL qu’il met évidence. Il transfère alors le paquet au nœud de sortie du chemin. Ce dernier retire le label Explicit NULL et poursuit le traitement du paquet.
Conclusion
Dans cet article, nous avons étudié la manière dont une implémentation SR-MPLS encode des chemins SR sous forme de piles de labels MPLS. Nous avons également vu comment cette implémentation se sert de sa base FIB pour traiter les paquets.
Dans le prochain article, nous découvrirons les cas d’usage du Segment Routing pour les applications d’ingénierie de trafic.