9.1. Pourquoi des réseaux¶
Le contrôle matériel a donné à la caméra des moyens de dialoguer avec un autre appareil précis sur un autre fil précis. UART entre la caméra et une seule carte compagne. I2C entre la caméra et les capteurs reliés au même bus court. CAN entre un petit ensemble de modules partageant un même bus robuste. Chaque cas suit la même forme : deux parties (ou un petit groupe connu), un support partagé, un accord entre elles sur le sens des octets circulant sur ce support.
9.1.1. Cette forme ne passe pas à l’échelle¶
Le schéma point à point fonctionne tant que les deux extrémités sont proches, connues d’avance, et que le script peut choisir le fil sur lequel il communique. Dès que l’une de ces contraintes tombe, le câblage ne suffit plus.
De nombreux interlocuteurs. Un réseau de cinquante caméras rendant compte à un seul serveur ne peut pas être câblé un à un ; il n’y a pas assez d’UART sur le serveur, et les longueurs de câble seraient impossibles.
Des interlocuteurs absents du même fil. Une caméra dans une usine et un tableau de bord dans un bureau à l’autre bout de la ville ne peuvent pas partager un câble série. Un chemin doit exister entre eux à travers l’infrastructure qui relie déjà les deux bâtiments.
Des interlocuteurs inconnus d’avance. Une caméra qui publie ses résultats vers le cloud ne choisit pas dans le schéma de câblage le serveur auquel elle parle ; l’adresse du cloud est quelque chose que le script recherche à l’exécution et vers laquelle il achemine les données.
De nombreux programmes sur un même câble. Un ordinateur portable aujourd’hui exécute un navigateur, une application de messagerie, un appel vidéo et une sauvegarde, tous communiquant via la même interface réseau au même moment. Le fil ne peut pas être « possédé » par une seule conversation comme l’est une UART.
Chacune de ces défaillances est un type différent de problème d’adressage. Les résoudre toutes ensemble exige plus qu’un fil et un débit en bauds.
9.1.2. Ce qu’est un réseau¶
Un réseau est l’infrastructure qui permet à un grand nombre d’ordinateurs d’échanger des messages avec n’importe quel autre, sans que chaque paire ait besoin de sa propre liaison dédiée. Trois propriétés font d’un réseau autre chose qu’un gros câble série :
Support partagé. De nombreux appareils se rattachent au même câble, commutateur ou canal radio. Ils prennent leur tour ou multiplexent afin que plus d’une conversation puisse tenir sur la même liaison physique.
Adresses logiques. Chaque appareil possède un numéro qui l’identifie indépendamment du câble auquel il est branché. Envoyer un message consiste à inscrire ce numéro sur le message, et non à raccorder un fil spécifique.
Routage. Lorsque l’expéditeur et le destinataire ne sont pas sur le même segment local, l’infrastructure entre eux transporte le message saut par saut. Les extrémités ne connaissent pas la route ; elles connaissent simplement l’adresse l’une de l’autre.
Un ordinateur portable sur le Wi-Fi du bureau qui atteint un serveur dans un centre de données lointain utilise les trois. La liaison Wi-Fi est un support radio partagé ; l’ordinateur portable et le serveur ont chacun leur propre adresse logique ; le message se fraye un chemin à travers l’infrastructure située entre les deux, transmis un saut à la fois. L’utilisateur clique sur un lien, l’ordinateur portable envoie un paquet, et le réseau gère le reste.
9.1.3. Et la caméra dans tout ça ?¶
La caméra joue exactement le même rôle sur un réseau que l’ordinateur portable. Elle acquiert une adresse logique lorsqu’elle rejoint le réseau, adresse les messages sortants vers les adresses logiques d’autres appareils, et laisse l’infrastructure les acheminer.
Ce qui change par rapport aux chapitres sur le contrôle matériel, c’est l”interface. Au lieu d’ouvrir une instance UART et de lui écrire des octets, le script ouvre un socket et y écrit des octets. Le socket est un point d’accès au réseau, de la même manière qu’une instance UART est un point d’accès à un fil. Les éléments situés entre le socket et le fil – trames, paquets, tables de routage, commutateurs, liaisons radio – se trouvent tous en dessous et sont pour l’essentiel invisibles au code Python.
Les pages qui suivent détaillent ces éléments, couche par couche, afin que l’abstraction « ouvrir un socket et envoyer des octets » paraisse évidente plutôt que magique.