9.3. Le câble et la trame¶
Les deux couches les plus basses de la pile sont les plus faciles à considérer comme acquises sur la caméra, car tout ce qu’elles font se passe à l’intérieur de la puce et la caméra les gère sans qu’aucun code Python ne soit impliqué. Elles méritent tout de même un bref aperçu, car elles expliquent ce que signifie « réseau local » et où commence la frontière avec le reste de l’infrastructure.
9.3.1. La couche physique¶
La couche la plus basse est la signalisation proprement dite – les fils, les fibres optiques ou les ondes radio qui transportent les bits entre deux appareils. L’Ethernet sur câble à paires torsadées encode chaque bit comme une transition de tension à un débit fixe. Le Wi-Fi module les mêmes bits sur une porteuse radio dans la bande des 2,4 GHz ou 5 GHz. Tous deux produisent un flux de chiffres binaires entre deux éléments matériels ; tous deux relèvent du genre de détail que le silicium de la caméra gère sans que le logiciel ait à s’en soucier.
Du point de vue d’un script Python, la couche physique correspond à « la liaison est active » ou « la liaison est inactive ». Le module network rend compte de cet état via sa méthode isconnected() sur l’interface Wi-Fi et via l’état de la liaison sur une interface Ethernet filaire. Au-delà de cela, tout le reste du travail de cette couche est masqué.
9.3.2. La couche liaison¶
Un cran au-dessus se trouve la couche liaison – les règles régissant l’envoi d’un bloc d’octets (une trame) entre deux appareils qui partagent le même segment physique. La couche liaison ajoute deux choses par-dessus la signalisation brute :
L’adressage matériel. Chaque interface réseau est dotée d’un identifiant unique de 48 bits appelé adresse MAC (Media Access Control). En Ethernet, il est gravé dans la puce ; en Wi-Fi, c’est le même type d’identifiant gravé dans le module sans fil. Les adresses MAC sont ce qu’un commutateur – le boîtier comportant plusieurs ports Ethernet sur lesquels les appareils à proximité se branchent – utilise pour décider sur quel port une trame donnée doit ressortir. Un point d’accès Wi-Fi joue le même rôle pour les appareils sans fil sur son canal.
L’encadrement (framing). Les octets transmis par une couche supérieure sont conditionnés dans une trame comportant un petit en-tête, la charge utile et une somme de contrôle à la fin. L’en-tête transporte les adresses MAC source et destination ; la somme de contrôle permet au destinataire de détecter une trame dont les octets ont été corrompus en transit. Les trames qui échouent à la vérification sont rejetées silencieusement – quiconque se soucie de la fiabilité doit la rétablir à une couche supérieure.
Un segment local désigne tout groupe d’appareils capables de voir directement les trames les uns des autres – les ports filaires d’un même commutateur, tous les appareils associés à un même point d’accès Wi-Fi, ou un petit maillage de commutateurs interconnectés. La couche liaison ne peut pas s’étendre au-delà de ce segment. Dès que la destination se trouve sur un segment différent, le message doit être transmis à la couche supérieure.
9.3.3. Ce que la caméra expose¶
La caméra possède une adresse MAC pour chacune de ses interfaces réseau – une adresse Wi-Fi si la caméra prend en charge le sans fil, une adresse Ethernet si la carte dispose du port correspondant. Le module network y donne accès via network_interface.config("mac") sur l’objet d’interface utilisé par l’application, lorsqu’elle a besoin de lire l’adresse. Certaines applications en ont besoin, par exemple pour enregistrer l’appareil auprès d’un système de gestion de parc. Sinon, c’est le seul réglage que la couche liaison confie à Python.
Tout le reste – l’encadrement, le trafic MAC réel sur le fil ou dans les airs, la négociation entre la caméra et le point d’accès quant au canal et au débit à utiliser – se déroule entièrement à l’intérieur du matériel sans fil ou Ethernet. La page suivante couvre le seul endroit où un script Python a effectivement son mot à dire dans la couche liaison : indiquer à la caméra quel réseau rejoindre.