Adresses IPv4, routage et masques de sous-réseau

Table des matières

Parmi les adresses IP des systèmes connectés à Internet, les adresses IPv4 sont actuellement les plus répandues. Comment peuvent-elles identifier de façon unique tous les objets connectés ? Comment facilitent-elles le routage des données d’un côté à l’autre de ce vaste réseau ? Et pourquoi sont-elles progressivement remplacées par les adresses IPv6 ? C’est ce que nous allons voir dans cet article.

Mais avant cela, il serait sans doute utile de se remémorer les composants physiques du réseau Internet que nous avons eu l’occasion de voir dans l’article précédent sur l’architecture d’Internet.

Le matériel physique d’Internet

Internet est un réseau mondial d’une ampleur sidérante, composé de milliers de réseaux publics et privés, et de millions d’appareils connectés. Les données y circulent sur des supports physiques variés : câbles coaxiaux, fibre optique, ondes radio, etc. Elles passent par des commutateurs et des routeurs pour enfin arriver via l’ interface réseau de l’ hôte destinataire. Définissons ici ces termes.

Les hôtes, les clients et les serveurs

Un hôte, c’est tout système connecté au réseau. Ce peut être un client ou un serveur. Un client c’est un ordinateur, un smartphone, ou autre, connecté au réseau. Un serveur, c’est une machine plus puissante qui stocke et distribue du contenu sur Internet.

Les paquets

Pour envoyer des données, l’hôte expéditeur les encapsule dans un ou plusieurs paquets. Ces paquets contiennent non seulement les données à envoyer mais aussi des en-têtes qui fournissent, entres autres, des informations sur l’hôte expéditeur et l’hôte destinataire. Une fois préparés, ces paquets sont ensuite acheminés vers l’hôte destinataire. Le destinataire récupère les paquets et reconstitue les données à la réception.

Les commutateurs réseau (switch)

Comme toute donnée informatique, un paquet est composé d’une longue série de bits. Chaque bit d’un paquet doit donc se déplacer jusqu’à destination. Cependant, les supports physiques sur lesquels ils doivent se déplacer sont divers et variés. Parfois c’est une fibre optique, parfois c’est un câble de cuivre, ou encore des ondes radio ! Les méthodes pour déplacer les bits diffèrent évidemment selon le support physique.

Faire passer les bits d’un paquet d’un support physique à l’autre, c’est le rôle des commutateurs réseau (“switch” en anglais). Sur son trajet, un paquet passera sans doute par plusieurs commutateurs. Le commutateur le récupère depuis un segment du trajet sur un type de support physique pour le transférer via un autre support physique.

Diagramme du rôle d'un commutateur réseau. Il récupère un paquet d'un segment sur câble de cuivre pour le transférer sur un segment sur fibre optique.
Diagramme du rôle du commutateur réseau. Créé avec draw.io sur lacontrevoie.fr.

Les routeurs

Tous les paquets qui circulent sur Internet ne se rendent pas non plus tous à la même destination ! Il y a donc des intersections dans le réseau et le paquet doit être dirigé vers la bonne destination, c’est-à-dire qu’il doit être routé. Ça, c’est le rôle d’un type de commutateur plus sophistiqué : le routeur. Tout comme le commutateur, le routeur peut transférer un paquet d’un support physique à l’autre, mais ce n’est pas tout. Un routeur est généralement connecté à plusieurs segments à la fois et possède la capacité de déterminer dans quelle direction envoyer un paquet selon sa destination.

Diagramme du rôle du routeur. Le routeur est connecté à plusieurs segments et choisit la bonne direction vers laquelle envoyer le paquet pour qu'il arrive au client destinataire.
Diagramme du rôle du routeur. Créé avec draw.io sur lacontrevoie.fr.

Plus loin, nous étudierons de plus près comment un routeur décide vers où envoyer un paquet grâce à sa table de commutation. Mais avant cela, nous devons comprendre les interfaces réseau.

Les interfaces réseau

Chaque appareil connecté à Internet, client, serveur, routeur, possède au moins une interface réseau. C’est la carte réseau qui fait le pont entre l’appareil et le support physique lié au reste du réseau : on y branche notre câble ethernet, par exemple. L’interface est donc une sorte de frontière entre un appareil et le réseau. Un client n’a typiquement qu’une seule interface puisqu’il n’a qu’une connexion au réseau. Par contre, un routeur en a plusieurs : une pour chacune de ses connexions dans le réseau.

Diagramme des interfaces réseau. Chaque interface a sa propre addresse IPv4. Les clients ont une interface tandis que les routeurs en ont plusieurs.
Diagramme des interfaces réseau. Créé avec draw.io sur lacontrevoie.fr.

Sur Internet, une adresse IP est associée `a chaque interface, ce qui permet de l’identifier de manière unique. Voyons donc ce qu’est une adresse IP, et en particulier, une adresse IPv4.

Qu’est-ce qu’une adresse IPv4 ?

Comme on vient de le voir, une adresse IP identifie non pas un appareil particulier mais plutôt son interface réseau. Avant s’interroger sur ce qu’est une adresse IPv4, commençons par comprendre ce que veut dire IP.

Qu’est-ce que IP ?

Dans l’article précédent sur l’architecture d’Internet, nous avons eu l’occasion d’examiner les différentes couches de protocoles qu’un paquet de données doit traverser pour être envoyé et réceptionné. L’adressage et le routage, c’est la fonction principale du protocole IP de la couche réseau.

IP (" I nternet P rotocol" ou “protocole internet” en français), s’occupe d’acheminer les paquets vers leurs destinations respectives, c’est-à-dire de leur routage. Ce protocole définit les adresses IP qui identifient de façon unique chaque hôte connecté. De plus, il est exécuté dans tous les hôtes (clients et serveurs) et tous les routeurs qui font partie du réseau Internet.

Dans l’hôte expéditeur, IP ajoute un datagramme en tête de chaque paquet à transmettre, qui contient entres autres l’adresse IP du destinataire et de l’expéditeur. Dans le routeur, IP maintient une table de transfert et exécute des algorithmes de routage qui analysent l’adresse de destination d’un paquet pour déterminer la direction dans laquelle le transférer.

L’anatomie d’une adresse IPv4

Une adresse IPv4, donc, c’est une adresse de la version 4 du protocole Internet. Ce sont les adresses les plus courantes sur Internet à présent. Toutefois, une nouvelle version du protocole Internet existe aussi aujourd’hui, IPv6, et avec elle, un nouveau système d’adressage auquel nous jetterons un coup d’œil à la fin de cet article.

Une adresse IPv4, c’est un nombre de 32 bits (4 octets). On la représente sous forme de quatre nombres entiers positifs séparés par des points. Chacun de ces nombres représentent un octet (8 bits). Prenons par exemple une adresse arbitraire : 198.42.214.5. Le nombre 198 est l’équivalent en base 10 du premier octet de l’adresse ; 42 représente le deuxième octet, etc. Regardons cette adresse en binaire :

Notation décimale198``42``214``5Notation binaire11000110``00101010``11010110``00000101

Avec cette limitation à 32 bits, les adresses IPv4 ne sont pas infinies. La plus petite adresse possible est 0.0.0.0 et la plus grande, c’est 255.255.255.255 :

Décimal         : Binaire
0.0.0.0         : 00000000 00000000 00000000 00000000
255.255.255.255 : 11111111 11111111 11111111 11111111

La table de commutation d’un routeur

Un routeur a pour tâche d’examiner l’en-tête du paquet qui lui parvient pour y lire l’adresse de destination afin de pouvoir le transférer vers son interface réseau de sortie la plus appropriée. IP maintient une table de commutation (“Forwarding information base” en anglais, ou FIB) dans le routeur. Son algorithme de routage en fait usage pour déterminer vers quelle sortie envoyer le paquet. Imaginons à titre d’exemple un routage d’adresses IP de 4 bits :

Diagramme du routage d'un paquet grâce à la table de commutation d'un routeur. L'addresse IPv4 dans l'en-tête du paquet dit au routeur quelle interface utiliser comme sortie.
Diagramme du routage d’un paquet grâce à la table de commutation d’un routeur. Créé avec draw.io sur lacontrevoie.fr.

Dans cet exemple, le routeur lit l’en-tête du paquet qui lui provient et consulte sa table de commutation pour déterminer qu’il doit transférer ce paquet vers son interface de sortie numéro 2.

Cependant, il existe environ 4 milliards d’adresses IPv4 de 32 bits. Clairement, un routeur avec une table de commutation de 4 milliards de lignes serait extrêmement lent et inefficace, même avec un algorithme de routage très bien optimisé ! Ne serait-il donc pas plus pratique pour le routeur de simplement lire les quelques premiers bits pour savoir quelle interface de sortie utiliser ? En effet ! C’est un des avantages du concept des sous-réseaux.

Masques de sous-réseau

Les premiers bits d’une adresse IP représentent le sous-réseau (“subnetwork” ou “subnet” en anglais) dans lequel se trouve l’appareil, et les bits suivants identifient l’interface elle-même. Un routeur n’a donc généralement qu’à regarder la partie réseau de l’adresse pour savoir où envoyer le paquet qui lui provient. Pour isoler les bits qui représentent le sous-réseau, le routeur utilise un masque de sous-réseau. Alors combien de bits représentent la partie sous-réseau de l’adresse ? La réponse à cette question n’est pas aussi simple qu’on pourrait le croire…

L’adressage IP par classe

On l’aura compris dans l’article sur l’architecture d’Internet, Internet est un réseau composé de sous-réseaux. Les adresses IP sont assignées par plages selon la taille du sous-réseau. À l’origine, les plages d’adresses étaient catégorisées en plusieurs classes : A pour les plus grandes, B pour les moyennes et C pour les plus petites. Les 8, 16 ou 24 premiers bits de l’adresse IPv4 représentaient alors l’adresse du sous-réseau, et les bits restants identifiaient l’hôte à l’intérieur de ce sous-réseau.

Représentation des adresses IPv4 de classe A, B et C avec l'adressage par classe. Les sous-réseaux de classe A ont leur 8 premiers bits comme adresse du réseau, ce qui veut dire qu'il y avait 126 sous-réseaux possibles chacun avec 16777214 hotes possibles. Les sous-réseaux de classe B ont leur 16 premiers bits comme adresse du réseau, ce qui veut dire qu'il y avait 16384 sous-réseaux possibles chacun avec 65534 hotes possibles. Les sous-réseaux de classe C ont leur 24 premiers bits comme adresse du réseau, ce qui veut dire qu'il y avait 2097152 sous-réseaux possibles chacun avec 254 hotes possibles.
Représentation des adresses IPv4 de classe A, B, et C. Créé avec draw.io sur lacontrevoie.fr.

Pour isoler les bits qui représentaient le sous-réseau, il fallait d’abord identifier sa classe. Un premier bit à 0 indiquait la classe A ; les deux premiers bits à 1 et 0 respectivement, la classe B ; les trois premiers à 110, la classe C. On pouvait donc ensuite appliquer le masque de sous-réseau approprié et faire l’opération bitwise ET pour identifier le sous-réseau. Par exemple, avec une adresse de classe B :

IP         : 10100111 00101101 11000110 00000010 : 167.45.198.2
Masque B   : 11111111 11111111 00000000 00000000 : 255.255.0.0
Bitwise &  : 10100111 00101101 00000000 00000000 : 167.45.0.0

Cependant, dans les années 1990, avoir 1, 2 ou 3 octets pour la partie sous-réseaux de l’adresse s’est avéré être une exigence trop rigide pour pouvoir subvenir aux nombre croissant d’entreprises avec des sous-réseaux de petite ou moyenne taille. Un sous-réseau de classe C ne pouvait accommoder que 254 postes ; trop peu pour la plupart des entreprises. Mais un sous-réseau de classe B, qui, lui, pouvait accommoder 65 354 postes, était bien trop grand ! Pourtant, avec ce système, une entreprise qui souhaitait connecter 2 000 postes se voyait alloué un sous-réseau de classe B. Un tel cas représentait une perte de 63,000 adresses, qui ne pouvaient être utilisées par d’autres entreprises.

Cette notion de classe d’adresses IPv4 est donc rapidement devenue obsolète au profit d’un système d’adressage sans classe qui est toujours d’actualité : CIDR.

L’adressage IP sans classe : CIDR

Le Classless Inter-Domain Routing ( CIDR) a généralisé la notion de sous-réseau en la rendant plus flexible. Dans ce système, la partie de l’adresse qui identifie le sous-réseau n’est pas de taille fixe comme celles des classes ci-dessus. Les masques de sous-réseaux CIDR sont de taille variable, ce qui permet une utilisation bien plus efficace de l’espace d’adressage IP.

Comme le masque de sous-réseau ne peut plus être déduit de l’adresse IP elle-même, CIDR introduit une nouvelle notation pour indiquer le nombre de bits à considérer pour le sous-réseau. L’adresse IPv4 de quatre octets peut être suivie d’une barre oblique, puis du nombre de bits qui représente le sous-réseau. Par exemple, 128.42.42.201/28 indique que les 28 premiers bits de l’adresse sont le sous-réseau :

IP         : 10000000 00101010 00101010 11001001 : 128.42.42.201
Masque /28 : 11111111 11111111 11111111 11110000 : 255.255.255.240
Bitwise &  : 10000000 00101010 00101010 11000000 : 128.42.42.192

Le calcul du nombre d’adresses d’un sous-réseau est 2taille de l’adresse - masque. Il y a donc 232-28 = 24 = 16 adresses IPv4 possibles dans la plage de ce sous-réseau de 28 bits :

IP         : 10000000 00101010 00101010 11001001 : 128.42.42.201
Masque /28 : 11111111 11111111 11111111 11110000 : 255.255.255.240
IP min     : 10000000 00101010 00101010 11000000 : 128.42.42.192
IP max     : 10000000 00101010 00101010 11001111 : 128.42.42.207

Un fournisseur d’accès internet peut ainsi se voir allouer un bloc /19, soit 232-19 = 213 = 8 192 adresses Ipv4. Il peut alors créer des sous-réseaux de tailles variable à l’intérieur de celui-ci en fonction des besoins de ses clients. Par exemple, il pourra fournir à une entreprise de 200 postes un sous-réseau /24 (232-24 = 28 = 256 adresses), puis à une autre entreprise de 2 000 postes, un sous-réseau /20 (232-21 = 211 = 2 048 adresses).

Masques de sous-réseau et routage

Mais en pratique, comment fonctionnent ces masques de sous-réseau CIDR pour le routage d’un paquet ? Pour le comprendre, schématisons une partie fictive du réseau Internet.

Diagramme de sous-réseaux, routeurs et hôtes clients dotés d'interface avec des adresses IPv4 et une table de commutation pour déterminer le saut suivant dans la route d'un paquet.
Diagramme d’un petite partie fictive d’Internet. Créé avec draw.io sur lacontrevoie.fr.

On remarquera tout d’abord que chaque client et routeur possède une table de commutation qui lui indique où envoyer les paquets. Le routeur tout en haut de ce diagramme a deux entrées dans sa table de commutation. La première indique que tous les paquets qui lui proviennent dont la destination commence avec les 24 premiers bits : 151.147.106.x doivent être envoyés vers l’interface du second routeur dont l’adresse est 151.147.106.62. C’est le “saut suivant” (“next hop” en anglais) sur la route vers leur destination. La seconde entrée de cette même table de commutation indique que par défaut, tous les paquets devront être envoyés à 163.243.250.31 (un autre routeur connecté à l’interface R1-1, qui ne figure pas sur le schéma), quelle que soit leur destination ( 0.0.0.0/0).

Il y a trois sous-réseaux distincts dans ce diagramme :

  • Le sous réseau 151.147.106.60 de 30 bits, qui contient les interfaces des deux routeurs R1-3 ( 151.147.106.61) et R2-1 ( 151.147.106.62).
  • Un sous-réseau de 28 bits, 151.147.106.0, qui contient l’interface du routeur R2-3 ( 151.147.106.1) et celle du client B1 ( 151.147.106.2). Les adresses des interfaces à l’intérieur de ce sous réseau doivent être comprises entre 151.147.106.1 et 151.147.106.14.
  • Et un sous-réseau de 29 bits, 151.147.106.16, qui contient l’interface du routeur R2-2 ( 151.147.106.17) et celle du client A1 ( 151.147.106.18). Les interfaces à l’intérieur de ce sous-réseau doivent avoir des adresses comprises entre 151.147.106.16 et 151.147.106.22.

Bien entendu, les sous-réseaux ne peuvent pas se chevaucher. On n’aurait pas pu, par exemple, donner l’adresse 151.147.106.3 à l’interface R2-2 puisque cette adresse fait partie du sous-réseau de l’interface R2-3.

Adresses IPv4 réservées

Environ 600 millions d’adresses IPv4 sont réservées pour des utilisations spécifiques, et sont donc interdites d’usage. Ces adresses sont utilisées entres autres pour le trafic multicast, pour maintenir les tables des routeurs, pour traduire l’IPv4 en IPv6, ou pour fournir un espace d’adressage sans restriction sur les réseaux privés.

Bloc d’adresses Plage d’adresses Nombre d’adresses Usage
0.0.0.0/8 0.0.0.0 – 0.255.255.255 16 777 216 Logiciel
10.0.0.0/8 10.0.0.0 – 10.255.255.255 16 777 216 Réseau privé : communications locales
100.64.0.0/10 100.64.0.0 – 100.127.255.255 4 194 304 Réseau privé : communications fournisseur d’accès
127.0.0.0/8 127.0.0.0 – 127.255.255.255 16 777 216 Hôte : adresses bouclage localhost (“loopback”)
169.254.0.0/16 169.254.0.0 – 169.254.255.255 65 536 Sous-réseau : communication locale entre deux hôtes connectés directement
172.16.0.0/12 172.16.0.0 – 172.31.255.255 1 048 576 Réseau privé : communications locales
192.0.0.0/24 192.0.0.0 – 192.0.0.255 256 Réseau privé : affectation de protocoles d’IETF
192.0.2.0/24 192.0.2.0 – 192.0.2.255 256 Documentation : TEST-NET-1
192.88.99.0/24 192.88.99.0 – 192.88.99.255 256 Reservé : relai 6to4
192.168.0.0/16 192.168.0.0 – 192.168.255.255 65 536 Réseau privé : communication locales
198.18.0.0/15 198.18.0.0 – 198.19.255.255 131 072 Réseau privé : tests de performance entre deux sous réseaux connectés
198.51.100.0/24 198.51.100.0 – 198.51.100.255 256 Documentation : TEST-NET-2
203.0.113.0/24 203.0.113.0 – 203.0.113.255 256 Documentation : TEST-NET-3
224.0.0.0/4 224.0.0.0 – 239.255.255.255 268 435 456 Réservé : IPv4 multicast
233.252.0.0/24 233.252.0.0 – 233.252.0.255 256 Documentation : MCAST-TEST-NET
240.0.0.0/4 240.0.0.0 – 255.255.255.254 268 435 455 Réservé : préservé pour utilisation future
255.255.255.255/32 255.255.255.255 1 Sous réseau : adresse de diffusion par défaut

Comme on peut le voir dans le tableau, certaines adresses sont réservées à des fins techniques (tests, documentation, affectations de protocoles). Mais que veut dire “réseau privé”, exactement ?

Adresses publiques et privées

Une adresse publique est une adresse assignée à notre routeur par le fournisseur d’accès à Internet qui permet de communiquer sur Internet. Avec une adresse publique, on peut envoyer et recevoir des paquets d’un bout à l’autre du réseau Internet.

Une adresse privée est assignée par le routeur à chaque appareil qui lui est connecté. Cette adresse privée permet la communication au sein du même sous-réseau, par exemple entre appareils connectés au même réseau WiFi. Bien entendu, un appareil ne peut pas utiliser son adresse privée pour envoyer ses paquets en dehors de son sous-réseau. Ce système d’adresses privées favorise l’économie d’adresses IPv4 car plusieurs appareils peuvent avoir la même adresse privée tant qu’ils ne sont pas sur le même réseau.

Adresses de réseau et adresses de diffusion (broadcast)

Les adresses de réseau et celles de diffusion (“broadcast adresses” en anglais), ne figurent pas dans la liste d’adresses réservées ci-dessus. Pourtant, elles ne doivent généralement pas être utilisées non plus.

La plage d’adresses d’un sous-réseau commence avec l’ adresse du réseau lui-même. Par exemple, l’adresse 130.200.189.45/24 fait partie d’un bloc qui commence avec l’adresse 130.200.189.0/24. Cette dernière est considérée l’adresse du réseau lui-même et ne peut être assignée à une interface particulière.

Il en va de même avec la dernière adresse d’une plage d’adresses. Si l’on reprend l’exemple précédent, la dernière adresse du bloc est 130.200.189.255/24. On appelle celle-ci l’ adresse de diffusion car lorsqu’on lui envoie un paquet, le paquet sera transmis à toutes les interfaces du réseau. De ce fait, cette adresse de diffusion ne peut pas non plus être assignée à un appareil particulière.

Contrer la pénurie d’adresses IPv4

Une longueur de 32 bits veut dire qu’il y a environ 4 milliards d’adresses IPv4. C’est beaucoup ! Et pourtant, ce n’est pas assez pour tous les appareils connectés à ce réseau mondial. 4 milliards, c’est seulement la moitié de la population humaine. Les habitants de pays en développement utilisent de plus en plus Internet. De plus, un nombre croissant d’objets se voient aussi connectés à Internet : montres, véhicules, alarmes, villes intelligentes, systèmes de surveillance sismique, ou encore domestiques… En bref, tout ce qui fait partie de l’Internet des objets.

Avec la croissance de l’utilisation d’Internet dans les années 90, l’Internet Engineering Task Force s’est penché sur la question d’un successeur à IPv4 qui pourrait proposer beaucoup plus d’adresses…

Les adresses IPv6

La version 6 d’IP augmente considérablement la taille des adresses IP de 32 à 128 bits. 128 bits, c’est une capacité de plus de 340 sextillions adresses. C’est largement plus que suffisant pour que chaque grain de sable sur terre ait sa propre adresse IP, voire plusieurs !

Une adresse IPv6 s’écrit en hexadécimal, avec 8 groupes de 16 bits (2 octets) séparés d’un double point “:” :

2001:0db8:0000:85a3:0000:0000:ac1f:8001

On peut raccourcir la notation en supprimant quelques zéros non-significatifs :

2001:db8:0:85a3:0:0:ac1f:8001

Et on peut même l’abréger encore s’il y a deux ou plusieurs groupes consécutifs de 16 bits nuls en conservant uniquement les “:” de chaque côté de la suite de chiffres omise, comme ceci :

2001:db8:0:85a3::ac1f:8001

De plus, les masques et les notations CIDR s’appliquent aussi aux adresses IPv6.

Comme il n’est pas envisageable d’éteindre la totalité d’Internet le temps de mettre tous les hôtes et routeurs à la nouvelle version d’IP, IPv6 est déployé progressivement sur Internet. IPv6 est rétrocompatible avec IPv4, mais le contraire n’est pas garanti. Certains routeurs et hôtes sont incapables d’exécuter IPv6. En attendant de les remplacer, le paquet IPv6 qui doit passer par un routeur incompatible peut se voir temporairement déguisé en IPv4 et restitué en IPv6 plus tard sur son chemin, si possible.


Une autre astuce à partager, une petite question à poser, ou une découverte intéressante à propos des adresses IPv4, du routage ou des sous-réseaux ? Je serai ravie de lire et de répondre à tout ça dans les commentaires. Bon code !

Sources et lectures supplémentaires

  • Kurose, J. F., Ross, K. W., 2013, Computer Networking: A Top Down Approach, Sixth Edition, Chapter 1: Computer Networks and the Internet, pp. 1-82.
  • Wikipédia, Sous-réseau [ Wikipédia]
  • Wikipedia, IPv4 [ Wikipedia]
  • RFC editor, Special-Purpose IP Address Registries (2013) [ rfc-editor.org]

Commentaires

Articles connexes

Créer et tuer des processus fils en C

Que ce soit pour exécuter un autre programme depuis le notre ou pour exécuter une partie de notre programme en parallèle, il est souvent très utile de créer des processus fils.

Lire la suite

Envoyer et intercepter un signal en C

À force d’être confrontés à des segfaults ou a des erreurs de bus, on se sera déjà familiarisé avec l’idée d’un signal informatique.

Lire la suite

L'architecture en couches du réseau Internet

On connaît tous Internet. C’est le réseau informatique qui permet le transfert de données à l’échelle mondiale.

Lire la suite