9.1. Warum Netzwerke

Die Hardwaresteuerung gab der Kamera Möglichkeiten, mit einem bestimmten anderen Gerät auf einer bestimmten anderen Leitung zu kommunizieren. UART zwischen der Kamera und einer einzelnen Begleitplatine. I2C zwischen der Kamera und den Sensoren am selben kurzen Bus. CAN zwischen einer kleinen Gruppe von Modulen, die sich einen robusten Bus teilen. Jeder Fall folgt derselben Form: zwei Parteien (oder eine kleine bekannte Gruppe), ein gemeinsames Medium, eine Vereinbarung zwischen ihnen darüber, was die Bytes auf diesem Medium bedeuten.

9.1.1. Diese Form skaliert nicht weiter

Das Punkt-zu-Punkt-Muster funktioniert, solange sich beide Enden in der Nähe befinden, beide Enden im Voraus bekannt sind und das Skript auswählen darf, über welche Leitung es kommuniziert. Sobald eine dieser Einschränkungen wegfällt, reicht die Verkabelung nicht mehr aus.

  • Viele Gegenstellen. Ein Netzwerk aus fünfzig Kameras, die an einen Server melden, kann nicht eins-zu-eins verkabelt werden; es gibt nicht genug UARTs am Server, und die Kabelführungen wären unmöglich.

  • Gegenstellen nicht an derselben Leitung. Eine Kamera in einer Fabrik und ein Dashboard in einem Büro auf der anderen Seite der Stadt können sich kein serielles Kabel teilen. Zwischen ihnen muss irgendein Pfad durch die ohnehin schon zwischen den beiden Gebäuden vorhandene Infrastruktur existieren.

  • Gegenstellen nicht im Voraus bekannt. Eine Kamera, die ihre Ergebnisse in die Cloud veröffentlicht, wählt nicht im Verdrahtungsplan aus, mit welchem Server sie kommuniziert; die Adresse der Cloud ist etwas, das das Skript zur Laufzeit nachschlägt und an das es Daten leitet.

  • Viele Programme auf einem Kabel. Ein Laptop führt heute einen Browser, eine Chat-App, einen Videoanruf und ein Backup aus, die alle gleichzeitig über dieselbe Netzwerkschnittstelle kommunizieren. Die Leitung kann nicht von einem Gespräch „besessen“ werden, wie es bei einem UART der Fall ist.

Jeder dieser Fehler ist eine andere Art von Adressierungsproblem. Sie alle gemeinsam zu lösen, erfordert mehr als eine Leitung und eine Baudrate.

9.1.2. Was ein Netzwerk ist

Ein Netzwerk ist die Infrastruktur, die es einer beliebigen Anzahl einer großen Menge von Computern ermöglicht, mit jedem anderen Nachrichten auszutauschen, ohne dass jedes Paar seine eigene dedizierte Verbindung benötigt. Drei Eigenschaften machen ein Netzwerk zu etwas mehr als einem großen seriellen Kabel:

  • Gemeinsames Medium. Viele Geräte sind an dasselbe Kabel, denselben Switch oder denselben Funkkanal angeschlossen. Sie wechseln sich ab oder multiplexen, sodass mehr als ein Gespräch auf dieselbe physische Verbindung passt.

  • Logische Adressen. Jedes Gerät hat eine Nummer, die es unabhängig davon identifiziert, an welches Kabel es angeschlossen ist. Eine Nachricht zu senden bedeutet, diese Nummer auf die Nachricht zu schreiben, nicht eine bestimmte Leitung zu verbinden.

  • Routing. Wenn sich Sender und Empfänger nicht auf demselben lokalen Segment befinden, befördert die Infrastruktur zwischen ihnen die Nachricht Sprung für Sprung. Die Endpunkte kennen die Route nicht; sie kennen nur die Adresse des jeweils anderen.

Ein Laptop im Büro-Wi-Fi, der einen Server in einem weit entfernten Rechenzentrum erreicht, nutzt alle drei. Die Wi-Fi-Verbindung ist ein gemeinsames Funkmedium; der Laptop und der Server haben jeweils ihre eigene logische Adresse; die Nachricht fädelt sich durch die zwischen den beiden liegende Infrastruktur, Sprung für Sprung weitergeleitet. Der Benutzer klickt auf einen Link, der Laptop sendet ein Paket, und das Netzwerk erledigt den Rest.

9.1.3. Was ist mit der Kamera?

Die Kamera spielt in einem Netzwerk genau dieselbe Rolle wie der Laptop. Sie nimmt eine logische Adresse an, wenn sie dem Netzwerk beitritt, adressiert ausgehende Nachrichten an die logischen Adressen anderer Geräte und lässt die Infrastruktur sie routen.

Was sich gegenüber den Kapiteln zur Hardwaresteuerung ändert, ist die Schnittstelle. Anstatt eine UART-Instanz zu öffnen und Bytes hineinzuschreiben, öffnet das Skript einen Socket und schreibt Bytes in diesen. Der Socket ist ein Endpunkt in das Netzwerk, genauso wie eine UART-Instanz ein Endpunkt in eine Leitung ist. Die Teile zwischen dem Socket und der Leitung – Einzelbilder, Pakete, Routing-Tabellen, Switches, Funkmodule – liegen alle darunter und sind für den Python-Code größtenteils unsichtbar.

Die nachfolgenden Seiten erläutern diese Teile, Schicht für Schicht, sodass sich die Abstraktion „einen Socket öffnen und Bytes senden“ zwangsläufig anfühlt statt magisch.