Im Blogbeitrag der vorigen Woche haben wir gelernt, dass ein SR-Pfad eine geordnete Folge von Segmenten und ein SR-Segment eine Anweisung ist, die bewirkt, dass Pakete eine oder mehrere Verbindungen passieren.
In diesem Beitrag beschäftigen wir uns mit einer Klasse von SR-Implementierungen, die MPLS nutzen und mitunter als SR-MPLS bezeichnet werden. Damit verschaffen wir uns eine gute Basis für den Blogbeitrag der nächsten Woche, in dem es darum geht, wie SR verschiedene Anwendungen für die Netzwerkverkehrssteuerung unterstützt.
Übersicht
In SR-MPLS werden SR-Pfade in MPLS-Labelstacks abgebildet. Jeder Labelstack repräsentiert ein Segment im SR-Pfad. In diesem Blogbeitrag geht es darum, wie Adjacency- und Prefix-Segmente in MPLS-Labeln abgebildet werden.
Adjacency-Segmente
Abbildung 1: Adjacency-Segmente
In Abbildung 1 führt ein SR-Pfad von R1 zu R4. Dieser SR-Pfad enthält drei Adjacency-Segmente. Segment 1 bewirkt, dass Pakete die Verbindung R1->R2 passieren, Segment 2 bewirkt, dass sie die Verbindung R2->R3 passieren und Segment 3 tut dasselbe für R3->R4.
Wenn ein Paket von außerhalb der SR-Domain an R1 eintrifft, wendet dieser Knoten die Richtlinie an. Das Ergebnis könnte sein, dass das Paket über den in Abbildung 1 gezeigten SR-Pfad geroutet wird. Wenn dies geschieht, fügt R1 einen MPLS-Labelstack mit zwei Einträgen in das Paket ein. Der obere Eintrag repräsentiert Segment 2 und enthält das MPLS-Label 1002. Der untere Eintrag repräsentiert Segment 3 und enthält das MPLS-Label 1003.
Nachdem es den MPLS-Labelstack eingefügt hat, leitet R1 das Paket über Segment 1 (die Verbindung R1->R2). Wenn das Paket an R2 ankommt, liest R2 das oberste Label im Labelstack (1002) und sucht in seiner Forwarding Information Base (FIB) nach einem entsprechenden Eintrag. Ein solcher Eintrag existiert und enthält eine Anweisung (POP) und den nächsten Hop (R3). R2 führt die Anweisung aus (POP heißt „lösche den obersten Eintrag aus dem Stack“) und leitet das Paket über Segment 2 (R2->R3) weiter.
Wenn das Paket an R3 ankommt, liest R3 das oberste Label im Labelstack (1003) und sucht nach einem entsprechenden Eintrag in seiner FIB. Auch dieser Eintrag existiert und enthält eine Anweisung (POP) und den nächsten Hop (R4). Also löscht R3 den verbleibenden Eintrag aus dem Stack und leitet das Paket über Segment 3 (R3->R4) weiter. Das Paket kommt ohne MPLS-Labelstack an R4 an.
Prefix-Segmente
Abbildung 2: Prefix-Segmente
In Abbildung 2 führt ein SR-Pfad von R1 über R4 zu R7. Dieser SR-Pfad enthält zwei Prefix-Segmente. Segment 1 ist ein Prefix-Segment, das bewirkt, dass Pakete den kostengünstigsten Pfad von R1 zu R4 passieren. Segment 2 ist ebenfalls ein Prefix-Segment. Es bewirkt, dass Pakete den kostengünstigsten Pfad von R4 zu R7 passieren. In diesem Netzwerk sind alle Verbindungen mit derselben IGP-Kennzahl konfiguriert (10). Infolgedessen besteht der kostengünstigste Pfad von R1 zu R4 aus R1->R2, R2->R3 and R3->R4. Der kostengünstigste Pfad von R4 zu R7 ist R4->R8, R8->R7.
Wenn ein Paket von außerhalb der SR-Domain an R1 eintrifft, wendet dieser Knoten die Richtlinie an. Das Ergebnis könnte sein, dass das Paket über den in Abbildung 2 gezeigten SR-Pfad geroutet wird. Wenn dies geschieht, fügt R1 einen MPLS-Labelstack mit zwei Einträgen in das Paket ein. Der obere Eintrag repräsentiert Segment 1 und enthält das MPLS-Label 2001. Der untere Eintrag repräsentiert Segment 2 und enthält das MPLS-Label 2002.
Nachdem es den MPLS-Labelstack eingefügt hat, leitet R1 das Paket über Segment 1 (die Verbindung R1->R2). Wenn das Paket an R2 ankommt, liest R2 das oberste Label im Labelstack (2001) und sucht in seiner FIB nach einem entsprechenden Eintrag. Ein solcher Eintrag existiert und enthält eine Anweisung (SWAP – 3001) und den nächsten Hop (R3). Daher überschreibt R2 das Label im obersten Stack-Eintrag mit einem neuen Wert (3001) und leitet das Paket an R3 weiter.
Wenn das Paket an R3 ankommt, liest R3 das Label im obersten Stack-Eintrag (3001) und sucht in seiner FIB nach einem entsprechenden Eintrag. Auch dieser Eintrag existiert und enthält eine Anweisung (POP) und den nächsten Hop (R4). Also löscht R4 den obersten Eintrag aus dem Stack und leitet das Paket über Segment 2 (R3->R4) weiter.
Wenn das Paket an R4 ankommt, liest R4 das verbleibende Label im Labelstack (2002) und sucht in seiner FIB nach einem entsprechenden Eintrag. Ein solcher Eintrag existiert und enthält eine Anweisung (SWAP – 3002) und den nächsten Hop (R8). Daher überschreibt R4 das Label im verbleibenden Stack-Eintrag mit einem neuen Wert (3002) und leitet das Paket an R8 weiter.
Wenn das Paket an R8 ankommt, liest R8 das verbleibende Label im Labelstack (3002) und sucht in seiner FIB nach einem entsprechenden Eintrag. Auch dieser Eintrag existiert und enthält eine Anweisung (POP) und den nächsten Hop (R7). Also löscht R8 den verbleibenden Eintrag aus dem Stack und leitet das Paket ohne den MPLS-Labelstack an R7 weiter.
Penultimate Hop Popping (PHP) und das explizite Null-Label
In den Beispielen oben führt jedes Segment sogenannte PHP-Prozeduren aus. Das bedeutet, dass der letzte Eintrag im MPLS-Labelstack für ein SR-Segment vom vorletzten Knoten dieses SR-Segments gelöscht wird.
Wenn der SR-Pfad ein oder mehrere weitere Segmente enthält, die das Paket durchqueren muss, ist der Ausgangsknoten des aktuellen Segments gleichzeitig der Eingangsknoten des nächsten Segments. In diesem Fall kommt das Paket mit einem MPLS-Labelstack an diesem Knoten an, dessen oberster Eintrag das Label für das nächste Segment enthält. Wenn der SR-Pfad kein weiteres Segment enthält, das durchquert werden muss, ist der Ausgangsknoten des Segments auch der Ausgangsknoten des SR-Pfads. In diesem Fall kommt das Paket ohne MPLS-Labelstack an diesem Ausgangsknoten an.
In manchen Situationen können Knoten Pakete ohne MPLS-Labelstack nicht weiterleiten. Das ist zum Beispiel der Fall, wenn IPv6-Pakete über Verbindungen übertragen werden, die nur IPv4 unterstützen. Um dieses Problem zu vermeiden, kann der SR-Eingangsknoten ein explizites Null-Label als ersten Eintrag in den MPLS-Labelstack einfügen.
Wenn der vorletzte Knoten des letzten Segments den Eintrag für das letzte Segment löscht, wird das explizite Null-Label zum obersten (und einzigen verbleibenden) Eintrag im Stack. Entscheidend ist jedoch, dass noch ein MPLS-Labelstack vorhanden ist. Dadurch ist der Knoten in der Lage, das Paket an den Ausgangsknoten weiterzuleiten. Der Ausgangsknoten des SR-Pfads löscht das explizite Null-Label und verarbeitet das Paket dann weiter.
Fazit
In diesem Blogbeitrag haben wir gelernt, wie SR-MPLS SR-Pfade in MPLS-Labelstacks abbildet und FIB zum Weiterleiten der Pakete nutzt.
Im nächsten Blogbeitrag untersuchen wir, wie SR für Anwendungen in der Verkehrssteuerung genutzt werden kann.