1.6. Routing

Die Einträge in den Routingtabellen der Endsysteme und Router kann man von Hand statisch einstellen (Kommando route). Mit zunehmender Netzgröße wird das allerdings immer weniger praktikabel. Größere Netze sind meist "lebende" Gebilde, d.h., es finden ständig Änderungen der Netztopologie statt. Im einfachsten Fall werden nur Endsysteme hinzugefügt oder entfernt. Es ist aber auch mit Ausfällen von Routern oder Leitungen zu rechnen, was eine Umgehung der "Fehlerstelle" erfordert.

Mittlerweile gibt es Routing-Protokolle, die eine (mehr oder weniger) selbsttätige dynamische Einstellung des Routings vornehmen. Dabei unterscheidet sich die Verfahrensweise innerhalb eines Verantwortungsbereichs (Intradomain) und zwischen den Verantwortungsbereichen verschiedener Netzbetreiber (Interdomain).

Die verbreitetsten Intradomain-Routing-Protokolle sind:

Im Interdomain-Bereich (zwischen verschiedenen Verantwortungsbereichen) sind üblich:

RIP

Das RIP-Protokoll wurde im Rahmen des BSD-Unix-Projekts zur Koordinierung des Routings in lokalen Netzen entwickelt. Es hat gemeinsame Wurzeln mit dem im Novell-Netware verwendeten RIP.

Die Systeme am Netz werden zunächst in zwei Gruppen eingeteilt:

Eine RIP-Nachricht wird mit Hilfe des Transportprotokolls UDP transportiert (Port 520) und hat folgenden Aufbau:

Kommando (REQUEST/RESPONSE)
Version des Protokolls
Adreßfamilie (0 - unbekannt, 2 - IP)
IP-Adresse
Metrik (1...16)

Unter der Metrik versteht man ein Maß für die Brauchbarkeit einer Route. In diesem Fall wird die Anzahl der zu durchlaufenden Router als ein solches Maß verwendet (je weniger, desto besser). Daher spricht man bei RIP von einer Hop-Metrik bzw. einem Distanz-Vektor-Verfahren.

Da es auch sein kann, daß ein Ziel überhaupt nicht erreichbar ist, braucht man eine Metrik für "unendlich weit entfernt". Bei RIP wurde der Wert 16 dafür reserviert; RIP ist damit nur für Teilnetze brauchbar, die höchstens 15 Router in einem Weg enthalten.

Das RIP-Protokoll läuft so ab:

  1. Beim Router-Neustart wird ein RIP-REQUEST mit der Adreßfamilie = 0 auf allen Interfaces als Broadcast abgeschickt. Auf diese Weise wird die Routingtabelle aller Nachbarn angefordert.
  2. Alle 30 Sekunden wird ein Router seine komplette Routinginformation an alle Nachbarn schicken.
  3. Eine gezielte Routen-Anforderung ist ebenfalls möglich (dann mit Adreßfamilie = 2).
  4. Da sich die Netztopologie ändern kann, müssen "alte" Routingeinträge nach einer gewissen Zeit (3 min) "vergessen" werden.
Ein Ablaufbeispiel für RIP wollen wir uns für den Fall ansehen, daß drei Netze durch zwei Router miteinander verbunden sind:

Im ersten RIP-Zyklus werden die im Bild dargestellten Nachrichten verschickt, d.h., alle Rechner und Router am Netz N2 wissen nun, wie sie N1 und N3 erreichen (beide Netze sind "einen Hop" entfernt). Ein Rechner an N1 hat allerdings zu diesem Zeitpunkt noch nichts von N3 gehört (und folglich auch keine Route dahin).

Die beiden Router haben allerdings ihre Nachrichten gegenseitig "gehört" und können beim nächsten RIP-Zyklus auch die Netze N1 und N3 mit Informationen über die gegenseitige Erreichbarkeit versorgen:

Wir sehen, daß mehrere Zyklen vergehen, bis die Routinginformationen alle Teile des Netzes erreicht haben. Noch ungünstiger ist das Verhalten, wenn Netzverbindungen ausfallen und Routen ungültig werden:

Gute Nachrichten verbreiten sich schneller als schlechte Nachrichten.
An dieser Stelle sei auch daran erinnert, daß Protokolle mit zyklischem Sendeverhalten ungeeignet für Wählleitungen sind. Die Wählleitung würde auch ohne "Nutzverkehr" ständig wieder aufgebaut (oder gar nicht erst abgebaut), was Sie schnell an der Telefonrechnung merken würden.

OSPF

Eine Protokoll-Neuentwicklung unter dem Namen OSPF - Open Shortest Path First soll die Nachteile von RIP beheben, die sich so zusammenfassen lassen: Der Kerngedanke bei OSPF besteht dabei darin, daß nicht mehr nur die "Entfernung" in Hops ausgetauscht wird, sondern die komplette Information über die Netztopologie (link states), vergleichbar mit einer Straßenkarte (in die alle Baustellen, Sperrungen und Umleitungen eingezeichnet sind!).
Wegen des Umfangs dieser Informationen muß man eine hierarchische Strukturierung für einzelne Netzbereiche (areas) vornehmen (vergleichbar mit Stadtplan, Regionalkarte, ... ).

Ein link state enthält folgende Informationen zu einem Router-Interface:

Bei OSPF gibt es folgende Abläufe: Für die Routenberechnung müssen zunächst die Knoten (Router) und die Pfade (Leitungen) dazwischen bekannt sein. Dann wird jeder Pfad mit einer "Wichtung" versehen, wobei hier größere Zahlen für größere "Distanzen" (kleinere Bandbreite ...) stehen. Hier ein Beispiel:

Nun kann man nach dem Dijsktra-Algorithmus die Routingtabellen ausrechnen (lassen). Jeder Router braucht natürlich nur "seine" Routingtabelle zu ermitteln. Für jedes Ziel erhalten wir den nächsten Router und die "Distanz" als Summe der Pfad-Gewichte, zum Beispiel für Knoten B:

    D: D 3
    E: E 3
    A: C 4
    C: C 2
Wir sehen übrigens, daß manche Pfade ungenutzt bleiben (hier der zwischen A und B).

Die Netzbereiche (areas) werden mit Zahlen identifiziert. Wenn mehrere solche Bereiche OSPF nutzen wollen, können sie nicht beliebig vermascht, sondern dürfen nur über einen Backbone-Bereich ("area 0") miteinander verbunden sein.

Eine neue Forderung an Routingprotokolle ist die Robustheit gegenüber absichtlichen Störungen (z.B. der Einspeisung fehlerhafter Routinginformationen, um die Nutzdaten auf "Abwege" zu bringen). OSPF enthält Möglichkeiten zur Authentifizierung von Routinginformationen (hier sei auch auf das spätere Kapitel "Netzwerk-Sicherheit" verwiesen).

Die Detailspezifikation von OSPF Version 2 ist in RFC 2178 zu finden.


Vertiefung:

Bei der Entscheidung über einzusetzende Routing-Verfahren spielen nicht nur die in diesem Abschnitt erläuterten funktionellen Eigenschaften eine Rolle. Zu prüfen ist auch, welche Verfahren überhaupt in den Routern des betrachteten Netzes implementiert sind. Bei dedizierten Routern (d.h. Spezialgeräten, die für genau diesen Zweck hergestellt werden) wird sicher die Spezifikation ausreichend Auskunft geben.

Gelegentlich werden aber auch "Universalrechner" mit mehreren Netzwerkschnittstellen als Router eingesetzt (z.B. für Experimente mit neuen Routing-Verfahren). Die Weiterleitung der IP-Pakete (packet forwarding) wird in diesem Fall üblicherweise vom Betriebssystemkern vorgenommen (Linux, Windows NT). Ohne weitere Vorkehrungen ist so nur ein statisches Routing möglich. Für die Realisierung der dynamischen Routing-Verfahren sind üblicherweise separate (Server-)Prozesse zuständig. Für Unix/Linux gibt es u.a. folgende:

Die oben verwendete Routenberechnung können Sie auch selbst nachvollziehen, wenn Sie einen Interpreter für die Skriptsprache TCL/TK haben (bei Linux fast immer mit dabei). Der Aufruf erfolgt z.B. so:
  % wish route.tk


© Uwe Hübner, 20.12.98