## 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/24` | | `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.0/24` | | `3.3.3.0/24` | -- | Direkt versenden über Netzwerkkarte 2, Ziel im gleichen Subnetz `3.3.3.0/24` | | `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.