## Routing In der [[https://oinf.ch/interactive/tcp-ip-visualisierung/|TCP-IP-Visualisierung]] sehen wir, was bei einem Webseiten-Aufruf passiert. Aber woher weiss der Router (das Gerät in der Mitte) überhaupt, wohin das Paket mit einer Ziel-IP geschickt werden muss? Antwort: er schaut in seiner Routing-Tabelle nach. *Routing* beschreibt die Weiterleitung von IP-Paketen in der Vermittlungsschicht des Internet. Das Internet ist *hierarchisch* aufgebaut. Das heisst, dass ein lokales Netz (*Subnetz*) erst mal für sich funktioniert, aber dass mehrere Subnetze über *Router* miteinander verbunden sind((Daher auch der Name *Internet*: das Netz, das kleinere Netze miteinander verbindet.)). {{ :gf_informatik:web:internet:router.jpeg?nolink&600 |}} Die Vermittlungsschicht bietet ja den Ende-zu-Ende-Transport von Paketen. Bei der Weiterleitung bleiben die Quell- und Ziel-Adressen eines Pakets also immer die gleichen, so wie auch die Postadresse eines Pakets während des Transports nicht verändert wird (Ausnahme: [[gf_informatik:web:internet:ip_adressen#NAT]]). {{ :gf_informatik:web:internet:envelope.jpg?nolink&600 |}} Jedes Gerät im Internet unterhält eine *Routing-Tabelle*. Diese definiert, was passiert, wenn das Gerät auf der Netzzugangs-Schicht ein Paket mit seiner MAC-Adresse empfängt. Die Handlung hängt nur von der Ziel-IP-Adresse ab: ^ Ziel-IP ^ Handlung ^ | Gehört dem Gerät selbst | Paket empfangen | | Im gleichen Subnetz wie das Gerät | Paket direkt an das Zielgerät senden | | Alles andere | An den Router (auch *Gateway*) senden zur Weiterleitung | Die Adresse des Routers wird den Endgeräten normalerweise zusammen mit der IP-Adresse, der Subnetz-Grösse und dem DNS-Server mitgeteilt, wenn sie sich mit dem Netzwerk verbinden. Die Routing-Tabelle verwendet [[gf_informatik:web:internet:ip_adressen#subnetze|Subnetz-Adressen]], um die Routing-Information zu beschreiben. Bei Windows-Systemen wird manchmal statt der CIDR-Notation noch die Kombination von Adresse und Subnetz-Maske verwendet. ^ Ziel-Netz ^ Router ^ Handlung ^ | 1.1.3.2/32 | -- | Paket empfangen (eigene Adresse) | | 1.1.3.0/24 | -- | Direkt versenden, Ziel im gleichen Subnetz 1.1.3.* | | 0.0.0.0/0 | 1.1.3.1 | Alles andere: An den Router (auch *Gateway*) 1.1.3.1 senden zur Weiterleitung | Dabei bedeutet ein Präfix der Länge `/32`, dass nur genau die aufgeführte IP-Adresse gemeint ist. Speziell ist ein Tabelleneintrag mit dem Netz `0.0.0.0/0`: dies bedeutet, dass kein einziges Bit der Ziel-IP relevant ist - der Eintrag passt also zu _allen_ IP-Adressen und wird deshalb auch _default route_ genannt. Die _default route_ bestimmt, was mit Paketen passiert, für die es keinen anderen Eintrag gibt. Es sollte in einer Routing Tabelle somit nur eine einzige _default route_ geben. Oft wird sie auch mit dem `*` markiert. Die Routing-Tabelle lässt sich mit den Befehlen `netstat -rn` (Mac, Linux), `route print` (Windows) oder `ip route show` (Linux) anzeigen . ### Router Router sind die Knoten, die das Internet zusammenhalten. Ein Router ist nicht nur Teil eines einzigen, sondern mindestens von zwei Subnetzen. Er kann Pakete zwischen den zwei Netzen *vermitteln*. {{ :gf_informatik:web:internet:network.png?nolink&600 |}} Die Routing-Tabelle eines Routers ist dementsprechend etwas aufwändiger. Sie listet für jeden bekannten IP-Bereich auf, wer der *next hop* ist, also der Router, der ein Stück näher an der Destination ist: ^ IP-Präfix ^ Router ^ Handlung ^ | 1.1.3.1/32 | -- | Paket empfangen (eigene Adresse) | | 3.3.3.3/32 | -- | Paket empfangen (eigene Adresse) | | 1.1.3.0/24 | -- | Direkt versenden über Netzwerkkarte 1, Ziel im gleichen Subnetz 1.1.3 | | 3.3.3.0/24 | -- | Direkt versenden über Netzwerkkarte 2, Ziel im gleichen Subnetz 3.3.3 | | 1.1.1.0/24 | 3.3.3.2 | Weiterleiten über 3.3.3.2 | | 1.1.8.0/24 | 3.3.3.8 | Weiterleiten über 3.3.3.8 | | 1.1.6.0/24 | 3.3.3.4 | Weiterleiten über 3.3.3.4 | | 0.0.0.0/0 | 3.3.3.1 | Default-Route: An den Router (auch *Gateway*) 3.3.3.1 senden zur Weiterleitung | Um die richtige Handlung herauszufinden, kann es nötig sein, mehrmals in der Tabelle nachzuschlagen. Beispielsweise erhält der obige Router ein Paket für 1.1.6.6. * zuerst bestimmt Zeile 7, dass es an 3.3.3.4 weitergeleitet werden muss. * als zweites bestimmt Zeile 4 dass das Paket über die Netzwerkkarte 2 direkt versandt werden soll. Auf die gleiche Weise sind alle Subnetze des Internets über Router miteinander verbunden.