9.5. Adresses IP

Une adresse matérielle distingue un appareil parmi les autres sur le même câble local ou la même cellule radio. Elle convient pour cette tâche, mais elle est inutile au-delà du segment local : un commutateur dans le bâtiment voisin ne peut pas router à partir d’elle, car le mécanisme sous-jacent qui permet à un commutateur d’apprendre les adresses MAC ne fonctionne qu’à l’intérieur d’un seul segment.

La couche réseau résout cela avec un second type d’adresse indépendant du câble auquel un appareil est branché. Le nom de ce type d’adresse est l”adresse Internet Protocol, ou adresse IP, et la partie « Internet Protocol » désigne l’ensemble des règles que suit tout hôte sur internet lorsqu’il en envoie ou en relaie une. L’internet actuel utilise en parallèle deux versions du schéma d’adressage – IPv4 (la forme la plus ancienne, encore dominante sur les petits réseaux) et IPv6 (la forme la plus récente, qui la remplace lentement).

9.5.1. Ce qu’est une adresse IP

Une adresse IP est un nombre suffisamment grand pour identifier de manière unique n’importe quel appareil sur internet. Elle s’écrit sous une forme lisible par l’humain que le reste de la section utilise, mais dans l’en-tête du paquet ce n’est qu’un entier de taille fixe.

  • Les adresses IPv4 font 32 bits de long et s’écrivent sous la forme de quatre nombres décimaux séparés par des points, chaque nombre représentant un octet

    192.168.1.42
    8.8.8.8
    10.0.0.1
    

    Trente-deux bits donnent environ quatre milliards d’adresses possibles, ce qui semblait amplement suffisant lorsque l’IPv4 a été conçu dans les années 1970 et ne l’était plus au début des années 2010.

  • Les adresses IPv6 font 128 bits de long et s’écrivent sous la forme de huit groupes de quatre chiffres hexadécimaux séparés par des deux-points

    2001:0db8:85a3:0000:0000:8a2e:0370:7334
    

    Les suites de zéros peuvent être abrégées en ::, et les zéros de tête d’un groupe peuvent être omis, de sorte que l’adresse ci-dessus s’écrit normalement 2001:db8:85a3::8a2e:370:7334.

Les deux familles d’adresses sont par ailleurs des langages différents ; un hôte IPv4 ne peut pas envoyer directement un paquet à un hôte IPv6 sans l’aide d’une passerelle. Les modules network et socket de la caméra prennent en charge les deux. Ce tutoriel utilise l’IPv4 dans les exemples parce que la plupart des réseaux locaux que la caméra rejoindra sont encore exclusivement en IPv4, mais tout ce qui suit fonctionne exactement de la même manière pour l’IPv6 une fois les adresses remplacées.

9.5.2. À quoi sert une adresse IP

L’adresse IP indique à quel hôte de l’internet un paquet est destiné. Un routeur qui ne sait pas comment atteindre directement une destination sait qu’un autre routeur le sait probablement, et y transmet le paquet. Le paquet saute de routeur en routeur, chacun un peu plus proche de la destination, jusqu’à ce qu’un routeur qui se trouve sur le segment local de la destination assure le dernier saut.

Ce comportement saut par saut est ce qui permet à internet de fonctionner comme un seul grand réseau plutôt que comme une multitude de petits îlots. La page suivante explique comment les sauts sont choisis ; celle-ci ne traite que de l’adresse.

9.5.3. Comment une caméra en obtient une

Une caméra qui vient de rejoindre un réseau Wi-Fi a besoin d’une adresse IP avant de pouvoir communiquer avec quoi que ce soit. Il existe deux manières courantes d’y parvenir.

La première est l”attribution automatique. La caméra demande une adresse au réseau local ; l’appareil qui en distribue une est le routeur – le boîtier qui relie le réseau local à l’internet plus large. Dans la plupart des installations domestiques et de petits bureaux, le même boîtier physique fait aussi office de commutateur auquel se branchent les appareils filaires et de point d’accès Wi-Fi auquel s’associent les appareils sans fil ; ainsi « le routeur », « le commutateur » et « le point d’accès » peuvent tous désigner le même matériel. Le routeur exécute un petit service appelé DHCP (le Dynamic Host Configuration Protocol), qui maintient un pool d’adresses disponibles, en choisit une pour chaque nouvel appareil arrivant et la loue pour une durée déterminée. Pendant qu’il y est, le routeur fournit aussi à la caméra quelques autres éléments de configuration utiles :

  • l’adresse à laquelle envoyer le trafic sortant lorsque la destination est hors du réseau local (la passerelle par défaut, qui est l’adresse du routeur lui-même) ; et

  • les adresses d’un ou plusieurs serveurs de noms qui transforment des noms lisibles par l’humain comme example.com en adresses IP. Le service de résolution de noms s’appelle DNS, le Domain Name System, et Noms et DNS le traite en détail.

Tout cela se produit automatiquement pendant l’établissement du lien. La caméra n’a pas à demander explicitement quoi que ce soit ; au moment où isconnected() retourne True dans l’exemple de la page précédente, la caméra possède déjà son adresse, sa passerelle et ses serveurs de noms.

La seconde option est la configuration statique. Certains déploiements souhaitent une adresse connue pour la caméra afin que d’autres appareils puissent l’atteindre sans avoir à la rechercher au préalable. La méthode ipconfig() définit l’adresse, la passerelle et le serveur de noms manuellement

wlan.ipconfig(addr4=("192.168.1.50/24", "192.168.1.1"))
wlan.ipconfig(dns="192.168.1.1")

La configuration statique est fragile (deux appareils auxquels on attribue accidentellement la même adresse entrent en conflit). Privilégiez la valeur par défaut DHCP, sauf si une raison précise de la remplacer se présente.

Une fois que la caméra dispose d’une adresse IP, elle a rejoint internet (ou du moins la partie du réseau local qui en fait partie). D’autres appareils peuvent désormais lui adresser des paquets via cette adresse, et elle peut leur en adresser.

9.5.4. Le masque de sous-réseau et le /24

Le /24 à la fin de l’adresse dans l’exemple de configuration statique ci-dessus est le masque de sous-réseau. Une adresse IP seule ne dit pas où s’arrête le réseau local – 192.168.1.50 pourrait être l’une de quelques centaines d’adresses sur un petit réseau domestique, ou l’une de milliers sur un réseau plus grand. Le masque de sous-réseau indique quelle part de l’adresse nomme le réseau et quelle part nomme l”hôte à l’intérieur.

/24 signifie « les 24 premiers des 32 bits nomment le réseau ; les 8 derniers nomment l’hôte ». Pour 192.168.1.50/24, cela divise l’adresse en 192.168.1 pour le réseau et .50 pour l’hôte, laissant de la place pour environ 254 appareils sur le même réseau local. /16 laisserait davantage de bits pour la partie hôte et permettrait de loger bien plus d’appareils sur un réseau ; /30 ne laisserait que deux adresses d’hôte et conviendrait à une liaison point à point.

Le masque de sous-réseau s’écrit aussi couramment sous la forme d’un nombre de quatre octets dans la même notation pointée que l’adresse. /24 équivaut à 255.255.255.0 – lisez chaque octet comme « tous les bits qui appartiennent à la partie réseau ». Les deux formes sont interchangeables ; le lecteur ipconfig() de la sous-section suivante retourne justement la forme à quatre octets.

Pourquoi cette répartition importe-t-elle – comment un appareil utilise le masque de sous-réseau pour décider si une destination se trouve sur le réseau local ou doit sortir par la passerelle, et pourquoi la plupart des réseaux domestiques aboutissent à un /24 – est traité dans Réseaux privés et NAT.

9.5.5. Relire l’adresse

La méthode ipconfig() sans arguments retourne la configuration active. La vue addr4 retourne l’adresse IP et le masque de sous-réseau

>>> wlan.ipconfig("addr4")
('192.168.1.50', '255.255.255.0')