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:
Da RIPv1 auf Broadcast-Basis seine Updates verschickt, muss ein Netzwerk-Paket entsprechend gestaltet werden. Die Encapsulation setzt sich wie folgt zusammen:
Destination-MAC: FF-FF-FF-FF-FF-FF Source-MAC: MAC-Adresse des Exit-Interface
Destination-IP: 255.255.255.255 Source-IP: IP-Adresse des Exit-Interface
Source & Destination Port: 520
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:
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
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:
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?
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.
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.
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:
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.
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 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.
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:
Bei Cisco-Routern sorgt der Befehl
R1# show ip protocols
dafür um die Timer- und Update-Zeiten anzeigen zu lassen.