Users/akaiser/handout ip-Routing.abw

Werbung
IP Routing, Traceroute
Willem Bleymüller, Alexander Kaiser
Direktes und Indirektes Routing
Hierzu betrachten wir zwei einfache Beispiele: 1. Zwei Rechner (Hosts) H1 und H2 befinden sich im gleichen Subnetz. In diesem Fall
können die Rechner direkt miteinander kommunizieren, also Datagrams untereinander austauschen. Der sendende Rechner (H1)
kapselt das Datagram in einen sog. Hardwareframe ein. In diesem Hardwareframe befindet sich die Hardwareadresse des
empfangenden Rechners (H2), die via ARP ermittelt wurde. Nun sendet H1 das Hardwareframe über sein Netzwerkinterface direkt an
H2. In diesem Fall sprechen wir von direktem Routing. Dasselbe gilt auch für den Fall wenn ein Router das Datagram direkt an einen
Host weiterleiten kann.
2. Zwei Rechner (Hosts) H1 und H2 befinden sich in zwei unterschiedlichen, durch Router verbundenen Subnetzten. Bei einem Router
handelt es sich genaugenommen um einen Rechner, der allerdings mindestens zwei Netzwerkinterfaces besitzt. Jedes Interfaces
befindet sich in einem anderen Subnetz. Im einfachsten Fall sind zwei Rechner direkt mit einem Router verbunden. Die gesendeten
Datagrams werden jetzt nichtmehr direkt von H1 an H2 versandt, sondern werden zunächst von H1 zum Router gesendet. Der Router
versucht nun die Hardwareadresse des Zielhosts aufzulösen um das Datagram zuzustellen. Es bestehen also 2 direkte Verbindungen;
die eine von H1 zum Router, die andere vom Router zu H2. Die Verbindung von H1 zu H2 ist somit indirekt, man spricht auch von
"indirektem Routing".
Was ist ein Router?
Sowohl ein Host wie auch ein Router ist ein vollwertige Rechner. Alle Rechner in einem Netzwerk enthalten eine Tabelle, in der
Routen zu anderen Rechnern und Netzen festgelegt sind. Ein Router hat allerdings eine andere Funktion wie ein normaler Host.
Während auf einem Host Endanwendungen laufen, die Daten versenden oder empfangen um sie weiterzuverarbeiten, soll ein Router
diese Datagrams nur weiterleiten. Die einzige Ausnahme stellen Daten für routerinterne Dienste wie z.B. dynamische
Routingprotokolle dar. Ausserdem muss ein Router im Gegensatz zu einem Host immer mindestens zwei Netzwerkschnitstellen
besitzen, mit denen er Teile des gesamten Netzwerk verbindet. Allgemein ist ein Host also ein Endpunkt eines Netzes und ein Router
ein Knotenpunkt. Man unterscheidet Router zusätzlich in zwei Typen. Von einem Gateway spricht man, wenn es sich um einen Router
mit Netzwerkschnitstellen des gleichen Hardwaretypen (z.B. ethernet-ethernet) handelt. Alles Andere wird einfach nur "Router"
genannt.
Ein Router funktioniert ähnlich wie ein "Switch", es gibt jedoch grundsätzliche Unterschiede zwischen Router und Switch:
1. Während ein Switch auf Layer 2 des OSI 7 Schichtenmodell arbeitet, ist ein Router auf Layer 3 einzuordnen. Das bedeutet,
dass ein Router den Weg für ein Datagram nicht anhand der Hardwareadresse bestimmt, sonder anhand der IP-Adresse im
Header. Deshalb können Router auch Netze mit Verschiedenen Hardwaretypen verbinden. (z.B. lokales ethernet und internet
via ISDN).
2. Ein Router besitzt wie ein Switch eine Tabelle in der die Adressen für die Weiterleitung von Datagrams festgehalten werden.
Der Router kann die Adressen der Subnetze allerdings nicht selber herausfinden, er muss über Routingtabellen manuell
konfiguriert werden, damit eine sinvolle Route für die Datagrams gewährleistet wird.
Auswahl der Route für ein Datagram
Die Wahl des Weges, den ein Datagram in einem Router nimmt, kann auf verschiedene Arten geschehen:
1. Setzen eines einzigen Tabelleneintrag (Default Routing).
2. Setzen von Einträgen für alle Subnetze (Statisches Routing)
3. Automatisches setzen der Einträge durch ein spezielle Routingmechanismen (Dynamisches Routing)
Default Routing
Bei dieser Methode des Routings werden alle Pakete, die nicht lokal versendet werden können, an einen Router weitergeleitet. Dieser
Router entscheidet dann, wie die Pakete weitergeleitet werden. Sinnvoll ist diese Methode für Netze, an denen nur ein Router
angeschlossen ist. Der einzige Weg zu anderen Netzen führt dann sowieso über diesen einzelnen Router.
Statisches Routing
Diese Methode des Routings impliziert eine Routingtabelle in die verschiedene Einträge für verschiedene Netze oder einzelne Hosts
geschrieben werden. Jeder Eintrag muss eindeutig sein, da sonst Datagrams dupliziert werden könnten, was auf jeden Fall vermieden
werden muss. Da die Einträge immer gleich sind, bedeutete der Ausfall eines Routers, dass das Netz hinter ihm nicht mehr erreichbar
wäre. Mann müsste die Routingtabellen aller verbliebenen Hosts/Router manuell umschreiben und einen Ersatzrouter angeben, damit
das Netz wieder erreichbar wird. Der damit verbundene Aufwand wäre sehr hoch.
Dynamisches Routing
Dynamisches Routing gibt es sowohl bei Routern als auch bei Hosts. Diese Funktion vermeidet auf die in der Sektion "Statisches
Routing" angegebenen Probleme der Erreichbarkeit beim Ausfall eines Routers. Die Routingtabellen weerden hierbei automatisch
aktualisiert.
Da Router eine anderer Funktion haben als Hosts, muss man hier eine Fallunterscheidung machen.
Hosts können vom Router sog. "Router Advertising Mitteilungen" erhalten. Diese Mitteilungen enthalten Informationen, welche Netze
oder Hosts über den jeweiligen Router erreichbar sind. Die Router senden diese Informationen periodisch nach einer festgelegten Zeit.
Wenn ein Router über eine längere Zeit keine "Router Advertising Mitteilung" sendet, weil er z.B. ausgefallen ist, wird dieser Router
aus der Routingtabelle des Hosts gelöscht und der Host benutzt einen anderen Router der zum gleichen Ziel führt. Da die
Routingalgorithmen der Hosts so ausgelegt sind, dass sie immer den Router wählen, der für ein Ziel zuerst in der Tabelle eingetragen
ist, kann es vorkommen, dass der Host einen ungünstigen Weg ermittelt. In diesem Fall kann der zu benutzende Router eine ICMP
Redirect Message verschicken, der den Host anweist für sein Ziel demnächst einen anderen Router zu verwenden.
Bsp: Wir haben zwei Router R1 (124.44.55.1) und R2 (124.44.55.2) die ein Advertising für das gleiche Zielnetz
(123.33.44.0/255.255.255.0) schicken. Der Eintrag in der Routingtabelle des Host dürfte dann so aussehen:
Destination
Gateway
Genmask
Iface
123.33.44.0
124.44.55.1
255.255.255.0
eth0
123.33.44.0
124.44.55.2
255.255.255.0
eth0
R2 kennt nun aber den schnelleren Weg zu diesem Ziel, trotzdem würde der Host alle Pakete an sein Ziel über R1 senden, da dieser
zuerst in der Routingtabelle steht. Wenn R1 aber ein Datagram für das Netz empfängt und "weiss", dass R2 einen schnelleren Weg
findet, so wird er an den Host eine Redirect Message schicken und seine Routingtabelle ändern.
Für Router sind solche einfachen Mechanismen nicht ausreichend, da sie z.B. keine Informationen über Qualitätsfaktoren wie z.B.
Geschwindigkeit oder Anzahl der zwischen diesem und dem entfernten Netz liegenden Routern beinhalten. Deshalb benutzen Router
spezielle Routingprotokolle mit denen sie untereinander Informationen über eben solche Qualitätsfaktoren austauschen. Eine wichtige
Information für solche Routingprotokolle ist das sog. "Metric Feld". Je höher die "Metric" eines Netzes, desto schlechter ist die
Verbindung zu diesem Netz. Router, die ein solches Routingprotokoll benutzt, wählen auf jeden Fall immer den Weg, der den
niedrigeren Metric-Wert besitzt.
Destination
Gateway
Genmask
Metric
Iface
123.33.44.0
124.54.5.2
255.255.255.0
3
ppp0
123.33.44.0
153.64.6.6
255.255.255.0
6
arc0
123.33.44.0
163.32.79.8
255.255.255.0
2
eth1
Der Router würde auf jeden Fall das Ethernet-Interface eth1 benutzen, da dieses den geringsten Metric-Wert hat. In diesem Beispiel
sehen wir auch, dass ein Router mehrere Interfaces verschiedener Hardwaretypen besitzen kann (z.B. arc0 für arcnet und ppp0 für eine
Point-to-Point Verbindung).
Auch bei Routing-Protokollen ist ein periodischer Datenaustausch zwischen den Routern dringend erforderlich. Auf den Routern
laufen Programme, die diese Informationen auswerten und die Routingtabelle dementsprechend ändern. Diese Programme benutzen
teilweise sehr aufwendige Algorithmen zur Bestimmung optimaler Routen (z.B. um zu vermeiden, dass es zu "Routing Loops", also
Endlos-Schleifen kommt) .
Funktion der Routingalgorithmen
Da ein Router mehrere Einträge in seinen Routingtabellen hat, muss er bei einem ankommenden Datagram erstmal ermitteln, auf
welchem Interface es weiterlgeleitet werden soll. Das geschieht vereinfacht nach folgendem Algorithmus:
-
-
-
Ein Paket kommt an
Erst wird die Zieladresse D des Datagrams extrahiert und das Netzwerk-Fräfix N durch logische AND-Verknüpfung ermittelt.
z.B. D={IP=192.168.100.100 Netmask=255.255.255.0} bedeutet N=192.168.100.0
Wenn N einem direkt angeschlossenen Netzwerk entspricht, schicken wir das Paket direkt auf dem entsprechenden Interface
raus . z.B. Ethernet-Interface eth0 mit der IP 192.168.100.1 und der Netmask 255.255.255.0. Durch logische ANDVerknüpfung erhalten wir auch hier ein Netzwerkprefix von 192.168.100.0. Wir sind also direkt verbunden. Das Paket wird
dann in einen Ethernet-Hardwareframe verpackt und mit der Hardwareadresse des Ziels versehen. Jetzt schicken wir es auf
eth0 raus.
Ansonsten schauen wir in der Routingtabelle, ob es einen direkten Eintrag für den Host D gibt; ist das der Fall, ermitteln wir
das Interface auf dem wir das Paket weitersenden müssen. Danach ermitteln wir die Hardwareadresse des nächsten
Knotenpunkts (HOP), packen das Datagram in einem Hardwareframe und schicken es auf dem Interface zum nächsten HOP
raus.
Ansonsten schauen wir, ob es einen Eintrag in der Routingtabelle für das Netzprefix N gibt und schicken es gegebenenfalls
nach der gleichen Prozedur wie oben raus.
Wenn wir bis jetzt das Paket nicht versenden konnten, schauen wir, ob es in der Routingtabelle einen Defaultgateway gibt.
Wenn wir einen finden, ermitteln wir die Hardwareadresse des Defaultgateways und schicken das Paket dementsprechen raus.
Wir sind am Ende angelangt und konnten kein Ziel für das Paket finden. Das bedeuted, dass wir einen Routing-Error
produzieren müssen, und das Paket nicht weiterleiten können.
Das obere Schema zeigt eine weitere Funktion von Routern. Da Router in verschiedenen Netzen arbeiten und das Ziel in einem Netz
anhand der Hardwareadresse bestimmt wird, ändert der sog. "Routing-Code" während das Datagram den Router durchläuft dessen
Hardwareadresse. Er packt das Datagram aus seinem bisherigen Hardwareframe aus und verpasst ihm einen Neuen. Ausserdem
verringert jeder Router die TTL des Pakets um 1 (wenn die TTL=0 ist, wird ein ICMP-Fehler an den sendenden Host zurückgegeben
und das Paket gelöscht).
Heutzutage würde es aber mehrere Probleme geben, wenn man den Routing-Code nur nach obigen Schema implementieren würde.
Zum einen sind sehr viele Router direkt durch "Leased Lines" (z.B. T1) verbunden. Diese Netzwerkschnitstellen besitzen kein eigenes
IP-Subnetz, da es für zwei Netzwerkschnitstellen in einem Netzwerk eine reine Verschwendung wäre. Die Lösung für dieses Problem
ist prinzipiell einfach, man benötigt für so eine "Leased Line" eigentlich weder IP- noch Hardwareadresse des entfernten Routers, da
man ja sowieso nur einen Rechner ansprechen will. Es wird aber trotzdem eine IP-Adresse (z.B. die IP einer anderen
Netzwerkschnitstelle des entfernten Rechners) angegeben, weil die Routingtabelle für Menschen somit leichter verständlich ist.
Ein viel komplexeres Problem ist das "Classless Networking" (CIDR) oder auch "Superneting-Prinzip". Hierbei werden z.B. Firmen
einfach Teilen einer Netzwerkklasse zugeteilt. So beschreibt beispielsweise das Netzwerk 192.168.1.0/3 die drei Klass-C-Netzwerke
192.168.1.0, 192.168.2.0 und 192.168.3.0. Wenn sich diese drei Netzwerke alle hinter einem Router befinden, kann man mit dem
oben genannten Algorithmus nicht mehr das Netzprefix N bestimmen. Der einfachste Weg, trotzdem Netzwerkprefixe zu verwenden
greift auf sog. "unique Prefixes", Anfänge der Netzadresse in binärschreibweise, die der Routingtabelle zugefügt werden. Die obige
Routingtabelle sähe dann in etwa so aus:
110
010
011
eth0
eth1
eth2
Wenn wir ein Paket erhalten, setzen wir die IP-Adresse einfach in binärschreibweise um. Die IP-Adresse 192.168.0.20 wird dann
beispielsweise zu 11000000 01101000 00000000 00010100.
Die einfachste Möglichkeit jetzt das Ziel zu bestimmen, wäre die gesamten 32 Bit einer Adresse mit der Routingtabelle zu vergleichen.
Wenn wir keinen Eintrag fänden müssten wir 31 Bit der Adresse vergleichen, usw. bis 0 Bit. Wenn wir dann immer noch nichts
gefunden haben müssten wir einen "Routing Error" melden. Im Beispiel finden wir eine Route wenn wir die letzten 3 Bit vergleichen.
Da das Verfahren aber sehr ineffizient ist, hat man andere Verfahren entwickelt.
Eine bessere Lösung ist ein Binärbaum:
Man beginnt mit der Suche bei der Wurzel und hätte in unserem Fall nach drei Zweigen einen möglichen Eintrag. Die äusseren
Einträge des Binärbaums müssten aber jeweils die 32Bit für die IP A und die 32 Bit für die Netzmaske M enthalten. Wenn wir am
Ende eines Zweiges sind, verknüpfen wir die Netzmaske M mit der IP des Pakets durch ein logische AND und schauen, ob sie der IP
A entspricht. Ist das der Fall, haben wir eine Route gefunden, ansonsten melden wir einen "Routing Error". Das Verfahren ist also
nicht geeignet, um exakte Routen, sondern nur um möglich Routen zu finden.
Anzeigen von Routen
Da kein Router im Internet über genügend Netzwerkschnitstellen verfügt, dass er mit jedem anderen Subnetz auf der Welt direkt
verbunden ist, kommt es vor, dass ein Datagram bei der Übertragung zwischen zwei Hosts mehrere Router passiert. In der
Routingtabelle des mit dem sendenden Host verbundenen Router ist dann ein anderer Router eingetragen, der weiss, wo das Datagram
weitergeleitet werden muss. Bis das Datagram den zum Empfang bestimmte Host erreicht, kann es so durch viele Subnetze verschickt
worden sein.
Man kann den Weg von einem Host zu einem Anderen mit Hilfe des Traceroute-Programms (bzw. tracert unter Windows)
zurückverfolgen. Das Programm arbeitet auf folgende Weise: Der sendende Host schickt jeweils drei UDP Pakete mit gleicher TTL
und einem Port > 30000 an das Ziel. Die TTL enthält zu Beginn den Wert 1 und wird nach jedem dritten Paket um 1 inkrementiert bis
das Paket alle HOPs durchläuft und das Ziel erreicht. Wenn ein Router das Paket erhält und die TTL von 1 auf 0 setzt, sendet er die
ICMP-Meldung 11 zurück. Bei jeder empfangenen ICMP Meldung wird die "Round Trip Time" (RTT, siehe Ping) berechnet. Ist sie
grösser als 5 Sekunden wird ein "*" für "Time Out" ausgegeben. Falls die TTL am ende groß genug ist um den Zielhost zu erreichen,
wird die ICMP-Meldung 3 zurückgesendet, da ein port > 30000 nicht exestiert. So weiss der sendende Computer, wann das Paket sein
Ziel erreicht hat.
Traceroute Bsp:
willem@penguin $ traceroute www.techfak.uni-bielefeld.de
traceroute to www.techfak.uni-bielefeld.de (129.70.136.200), 30 hops max, 40 byte Pakets
1 www (192.168.100.100) 0.523 ms 0.581 ms 0.135 ms
2 217.5.98.88 (217.5.98.88) 65.602 ms 60.748 ms 60.913 ms
3 217.237.152.226 (217.237.152.226) 62.266 ms 59.568 ms 60.924 ms
4 H-EB1.H.DE.net.dtag.de (62.154.49.134) 62.733 ms 62.386 ms 60.652 ms
5 ir-hannover2-po1-0.g-win.dfn.de (188.1.62.1) 60.954 ms 61.567 ms 63.238 ms
6 cr-hannover1-ge5-0.g-win.dfn.de (188.1.88.61) 60.900 ms 60.934 ms 63.157 ms
7 cr-hamburg1-po3-2.g-win.dfn.de (188.1.18.177) 76.176 ms 73.206 ms 84.751 ms
8 cr-essen1-po3-3.g-win.dfn.de (188.1.18.229) 75.204 ms 73.269 ms 71.890 ms
9 ar-bielefeld1-po5-0.g-win.dfn.de (188.1.86.78) 76.175 ms 78.358 ms 76.878 ms
10 v01-cat6500-2-msfc.hrz.uni-bielefeld.de (129.70.189.4) 75.863 ms 75.994 ms 77.002 ms
11
*
12 www.TechFak.Uni-Bielefeld.DE (129.70.136.200) 79.622 ms 76.219 ms 77.248 ms
Herunterladen