so, monsterabend ist durch und ich kann mir etwas mehr zeit nehmen...
das wichtigste ist: das ip-paket weiss nicht wohin. das paket selber ist dumm. klug ist erst das netzwerk selber, genauer gesagt die router.
ein router verbindet immer mehrere netze miteinander. im kleinen fall ist das zB das WLAN auf der einen Seite, das Netz zwischen Provider und Router auf der anderen. Im grossen Fall sind dies einige Satellitenlinks zu anderen Core-Router. Die Netzwerkkarten des Routers in die einzelnen Netze werden als Interfaces bezeichnet.
Ein Router alleine weiss immer nur, welche IP-Adressen in denjenigen Netzen ansprechbar sind, in welchen er ein Interface hat. Aber zu diesen erreichbaren IP-Adressen gehören auch die Interfaces anderer Router, und mit diesen kommuniziert er über die Routingprotokolle. Diese Protokolle ermöglichen es, dass ein Router erfährt, welche Netze seine Nachbarn bedienen, und welche Netze wiederum von deren Nachbarn usw. bedient werden. Am Schluss weiss ein Router, über welche Interfaces welche IP-Adressen wie schnell erreicht werden können - und zwar weiss er dies für _sämtliche_ IP-Adressen im ganzen Netz.
Natürlich wäre es unmöglich, auf den Routern eine Tabelle mit sämtlichen IP-Adressen und den entsprechenden Interfaces zu führen, und da kommt nun der grosse Vorteil der Logischen Gruppierung von IP-Adressen in Netze und Subnetze zu gute.
Für das folgende Beispiel habe ich ein JPG eines kleinen Pseudo-Netzwerkes angehängt, um das folgende zu verstehen, sollte man es wohl in einem anderen Fenster parallel offen halten. Also:
In einem ersten Schritt, kennt jeder Router sämtliche Weg zu den direkt an ihm angeschlossenen Netzen. Daher gibt es folgende Routing-Tabellen
Router A
Erreicht 10.0.1.0-255 über das Interface A1 in einem Schritt
Erreicht 10.0.3.1-2 über das Interface A2 in einem Schritt
Erreicht 10.1.1.1-2 über das Interface A3 in einem Schritt
Router B
Erreicht 10.0.2.0-255 über das Interface B1 in einem Schritt
Erreicht 10.0.3.1-2 über das Interface B2 in einem Schritt
Erreicht 10.1.2.1-2 über das Interface B3 in einem Schritt
Router C
10.1.2.1-2 über Int C1 in einem Schritt
10.3.2.1-2 über Int C2 in einem Schritt
10.2.0.1-2 über Int C3 in einem Schritt
Router D
10.4.2.1-255 über Int D1 in einem Schritt
10.4.3.1-2 über Int D2 in einem Schritt
10.3.2.1-2 über Int D3 in einem Schritt
Router E
10.4.1.1-255 über Int E1 in einem Schritt
10.4.3.1-2 über Int E2 in einem Schritt
10.3.1.1-2 über Int E3 in einem Schritt
Router F
10.1.1.1-2 über Int F1 in einem Schritt
10.3.1.1-2 über Int F2 in einem Schritt
10.2.0.1-2 über Int F3 in einem Schritt
Schritt 2
Nun beginnt das Routingprotokoll zu arbeiten. Der Einfachheit halber beschränken wir uns auf das gute alte RIP. Jeder Router teilt seinen Nachbarn mit, welche Netze er über wieviele Schritte erreicht. Sofern ein Router dadurch Kenntnis von einem Netz erhält, welches er noch nicht kennt nimmt er dieses in seine Routing-Tabelle auf. Das Interface, über welcher er die neuen Netze erreicht ist natürlich jenes, an welchem der entsprechende Nachbar angeschlossen ist, die Anzahl benötigter Schritte, ist die Anzahl der vom Nachbarn benötigte Schritte plus dem Schritt zum Nachbarn.
Router A erhält die Informationen von den Routern B und F. Seine Routing-Tabelle umfasst neu:
1) 10.0.1.0-255 über A1 in 1 Hop
2) 10.0.3.1-2 über A2 in 1 Hop
3) 10.1.1.1-2 über A3 in 1 Hop
4) 10.0.2.0-255 über A2 in 2 Hops
5) 10.0.3.1-2 über A2 in 2 Hops
6) 10.1.2.1-2 über A2 in 2 Hops
7) 10.1.1.1-2 über A3 in 2 Hops
8) 10.3.1.1-2 über A3 in 2 Hops
9) 10.2.0.1-2 über A3 in 2 Hops
Augenmerk gilt dabei auf die Zeilen 5 und 7 - diese beiden Netze kennt Router A ja schon selber, und zwar aus den Zeilen 2 und 3. Diese Einträge sind logischerweise die besseren, da die Packete über dasselbe Interface versendet, schneller (1 statt 2 Hops) am Ziel sind. Diese Zeilen werden daher gelöscht.
Wenn alle Router mit ihren Nachbarn gesprochen haben, sieht die Situation wie folgt aus:
Router A
10.0.1.0-255 über A1 in 1 Hop
10.0.2.0-255 über A2 in 2 Hops
10.0.3.1-2 über A2 in 1 Hop
10.1.1.1-2 über A3 in 1 Hop
10.1.2.1-2 über A2 in 2 Hops
10.2.0.1-2 über A3 in 2 Hops
10.3.1.1-2 über A3 in 2 Hops
Router B lernt von Router A und C:
10.0.1.0-255 über B2 in 2 Hops
10.0.2.0-255 über B1 in 1 Hop
10.0.3.1-2 über B2 in 1 Hop
10.1.1.1-2 über B2 in 2 Hops
10.1.2.1-2 über B3 in 1 Hop
10.2.0.1-2 über B3 in 2 Hops
10.3.2.1-2 über B3 in 2 Hops
Router C lernt von Router B, D und F
10.0.2.0-255 über C1 in 2 Hop
10.0.3.1-2 über C1 in 2 Hop
10.1.1.1-2 über C3 in 2 Hop
10.1.2.1-2 über C1 in 1 Hop
10.2.0.1-2 über C3 in 1 Hop
10.3.1.1-2 über C3 in 2 Hop
10.3.2.1-2 über C2 in 1 Hop
10.4.2.1-255 über C2 in 2 Hop
10.4.3.1-2 über C2 in 2 Hop
usw, mir wird das ganze in diesem Moment zu mühsam, aber ich glaube, es ist klar, worauf es hinausläuft. Das wichtige ist nun, dass jeder Router diese neue Tabelle nun ebenfalls wieder an seine Nachbarn weitergibt und diese erneut ihre Tabellen anpassen.
Ich verfolge nun einmal nur das Wissen um Netz 1 (an Router A):
Im ersten Schritt weiss nur Router A davon, und zwar, dass er es über A1 in einem Hop erreicht
Im zweiten Schritt haben folgende Router folgende Einträge zum Netz 1:
Router A: Über A1; 1 Hop
Router F: Über F1; 2 Hops
Router B: Über B2; 2 Hops
Diese sagen das nun auch weiter, so dass im dritten Schritt folgende Router folgende Einträge haben;
Router A: Über A1; 1 Hop
Router F: Über F1; 2 Hops
Router B: Über B2; 2 Hops
Router E: Über E3; 3 Hops
Und Router C? Der erhält die Meldung gleich von zwei Seiten. Über C3 erreicht er es in 3 Hops, ebenso über C1.
Was er nun mit diesem Wissen macht, ist ganz unterschiedlich, je nach Routing-Protokoll. Erst einmal muss er auswählen, welche Verbindung denn nun aktuell die bessere ist. Alte Protokolle gehen da von Kriterien wie dem Interface mit der tiefsten IP-Adresse aus (in diesem Falle C1). Andere überprüfen, wie schnell und breit eine Leitung ist, und würden zum Beispiel den Link vorziehen, der über Ethernet und nicht über Modem führt. Für diese Entscheidung gibt es sehr unterschiedliche Grundlagen.
Noch grösser ist der Unterschied, was der Router mit dem langsameren Link macht. In RIP verwirft er dieses Wissen einfach - das Netz 1 ist einfach über ein Interface zu erreichen. Neuere Protokolle wie OSPF oder BGP sind da etwas vorsichtiger - auch sie leiten zwar allen Traffic sagen wir mal über C2, behalten aber im Hinterkopf, dass auch C3 zum Ziel führt. Wenn nun der Link über C2 aus irgendeinem Grund ausfällt, haben sie sehr schnell allen Traffic über C3 umgeleitet. RIP hingegen muss in diesem Fall erst mal warten, bis der Router C begriffen hat, dass er vom Router B2 schon lange nichts mehr gehört hat, und der Link über C2 nun wohl nicht mehr so aktuell ist. Und dann muss er noch warten, bis ihm der Router F das nächste Mal von dessen Routing-Tabelle erzählt, damit er die Verbindung über C3 wieder aufnehmen kann.
Bleiben wir aber beim RIP und sagen einmal, dass der Router C nur einen Eintrag führt, und zwar den über C2 mit 3 Hops.
Nun im vierten Schritt erzählen wiederum alle Router allen anderen von ihrem Wissen.
Router A: Über A1; 1 Hop
Router F: Über F1; 2 Hops
Router B: Über B2; 2 Hops
Router E: Über E3; 3 Hops
Router C: Über C2; 3 Hops
Router D: Über D2 resp D3 (gleiche Entscheidung wie oben) mit 4 Hops.
Aber Hoppla, da geschieht doch noch mehr. Denn der Router C hat unter anderem auch den Routern B und F mitgeteilt, dass er das Netz über 3 Hops sieht. Diese Router wissen nun also, dass sie das Netz 1 in 4 Hops über die Interfaces B3 resp. F3 erreichen könnten. Jedoch haben sie bereits einen Eintrag in ihrer Routing-Tabelle, welcher das Netz in weniger Hops erreicht, nämlich auf dem geraden Weg über B2 resp. F1.
Auch hier ist wieder Protokoll-Abhängig, was die Router mit dem Wissen über den zusätzlichen, aber langsameren Link anfangen. RIP verwirft und hält damit die Routingtabelle frei von Ballast, OSPF und BGP behalten und sind damit für einen Ausfall gewappnet.
Auch der Router D wird im nächsten Schritt den Routern E und C mitteilen, dass er das Netz 1 kennt. Aber das wird die beiden ziemlich kalt lassen, denn statt Packete an dieses Netz über den Router D zu schicken, wo es 5 Hops benötigt, um ins Zielnetz zu kommen, verschicken sie es lieber gleich direkt mit nur 3 Hops.
So, nun wissen also alle Router, wo das Netz 1 liegt, genauso wie sie auch wissen (auch wenn wir dies nicht verfolgt haben), über welche Interfaces sie Packete verschicken müssen, die in die Netze 2-4 adressiert sind.
Das wichtige bei der ganzen Sache: Im Internet, wo sehr viel noch auf RIP basiert, wissen die Router jeweils nicht, wo ein Netz denn nun genau liegt. Das einzige was sie wissen, ist, über welches Interface sie ein Packet verschicken müssen, wenn es in einem bestimmten Subnetz liegt. Denn das ist eigentlich auch das einzige was sie wissen müssen, zumindest in einem idealen Netzwerk.
Wenn ein Client im Netz 4 eine Anfrage an den Server im Netz 1 hat, und das Paket faut-de-mieux mal an seinen Default-Gateway schickt, muss dieser nur wissen, auf welchem Interface er dieses weitergeben soll. Aber auch er kennt das Netz 1 selber nicht, er weiss nur, dass Router F etwa näher daran sitzt. Und dieser wiederum gibt es weiter an Router A, und erst der liefert es dann beim Server ab.
Andere Protokolle funktionieren da anders, bei OSPF kennt zum Beispiel jeder Router innerhalb einer logischen Region sämtliche Verbindungen sämtlicher Router und berechnet sich dann jeweils den schnellsten Weg ans Ziel. Das Prinzip ist allerdings immer dasselbe: Die IP-Packete werden von Router zu Router weitergereicht, bis sie über einen möglichst direkten und zuverlässigen Weg ans Ziel gelangt sind.
So, das wäre mal ein kleiner Crashkurs in Routing im Internet gewesen, vielleicht waren ja Teile darin auch nur ein klein wenig verständlich. Ansonsten erläutere ich gerne mehr, muss mir vielleicht noch überlegen, wie man so etwas am besten textuell vermitteln kann.
Und ja, ich weiss, vieles in diesem Text stimmt so nicht ganz (zB interessiert sich RIP nicht für die Interfaces, sondern für die IP-Adressen des Next-Hop, ich habe hier einfach Analogien zu den statischen Routen in OS X gezogen), aber das war ja auch kein Anspruch. Wer alleine mit diesem Text einen Router konfigurieren will, hat eh schon verloren... Um im Routing draus zu kommen gibts nur eines: Lesen lesen lesen, und zwar RFCs, Manuals und Artikel in spezialisierten Foren...