9.20. Zusammenfassung¶
Sie haben die Schichten durchlaufen, die eine Netzwerknachricht auf ihrem Weg von der Kamera zum Rest der Welt durchquert:
Die Motivation – Netzwerke existieren, weil eine Punkt-zu-Punkt-Verkabelung nicht mehr skaliert, sobald mehr als ein paar Geräte miteinander kommunizieren müssen, oder das Gegenüber sich nicht am selben Kabel befindet, oder viele Programme gleichzeitig dieselbe Leitung teilen. Die Antwort sind gemeinsam genutzte Medien, logische Adressen und Routing.
Das Schichtenmodell – fünf Schichten, von denen jede ein Problem löst und der nächsten eine saubere Schnittstelle bietet. Bitübertragungs- und Sicherungsschicht behandeln Bits und Frames zwischen unmittelbaren Nachbarn, die Netzwerkschicht behandelt Adressierung und Routing über das Internet, die Transportschicht behandelt die Zustellung von Programm zu Programm, und Anwendungsprotokolle bauen auf all dem auf.
Die unteren Schichten – Ethernet und Wi-Fi als praktische Verbindungstechnologien; MAC-Adressen identifizieren Hardware auf einem lokalen Segment. Das
network-Modul der Kamera stellt einen Regler bereit, den man kennen sollte: in welches Wi-Fi-Netzwerk man sich einwählt. Danach läuft alles darunter automatisch.Die Netzwerkschicht (IP) – IPv4- und IPv6-Adressen identifizieren Hosts unabhängig davon, an welches Kabel sie angeschlossen sind. Router leiten Pakete sprungweise zwischen lokalen Segmenten weiter, bis sie ankommen. Private Adressbereiche und NAT sind der Grund, warum Heim- und Büronetzwerke ihren eigenen internen Adressraum und eine gemeinsame öffentliche Adresse am Rand haben; ausgehender Verkehr funktioniert ungehindert, eingehender braucht Hilfe.
Die Transportschicht – Ports identifizieren Programme innerhalb eines Hosts; das vollständige
(IP, port)-Paar identifiziert einen bestimmten Socket. UDP ist eine dünne Schicht, die jeweils ein in sich geschlossenes Datagramm ohne Garantien sendet – schnell, günstig und das richtige Werkzeug, wenn Verlust akzeptabel ist. TCP ist ein verbindungsorientierter, zuverlässiger, geordneter Byte-Strom – das Arbeitspferd für den Großteil des Internetverkehrs, bezahlt mit einer Handshake-Latenz von einer Round-Trip-Time.Die Python-API –
socket.socketist die eine Klasse für beide Protokolle.sendto()/recvfrom()für UDP; die Connect-oder-Listen-Muster plussend()/recv()für TCP. Sockets lassen sich sauber mitasynciokombinieren:asyncio.open_connection()undasyncio.start_server()geben jeder TCP-Verbindung ein Reader/Writer-Paar, sodass viele gleichzeitige Konversationen eine einzige Event-Loop teilen, ohne Threading.Namen und Zeit –
socket.getaddrinfo()verwandelt einen Namen wieexample.comin eine IP-Adresse, die bereit ist, an einen Socket übergeben zu werden.network.hostname()legt den eigenen Namen der Kamera fest, den Router unter ihrem lokalen DNS registrieren und für den der eingebaute mDNS-Responder der Kamera als<name>.localantwortet.ntptime.settime()ist dieselbe Idee „etwas im Netzwerk nachschlagen“, angewandt auf die Wanduhrzeit, und stellt die bordeigene Uhr von einem öffentlichen NTP-Server auf UTC.Verschlüsselung –
sslhüllt einen Socket in TLS. Die Kamera wird ohne Zertifizierungsstellen-Speicher ausgeliefert, sodass Sie ab Werk nur Verschlüsselung erhalten – die Konversation ist nicht mehr im Klartext, aber die Kamera überprüft nicht, wer geantwortet hat. Für echte Authentifizierung – das Überprüfen öffentlicher HTTPS-Server, den Betrieb der Kamera als TLS-Server, gegenseitiges TLS – wird der zertifikatbasierte Arbeitsablauf in Arbeiten mit TLS-Zertifikaten behandelt. DTLS (TLS über UDP) verwendet dasselbe Modul auf dieselbe Weise.Ein echtes Anwendungsprotokoll – MQTT als das durchgearbeitete Beispiel dafür, wie jede darunterliegende Schicht zusammengeschaltet wird. Ein 1-Byte-Typ-und-Flags-Byte, ein Feld variabler Länge für die verbleibende Länge, ein längenpräfixiertes UTF-8-Thema und die Nutzdaten, alles über TCP (und optional innerhalb von TLS) zu einem Broker reisend, der die Nachricht an jeden Abonnenten des Themas verteilt. Der mitgelieferte
mqtt-Client verpackt das Drahtformat in eineconnect/publish/subscribe-API, die klein genug ist, um sie in einem Rutsch zu lesen.
Das reicht aus, um Kameraanwendungen zu schreiben, die mit anderen Maschinen kommunizieren, Daten an entfernte Dienste veröffentlichen, Verbindungen von Clients im lokalen Netzwerk annehmen und all das gleichzeitig mit der übrigen Arbeit der Kamera erledigen.
9.20.1. Diese Referenz später nutzen¶
Behandeln Sie die Networking-Kapitel als Referenzmaterial; das Zurückkommen für die genaue Form eines UDP-Listeners oder das Muster TLS-mit-asyncio ist der beabsichtigte Zweck. Die Referenzseiten network — Netzwerkkonfiguration, socket — socket-Modul, ssl — SSL/TLS-Modul und ntptime — einfacher NTP-Client listen jede Methode, jedes Flag und jede Konstante an einem Ort auf, wenn die Frage einfach nur lautet „wie heißt dieser Aufruf genau“.
9.20.2. Wie es von hier aus weitergeht¶
Webserver ist das nächste große Thema. Mit funktionierenden Sockets und verfügbarem TLS ist die natürliche nächsthöhere Schicht die der Protokolle, die darauf aufbauen: HTTP zum Bereitstellen von Inhalten und APIs, WebSockets, um Verbindungen in beide Richtungen offen zu halten, und die kleinen Frameworks, die den Boilerplate verbergen. Alles aus diesem Abschnitt wird weitergetragen – ein Webserver ist schließlich nur ein TCP-Server, der auf seinen angenommenen Sockets HTTP spricht, oft mit TLS, das das Ganze umhüllt.