Anmerkung: Dieser Artikel stammt von http://www.fefe.de/ct/mpls.txt und erschien in c't 8/2001 S. 260-262 Autor: Felix von Leitner ----------------------------------------------------------------------- MPLS == Multi Protocol Label Switching In der Welt der Netzwerkprotokolle gibt es sehr selten radikale Änderungen. Wenn dann doch mal jemand eine radikale Idee hat, wird daraus gewöhnlich ein Produkt gemacht, welches sich dann am Markt nicht durchsetzen kann. Daraufhin integrieren dann einzelne Hersteller der Reihe nach die Vorteile des "gescheiterten" Ansatzes in ihre bestehenden Produkte, und am Ende reicht man die Spezifikation dann bei der IETF ein, welche das dann in Form eines offenen Standards ratifiziert. So ist das vielen Protokollen ergangen. Im Falle von MPLS war der "gescheiterte" Ansatz ATM, der einzelne Hersteller war Cisco, und er nannte das Feature Tag Switching. ATMs revolutionär neuer Ansatz war, daß man statt Paketen variabler Länge Zellen fester Länge verschickt. Diese Zellen werden dann nicht geroutet, sondern geswitcht - der Unterschied ist die Ebene des Abstraktionsmodells. Switches sind Layer 2 Geräte, Router arbeiten auf Layer 3, aber abgesehen davon erfüllen sie die gleiche Funktion: sie leiten Daten weiter. Im Layer 2 spricht man von Frames, auf Layer 3 von Paketen. Router sind traditionell Flaschenhälse in den immer schneller werdenden Datennetzen, weil sie pro Paket langwierig den nächsten Router auf dem Weg bestimmen müssen. Router führen zu diesem Zwecke eine lange Liste von bekannten Zielnetzen und dem zuständigen Router mit sich. Diese Liste wird als Routingtabelle bezeichnet. Der Router muß die Zielnetze aller Routen in der Routingtabelle angucken und das nehmen, das am besten paßt. Diese Aufgabe wird dadurch erschwert, daß die Zielnetze Teil anderer Zielnetze sein können, d.h. der Router kann nicht beim ersten passenden Netz die Suche beenden. Dank komplexer Datenstrukturen ist diese Suche trotzdem relativ schnell machbar; im Durchschnitt größenordnungsmäßig mit 10 verglichenen Zielnetzen. Allerdings muß diese Suche für jedes Paket durchgeführt werden. Selbst wenn man einen unendlich schnellen Prozessor annimmt, haben DRAM-Bausteine eine Zugriffszeit im dreistelligen Nanosekundenbereich, d.h. pro Sekunde kann man höchstens eine Million Pakete routen. ATM-Zellen sind 48 Bytes groß und ist u.a. für die Datenraten von 622 Megabits pro Sekunde spezifiziert, d.h. pro Sekunde sind das über anderthalb Mal so viele Routing-Entscheidungen wie möglich sein sollten! ATM erreicht diese vorher ungeahnten Geschwindigkeiten dadurch, daß die Routing-Entscheidung nicht pro Paket getroffen wird, sondern pro Verbindung. Man muß sich das wie bei der Gepäckaufnahme am Flughafen vorstellen. Das Personal am Schalter der Fluggesellschaft (der erste Router auf dem Weg) bestimmt die Route und schreibt sie auf ein Schildchen (englisch "tag"), das am Gepächstück angebracht wird. Das Verladepersonal (die weiteren Router auf dem Weg) müssen dann keinerlei Informationen über das weltweite Routing besitzen, sie müssen nur auf das Schildchen gucken. So wird der Durchsatz am Flughafen erheblich gesteigert. Am Flughafen hat man dieses Prinzip noch etwas verfeinert, indem nicht die Route auf die Schildchen geschrieben wird, sondern nur ein Barcode, d.h. eine Zahl. Das verbraucht weniger Platz und läßt sich maschinell leicht auswerten. Diese Aufschrift heißt im Englischen "label". Im Prinzip funktioniert MPLS genau so. Der Aufkleber ist als Zwischen-Header implementiert, d.h. er befindet sich zwischen dem Layer 2 Header (Ethernet, Frame Relay, FDDI, ATM Zellen o.ä.) und dem Layer 3 Header (IP, IPX, AppleTalk, o.ä.). Im Internet ist es nicht sinnvoll, wenn jeder Router einen Überblick über das gesamte Routing im Internet haben muß. Das kostet viel Platz und erzeugt unnötige Kommunikation, d.h. es würde Bandbreite verschwenden. Nun sind Zwischenheader natürlich einfacher zu überschreiben oder ersetzen als Schildchen an Gepäckstücken, so daß man bei MPLS zwischen je zwei MPLS-Routern eine andere Zahl auf das Schildchen schreiben kann. Wenn man das am Flughafen machen könnte, würde man bei Gepäckstücken immer die Gatenummer und Uhrzeit des Fluges aufschreiben. Bevor man das Gepäckstück dann einläd, würde man die Gatenummer des Verbindungsfluges am Zielflughafen eintragen. Am Zielflughafen könnte das Gepäckstück dann völlig ohne Zusatzinformationen über die Flüge von ungeschultem Hilfspersonal verteilt werden. Nun müßte immer noch an jedem Gate eine Liste aushängen, auf der die Gates auf dem Zielflughafen stehen, damit man die weitergehende Beschriftung durchführen kann. Dafür bräuchte man dann doch wieder geschultes Personal und müßte für alle Gepäckstücke Listen durch gehen. Wenn man das Konzept zu Ende denkt, kann man auch gleich pro Route ein Label vergeben. Hierbei kann man natürlich alle Leute gleich behandeln, die auf dem selben Weg zum selben Ziel fliegen (Informatiker oder Mathematiker sprechen von einer Äquivalenzklasse, bei MPLS ist der Fachausdruck "forward equivalence class"). Man kann sich das so vorstellen, daß am Flughafen dann eine lange Wand mit numerierten Fächern ist. An jedem Fach hängt ein Zettel mit einer Gatenummer und einer Flugnummer, und in dem Fach liegen neue Schildchen. Wenn ein Gepäckstück mit einem Schildchen mit der Nummer "23" ankommt, dann geht man einfach zum Fach Nummer 23. Man holt sich dann aus dem Fach ein Schildchen heraus, welches man an dem Gepäckstück anbringt (das alte Schildchen recycled man), und auf dem Zettel am Fach steht drauf, zu welchem Gate das Gepäckstück gebracht werden muß. Und fast genau so geht man bei ATM und bei MPLS vor. Wenn bei einem MPLS-Router ein Paket ohne Label ankommt, schaut er in der Routingtabelle nach, welcher Router zuständig ist, und bittet diesen um ein Label für die Ziel-IP des Paketes. Dieses Label trägt man dann auf dem Zwischenheader ein und reicht das Paket an den eben rausgesuchten Router weiter. Wenn bei einem MPLS-Router ein Paket mit Label ankommt, nimmt er das Label als Index in seiner Label-Tabelle. In der Tabelle steht das ausgehende Interface, die Adresse des Gateways, und das neue Label. In der Praxis sieht das natürlich etwas komplizierter aus, weil die Tabelle ja beliebig groß werden kann. Außerdem kann es vorkommen, daß sich das Routing ändert, weil eine Leitung ausgefallen ist. Man wird also Einträge aus der MPLS-Tabelle nach einer Weile löschen, wenn sie nicht benutzt wurden. Und Router müssen nachgucken, ob der Eintrag in der Tabelle überhaupt korrekt sein kann. Und es muß eine Möglichkeit geben, einem zureichenden Router mitteilen zu können, daß sich die Labels geändert haben. Das IETF Protokoll, um Tags zu beantragen und Änderungen bekannt zu machen, heißt Label Distribution Protocol (LDP) und ist in RFC 3036 im Januar 2001 erstmals spezifiziert worden. Auch für die komplette MPLS Architektur gibt es ein Überblick-RFC mit der Nummer 3032. Es stellt sich heraus, daß man MPLS auch wunderbar für Traffic Shaping oder die Umsetzung reservierter Bandbreiten einsetzen kann. Und wenn man auch noch zuläßt, daß in dem Zwischenheader mehr als ein Label steht, kann man sogar VPNs mit MPLS implementieren! In diesem Fall würde man alle Labels der Reihe nach in den Header schreiben, und die Router auf dem Wege würden jeweils das oberste Label lesen, aber anstatt es gegen das Label aus der Tabelle zu ersetzen, würden sie es ganz entfernen. So kann man sich sicher sein, daß kein Angreifer das Paket zu Gesicht bekommt, der nicht auf einem der betroffenen Router einbricht. Die IETF denkt sich, so vielleicht sogar für manche Anwender die Notwendigkeit für die normalerweise mit VPNs assoziierte Verschlüsselung aufheben zu können, die bei hohen Datenmengen öfters zu Performanceproblemen führt. Die IETF hat außerdem eine Methode spezifiziert, wie man Labels per BGP verteilen kann (welches das im Internet zwischen Backbones und ISPs eingesetzte Routing-Protokoll ist), und so eventuelle Skalierungsprobleme mit LDP vermeiden kann.