9.3. Das Kabel und das Einzelbild¶
Die beiden untersten Schichten des Stacks sind auf der Kamera am ehesten als selbstverständlich anzusehen, denn alles, was sie tun, geschieht innerhalb des Chips, und die Kamera verwaltet sie, ohne dass Python-Code beteiligt ist. Ein kurzer Überblick lohnt sich dennoch, weil sie erklären, was „lokales Netzwerk“ bedeutet und wo die Grenze zur restlichen Infrastruktur beginnt.
9.3.1. Die physikalische Schicht¶
Die unterste Schicht ist die eigentliche Signalübertragung – die Drähte, Glasfasern oder Funkwellen, die Bits zwischen zwei Geräten transportieren. Ethernet über Twisted-Pair-Kabel kodiert jedes Bit als Spannungsübergang mit einer festen Rate. Wi-Fi moduliert dieselben Bits auf einen Funkträger im 2,4-GHz- oder 5-GHz-Band. Beide erzeugen einen Strom von Binärziffern zwischen zwei Hardware-Komponenten; beide sind genau die Art von Detail, das die Siliziumschaltung der Kamera erledigt, ohne dass die Software darüber nachdenken muss.
Aus Sicht eines Python-Skripts ist die physikalische Schicht entweder „die Verbindung ist aktiv“ oder „die Verbindung ist unterbrochen“. Das network-Modul meldet diesen Zustand über seine isconnected()-Methode auf der Wi-Fi-Schnittstelle und über den Verbindungsstatus auf einer kabelgebundenen Ethernet-Schnittstelle. Darüber hinaus bleibt alles andere, was diese Schicht tut, verborgen.
9.3.2. Die Sicherungsschicht¶
Eine Stufe höher liegt die Sicherungsschicht – die Regeln für das Senden eines Byteblocks (eines Frames) zwischen zwei Geräten, die sich dasselbe physikalische Segment teilen. Die Sicherungsschicht fügt der reinen Signalübertragung zwei Dinge hinzu:
Hardware-Adressierung. Jede Netzwerkschnittstelle besitzt eine eindeutige 48-Bit-Kennung, die als MAC-Adresse (Media Access Control) bezeichnet wird. Bei Ethernet ist sie in den Chip eingebrannt; bei Wi-Fi ist es dieselbe Art von Kennung, die in das Funkmodul eingebrannt ist. MAC-Adressen sind das, was ein Switch – die Box mit mehreren Ethernet-Ports, in die sich nahegelegene Geräte einstecken – verwendet, um zu entscheiden, über welchen Port ein bestimmtes Frame ausgehen soll. Ein Wi-Fi-Access-Point übernimmt dieselbe Rolle für drahtlose Geräte auf seinem Kanal.
Framing. Die Bytes, die eine höhere Schicht weiterreicht, werden in ein Frame mit einem kleinen Header, der Nutzlast und einer Prüfsumme am Ende verpackt. Der Header trägt die Quell- und Ziel-MAC-Adressen; die Prüfsumme ermöglicht es dem Empfänger, ein Frame zu erkennen, dessen Bytes während der Übertragung beschädigt wurden. Frames, die die Prüfung nicht bestehen, werden stillschweigend verworfen – wer sich um Zuverlässigkeit kümmert, muss diese auf einer höheren Schicht wiederherstellen.
Ein lokales Segment ist die jeweilige Gruppe von Geräten, die die Frames der anderen direkt sehen können – die kabelgebundenen Ports an einem Switch, alle Geräte, die mit einem Wi-Fi-Access-Point verbunden sind, oder ein kleines Netz aus miteinander verbundenen Switches. Die Sicherungsschicht kann nicht über dieses Segment hinausreichen. Sobald sich das Ziel auf einem anderen Segment befindet, muss die Nachricht an die darüberliegende Schicht übergeben werden.
9.3.3. Was die Kamera bereitstellt¶
Die Kamera besitzt eine MAC-Adresse für jede Netzwerkschnittstelle, die sie hat – eine Wi-Fi-Adresse, wenn die Kamera Drahtlosunterstützung bietet, eine Ethernet-Adresse, wenn das Board den entsprechenden Port hat. Das network-Modul gewährt Zugriff darauf über network_interface.config("mac") auf dem jeweiligen Schnittstellenobjekt, das die Anwendung gerade verwendet, wenn sie die Adresse auslesen muss. Manche Anwendungen müssen das, etwa um das Gerät bei einem Flottenverwaltungssystem zu registrieren. Ansonsten ist dies der einzige Regler, den die Sicherungsschicht an Python übergibt.
Alles andere – das Framing, der eigentliche MAC-Verkehr auf dem Draht oder in der Luft, die Aushandlung zwischen Kamera und Access-Point darüber, welcher Kanal und welche Rate zu verwenden sind – geschieht vollständig innerhalb der Wi-Fi- oder Ethernet-Hardware. Die nächste Seite behandelt die eine Stelle, an der ein Python-Skript bei der Sicherungsschicht doch ein Mitspracherecht hat: der Kamera mitzuteilen, welchem Netzwerk sie beitreten soll.