RIP - Routing Information Protocol Version 1.
Das Routing Information Protocol (kurz: RIP), ist eines der Routing-Protokolle, welche man am häufigsten auf einem Router finden wird. Der Grund ist klar: es ist einfach zu administrieren, bietet die Möglichkeit mit verschiedenen Distance Vector Protokollen zusammen zu arbeiten und verbraucht wenig Hardware-Ressourcen.
RIP liegt aktuell in 2 Versionen vor: RIPv1 und RIPv2. Der große Unterschied ist, das RIPv2 Classless ist und, anders als RIPv1, die Subnetzmaske mit überträgt, was den Einsatz einer VLSM ermöglicht. Dieser Artikel geht nur auf das RIPv1 Protokoll ein um die Grundlagen vom Routing Information Protokoll zu verstehen.
Schauen wir uns die Eigenschaften von RIPv1 einmal an:
- RIPv1 ist ein Distance Vector Protocol
- Zur Pfad-Berechnung wird nur die Metrik und die Administrative Distanz genutzt
- Routen, welche mehr als 15 Hops besitzen, werden als 'unreachable' gesetzt
- Routing-Updates werden alle 30 Sekunden per Broadcast versendet
RIPv1 Encapsulation
Da RIPv1 auf Broadcast-Basis seine Updates verschickt, muss ein Netzwerk-Paket entsprechend gestaltet werden. Die Encapsulation setzt sich wie folgt zusammen:
Layer 2
Destination-MAC: FF-FF-FF-FF-FF-FF Source-MAC: MAC-Adresse des Exit-Interface
Layer 3
Destination-IP: 255.255.255.255 Source-IP: IP-Adresse des Exit-Interface
Layer 4
Source & Destination Port: 520
RIP-Message Inhalt
bis zu 25 outen-Einträge Command-Flag: 1 oder 2 (1 = Request; 2 = Reply)
Wird nun ein Router mit installiertem RIP gebootet läuft der Prozess des Routing-Updates folgender Maßen ab:
- RIP-Router sendet beim Startup ‚Request‘ an seine Nachbarn (Command-Flag = 1)
- RIP-Nachbarn antworten mit ‚Reply‘ (Command-Flag = 2), das sie bereit sind
- RIP-Router sendet sofort nach dem Erhalt des ‚Reply‘-Flags ein Update der eigenen Routing-Tabelle an die Nachbarn raus, um die direkt angeschlossenen netze bekannt zu geben
Konfigurationsbeispiel
Dynamisches Routing (RIP)
ROUTER(config) router rip # RIP aktivieren ROUTER(config-router)network 192.168.1.0 # alle zu routende Netze angeben, auch die passiven ROUTER(config-router)network 192.168.2.0 ROUTER(config-router)version 2 # RIP v2 wird verwendet ROUTER(config-router)default-metric 5 # Ändert die Metrik von default=15 zu 5 (nur noch 5 hops erlaubt) ROUTER(config-router)passive-interface ethernet 0 # deaktiviert auf diesem Interface die Verbreitung von Routinginformationen
RIP beenden
ROUTER(config) no router rip # RIP deaktivieren
Routing-Tabellen Einträge und Updates
Wir wissen nun, dass RIP-Router untereinander Routing-Updates versenden und ihre Routing-Tabellen austauschen. Doch wie sieht so ein Eintrag überhaupt aus und was bedeuten die Werte in der Tabelle?
Als Beispiel nehmen wir uns das Cisco IOS um die Einträge dort zu verdeutlichen. Wir geben den Befehl
R1# show ip route
ein, um uns die Routing-Tabelle auszugeben. Nun wird uns die Routing-Tabelle in folgender Form ausgegeben:
Ausgabe einer Routing-Tabelle von einem Cisco-Router
- Alle Einträge, welche mit einem R beginnen, sind unsere Routen-Einträge die mit dem RIP-Protokoll arbeiten.
- Die erste IP-Adresse in der Zeile z.B. 192.168.4.0 gibt das Netzwerk an, welches wir erreichen können.
- /24 ist das Präfix für die Anzahl der Bits für die Subnetzmaske. Bei RIP-Updates werden keine Netzmasken mit übertragen, dennoch wird die Default-Netzmaske eingetragen. Würden wir hier also VLSM anwenden und Präfixe mit z.B. /26 oder /30 nutzen, würden alle zum Default-Netz zusammen gefasst werden.
- Der Eintrag [120/1] gibt uns zum einen die Administrative Distanz (vor dem Schrägstrich) und zum anderen die Metrik an (hinter dem Schrägstrich). RIPv1 sowie RIPv2 besitzen beide eine Administrative Distanz von 120. Da die Metrik per Hop-Count berechnet wird, heißt dies also, dass dieses Netz genau 1 Hop entfernt ist (es liegt also 1 Router dazwischen).
- via 192.168.2.2 gibt uns die IP des Remote Interface an, also jene Schnittstelle, welche am Nachbar-Router hängt und von uns erreichbar ist.
- Die nachfolgende Zeit 00:00:02 sagt aus, vor wie viel Sekunden das letzte Routing-Update für diese Route empfangen wurde. Serial0/0/0 ist unser Exit Interface, über dies wir unsere Pakete senden, wenn wir in das Ziel-Netz routen möchten.
Passives Interface
Das RIP Updates alle 30 Sekunden an seine Nachbarn sendet ist schön und gut. Allerdings werden diese Updates aus allen lokalen Schnittstellen versendet. Doch was ist, wenn an einer Schnittstelle überhaupt kein weiterer Router hängt, sondern z.B. ein LAN mit einem Switch? Es wäre Problematisch, da wir dadurch Bandbreite verschwenden. Warum?
- Da das RIP-Update ein Broadcast ist, wird es vom Switch ebenfalls an alle Ports raus geschickt
- alle angeschlossenen Geräte nehmen das Paket an und müssen es erst bis auf Layer 4 entkapseln um zu sehen, das es nicht für sie bestimmt ist
Die Lösung: die Definition eines Passiven Interfaces. Wird ein solches eingetragen, wird dieses von den RIP-Updates ausgeschlossen und es werden keine Broadcasts in diese Richtung versendet.
Routing-Loops
Da RIP seine Updates periodisch alle 30 Sekunden versendet, kann es passieren das Routing-Schleifen entstehen. Dies passiert, wenn ein Netzwerk-Segment ausfällt oder entfernt wird. Der direkt angeschlossene Router (Router A) merkt, dass das Segment fehlt und setzt in seiner Tabelle die Route auf ‚unreachable‘. Da die Routing-Updates nun aber zeitversetzt versendet werden, kann es passieren das ein Nachbar-Router (Router B), welche die Route noch als erreichbar in seiner Tabelle zu stehen hat, das Update zum Router A sendet, mit der Information diese Route noch erreichen zu können. Router A trägt also in seiner Tabelle ein, das verloren gegangene Segment über Router B erreichen zu können. Soll nun ein Paket zum weg gefallenen Segment geroutet werden, schickt Router B das Paket zu Router A, weil dies der nächste Hop ist, um das Netz zu erreichen. Router A bekommt das Paket nun und will es, dank dem fehlerhaften Eintrag in seiner Tabelle zurück an Router B senden, da dieser vorher meinte das Netz noch erreichen zu können. So wird das Paket hin und her geschickt bis es verfällt.
Um dies zu umgehen, gibt es diverse „Schutz-Maßnahmen“. Diese verhindern die Entwicklung von Routing-Schleifen.
Triggered Updates
RIP bietet neben den periodischen Updates die Möglichkeit, Updates per ‚Trigger‘ zu senden. Sollte also ein bestimmtes Event eintreten, wird dieser Trigger ausgelöst und ein Update wird raus geschickt. diese Events können sein:
- ändern des Interface-Status (von 'up' nach 'down' oder umgekehrt)
- eine Route erhält den Status 'unreachable'
- es wird eine Route in die Routing-Tabelle installiert
Warum nutzt man jetzt nicht ausschließlich Triggered Updates? Nun, es können die Informations-Pakete ‚droppen‘ und somit den anderen Router nicht erreichen. Dieser würde die Information über Änderungen also nicht mitbekommen und kann so seine eigene Routing-Tabelle nicht aktualisieren.
Split-Horizon Rule
Durch die Funktion „Split-Horizon“ können ebenfalls Routing-Schleifen vermieden werden. Diese Methode ist recht einfach: Routing-Updates über bestimmte Routen werden nicht an das Interface versendet, von dem diese Information kam.
Erhält ein Router also beispielsweise über das Interface FastEthernet0/0 einen Eintrag über die Route zum Netzwerk 192.168.1.0 wird diese Route bei einem Update in Richtung des FastEthernet0/0-Interfaces nicht mit eingetragen. Somit kann also kein falscher Eintrag zum Quell-Router zurück gesendet werden.
Route Poisoning
Route Poisoning ist eine Möglichkeit um Schleifen zu vermeiden, die ihren Namen alle Ehre macht. Es baut auf die Metrik-Funktion von RIP auf. Wenn ein Router ein Netzwerk als ‚unreachable‘ einträgt, ändert die Funktion des ‚Route Poisoning‘ die Metrik auf 16, was den Effekt hat, das die maximale Hop-Anzahl überschritten ist und das Netz generell als ‚unreachable‘ gesetzt wird. Vorteil: Bei einem Routing-Update wird diese Route ebenfalls mit der Metrik 16 übertragen und alle weiteren Router tragen das Netz also ebenfalls als ‚unreachable‘ oder ‚infinity‘ in ihre Tabellen ein.
RIP Timer
Bei den dynamischen Routing-Protokollen werden gewisse Timer gesetzt. Diese bestimmten zum einen, wann ein Update geschehen muss. Unter anderem geben diese aber auch Zeitspannen an, in welchen ein Update maximal ankommen muss, bevor die Route aus der Tabelle gelöscht wird.
RIP nutzt dafür folgende Timer:
- Invalid Timer – Wird ein Update aus dem Netzwerk nach 180 Sekunden nicht empfangen, wird die Metrik auf 16 gesetzt und das Netz ist somit ‚unreachable‘
- Flush Timer – ist der Invalid Timer gesetzt, springt sofort der Flush Timer an. Dieser löscht nach 60 weiteren Sekunden (240 Sekunden gesamt) die Route aus der Tabelle (Nach 240 wird also die Route „herunter gespült“)
- Holddown Timer – der Holddown Timer hat eine Zeit von 180 Sekunden und wird in Routern auf unerreichbaren Routen gesetzt. Dieser sorgt dafür, das die Konvergenz-Zeit überbrückt wird und jeder Router von der unerreichbaren Route erfährt.
Bei Cisco-Routern sorgt der Befehl
R1# show ip protocols
dafür um die Timer- und Update-Zeiten anzeigen zu lassen.