9.6. Pakete und Routing

Eine IP-Adresse gibt an, für wen eine Nachricht bestimmt ist. Der Mechanismus, der sie tatsächlich ausliefert, heißt Routing, und er ist der Sprung-für-Sprung-Prozess, durch den ein Paket vom lokalen Netzwerk eines Senders zum lokalen Netzwerk eines Empfängers reist, möglicherweise sehr weit entfernt.

9.6.1. Ein Paket, kurz erklärt

Ein Paket ist die Arbeitseinheit der IP-Schicht – ein Block von Bytes mit einem kleinen Header und einer Nutzlast. Der Header hat zwei Felder, die für das Routing wichtig sind:

  • Die Quell-IP-Adresse (woher das Paket kam).

  • Die Ziel-IP-Adresse (wohin es geht).

Die Nutzlast ist alles, was die Transportschicht die Vermittlungsschicht ausliefern lässt. Der Paket-Header enthält außerdem einen Time-to-live-Zähler, eine Prüfsumme über den Header und einige wenige Steuerflags. Nichts davon sind Dinge, die der Python-Code der Kamera direkt berührt.

Pakete versprechen nicht mehr als „wir haben es versucht“ – sie können verloren gehen, dupliziert oder in falscher Reihenfolge ausgeliefert werden. Zuverlässigkeit und Reihenfolge sind Probleme, die die darüberliegende Transportschicht löst; die Vermittlungsschicht gibt einfach ihr Bestes, um jedes Paket in Richtung seines Ziels weiterzuleiten.

9.6.2. Sprung für Sprung

Das Paket verlässt die Kamera und kommt beim ersten Gerät an, das nicht im lokalen Segment der Kamera liegt: dem Standard-Gateway. (Die vorherige Seite erwähnte, dass DHCP der Kamera die Gateway-Adresse übergibt, wenn das Netzwerk aufgebaut wird.) Dieses Gerät ist ein Router – eine Box, deren Aufgabe es ist, Pakete zu empfangen, ihr Ziel zu betrachten und sie weiterzuleiten.

Ein Diagramm, das fünf Boxen zeigt. Links eine Kamera mit der Beschriftung "10.0.0.42". Verbunden mit einem Router mit der Beschriftung "10.0.0.1 / 203.0.113.5". Dann eine Folge von zwei unbenannten Routern in der Mitte. Dann ein Router mit der Beschriftung "198.51.100.1 / 198.51.100.x". Schließlich ein Server mit der Beschriftung "198.51.100.20". Ein Pfeil mit der Beschriftung "destination: 198.51.100.20" verläuft entlang der Kette von links nach rechts.

Ein Paket von der Kamera zum Ziel springt zwischen Routern, von denen jeder einen Schritt näher ist.

Der Router hat eine Routing-Tabelle – eine Liste der Art „für Ziele, die diesem Muster entsprechen, sende das Paket über diese Schnittstelle hinaus“. Für Ziele im selben Netzwerk wie die Kamera lautet der Eintrag „sende es über das Kabel zurück, über das es hereingekommen ist“. Für Ziele im weiteren Internet lautet der Eintrag „sende es an den vorgelagerten Router“. Für bekannte Zielmuster (ein Unternehmens-VPN, das Netzwerk eines bestimmten Geschäftspartners, eine Satellitenverbindung) hat der Router möglicherweise einen spezifischeren Eintrag, der den Standard überschreibt.

Der vorgelagerte Router macht dasselbe. Und der nächste. Und der nächste. Jeder Sprung hat dieselbe Form: das Paket empfangen, das Ziel in der Tabelle nachschlagen, es über die richtige Schnittstelle hinaussenden. Schließlich kommt das Paket bei einem Router an, der sich im selben lokalen Segment wie die Ziel-IP befindet. Dieser Router liefert den letzten Sprung aus, das Ziel empfängt das Paket, und die Reise ist vorbei.

9.6.3. Die Endpunkte kennen die Route nicht

Eine Kamera, die ein Paket an einen entfernten Server sendet, weiß nicht, wie das Paket dorthin gelangt. Sie kennt nur die Ziel-IP und die Adresse ihres eigenen Standard-Gateways. Alles dazwischen – welche Router, welche Glasfasern, welche Unterseekabel – ist etwas, das die Router entlang des Pfades unterwegs entscheiden, basierend auf ihren eigenen Tabellen. Die Router selbst kennen nur ihre unmittelbaren Nachbarn und die ungefähre Richtung verbreiteter Ziele; kein einzelnes Gerät im Internet hat eine vollständige Karte davon.

Diese Dezentralisierung ist der Grund, warum das Netzwerk weiterhin funktioniert, wenn einzelne Pfade ausfallen. Ein durchtrenntes Kabel irgendwo in der Mitte wird zu einem Umleitungsereignis an einigen wenigen Routern; die Endpunkte bemerken es nie. Sie ist auch der Grund, warum ein Paket von einer Kamera in Tokio zu einem Server in Dublin erfolgreich sein kann, ohne dass eine der beiden Seiten weiß, welche Länder dazwischenliegen.

9.6.4. Was das für ein Python-Skript bedeutet

Die Aufgabe der Kamera auf der Vermittlungsschicht läuft auf Folgendes hinaus:

  • Eine IP-Adresse haben.

  • Die Adresse des Standard-Gateways kennen (DHCP trägt diese automatisch ein).

  • Ausgehende Pakete, adressiert an eine beliebige IP, an dieses Gateway übergeben und dem Rest des Pfades vertrauen.

Ein Skript wählt nie eine Route, benennt nie einen Zwischensprung und sieht nie die Router in der Mitte. Es schreibt die Ziel-IP auf das Paket, und die Vermittlungsschicht übernimmt. Aus Sicht eines Python-Skripts ist das gesamte Routing nur eine Eigenschaft des Netzwerks, dem die Kamera beigetreten ist – „das Gateway sendet Pakete an einen für mich nützlichen Ort“.

Die Transportschicht, die als Nächstes kommt, geht davon aus, dass Routing einfach funktioniert, und baut darauf Zuverlässigkeit, Reihenfolge und die Adressierung von Programm zu Programm auf.