9.6. Paquets et routage¶
Une adresse IP dit pour qui est un message. Le mécanisme qui le livre réellement s’appelle le routage ; c’est le processus saut par saut par lequel un paquet voyage du réseau local d’un expéditeur jusqu’au réseau local d’un destinataire, éventuellement très éloigné.
9.6.1. Un paquet, en bref¶
Un paquet est l’unité de travail de la couche IP – un bloc d’octets composé d’un petit en-tête et d’une charge utile. L’en-tête comporte deux champs qui comptent pour le routage :
L’adresse IP source (d’où vient le paquet).
L’adresse IP de destination (où il va).
La charge utile est ce que la couche transport a demandé à la couche réseau de livrer. L’en-tête du paquet inclut également un compteur de durée de vie (time-to-live), une somme de contrôle sur l’en-tête et quelques drapeaux de contrôle. Aucun de ces éléments n’est manipulé directement par le code Python de la caméra.
Les paquets ne promettent rien de plus que « nous avons essayé » – ils peuvent être perdus, dupliqués ou livrés dans le désordre. La fiabilité et l’ordonnancement sont des problèmes que résout la couche transport au-dessus ; la couche réseau fait simplement de son mieux pour acheminer chaque paquet vers sa destination.
9.6.2. Saut par saut¶
Le paquet quitte la caméra et arrive au premier appareil qui ne se trouve pas sur le segment local de la caméra : la passerelle par défaut. (La page précédente mentionnait que le DHCP fournit à la caméra l’adresse de la passerelle lors de l’établissement du réseau.) Cet appareil est un routeur – un boîtier dont le rôle est de recevoir des paquets, d’examiner leur destination et de les transmettre plus loin.
Un paquet de la caméra vers la destination saute de routeur en routeur, chacun un pas plus proche.¶
Le routeur dispose d’une table de routage – une liste du type « pour les destinations correspondant à ce motif, envoyer le paquet par cette interface ». Pour les destinations sur le même réseau que la caméra, l’entrée dit « renvoie-le par le câble par lequel il est arrivé ». Pour les destinations sur l’internet plus large, l’entrée dit « envoie-le au routeur amont ». Pour des motifs connus de destinations (un VPN d’entreprise, le réseau d’un partenaire commercial spécifique, une liaison satellite), le routeur peut avoir une entrée plus spécifique qui remplace celle par défaut.
Le routeur amont fait la même chose. Et le suivant. Et le suivant. Chaque saut a la même forme : recevoir le paquet, rechercher la destination dans la table, l’envoyer par la bonne interface. Le paquet finit par arriver à un routeur qui se trouve sur le même segment local que l’IP de destination. Ce routeur assure le dernier saut, la destination reçoit le paquet, et le trajet est terminé.
9.6.3. Les extrémités ne connaissent pas la route¶
Une caméra qui envoie un paquet à un serveur distant ne sait pas comment le paquet y parviendra. Elle ne connaît que l’IP de destination et l’adresse de sa propre passerelle par défaut. Tout ce qui se trouve entre les deux – quels routeurs, quelles fibres, quels câbles sous-marins – est décidé au fur et à mesure par les routeurs le long du chemin, en fonction de leurs propres tables. Les routeurs eux-mêmes ne connaissent que leurs voisins immédiats et la direction approximative des destinations courantes ; aucun appareil unique sur internet n’en possède une carte complète.
Cette décentralisation explique pourquoi le réseau continue de fonctionner lorsque des chemins individuels tombent en panne. Un câble coupé quelque part au milieu devient un événement de re-routage chez quelques routeurs ; les extrémités ne s’en aperçoivent jamais. C’est aussi pourquoi un paquet d’une caméra à Tokyo vers un serveur à Dublin peut aboutir sans qu’aucun des deux côtés sache quels pays se trouvent entre les deux.
9.6.4. Ce que cela signifie pour un script Python¶
Le rôle de la caméra au niveau de la couche réseau se résume à :
Avoir une adresse IP.
Connaître l’adresse de la passerelle par défaut (le DHCP la renseigne automatiquement).
Remettre les paquets sortants, adressés à n’importe quelle IP, à cette passerelle et faire confiance au reste du chemin.
Un script ne choisit jamais de route, ne nomme jamais un saut intermédiaire et ne voit jamais les routeurs au milieu. Il inscrit l’IP de destination sur le paquet et la couche réseau prend le relais. Du point de vue d’un script Python, tout le routage n’est qu’une propriété du réseau que la caméra a rejoint – « la passerelle envoie les paquets quelque part d’utile pour moi ».
La couche transport qui vient ensuite suppose que le routage fonctionne tout simplement, et construit par-dessus la fiabilité, l’ordonnancement et l’adressage de programme à programme.