3.B - Adressage IP et Sous-Réseaux

Dans cette partie, nous allons voir l'adressage IP (IP version 4 et IP version 6), les adresses IP particulières ainsi que la notion de sous-réseau et de découpage en sous-réseaux. Nous présenterons le format de l'adresse IPv4 et IPv6, les classes d'adressage IPv4 et les adresses IP particulières, les adresses privées et le NAT (Network Address Translation) pour convertir les adresses privées en adresses publiques, et enfin les sous-réseaux et l'adressage sans classe.

Internet est le plus grand réseau mondial qui interconnecte tous les réseaux informatiques et permet de transmettre des flux de données, de la vidéo, du son, et même de téléphoner et bien d'autres choses encore.

Pour échanger des informations entre deux ordinateurs ou entre un téléphone et un ordinateur sur Internet, il est nécessaire d'acheminer l'information d'un équipement à un autre. Pour cela, il faut donner à chaque périphérique, à chaque équipement terminal, une adresse IP. L'adresse IP, c'est ce qui va permettre d'identifier, au sein de ce grand réseau mondial, l'équipement qui va être destinataire d'un message ou bien émetteur d'un message. De ce point de vue, Internet peut être présenté comme un gros nuage qui représente un réseau logique. A l'intérieur de ce nuage se trouvent les infrastructures physiques, les câbles, les équipements intermédiaires qui vont permettre de faire circuler un signal de n'importe quelle adresse IP à n'importe quelle autre.

Réseau logique

Internet est une interconnexion de réseaux. Ainsi, dans ce grand réseau logique, on retrouve plusieurs réseaux physiques distincts qui appartiennent à une organisation ou un opérateur et qui sont interconnectés eux-mêmes par des équipements qu'on appelle les routeurs (petit rond orange avec une croix sur l'image suivante).

Réseau physique

Les équipements ont donc une adresse IP qui va les identifier sur Internet, mais aussi une adresse physique. L'adresse physique également appelée adresse MAC est l'adresse de la carte réseau émettrice ou réceptrice sur chaque liaison traversée. Les réseaux physiques sont reliés entre eux par les routeurs. Mais à l'intérieur de chaque réseau physique, on peut avoir d'autres équipements comme les commutateurs, les bornes WiFi, les répéteurs... qui eux, sont reliés par des liaisons physiques. Les liaisons physiques sont soit des liaisons filaires, soit des liaisons sans fil.

Internet est donc l'interconnexion de tous ces réseaux. La distinction réseau physique vs. réseau logique est donc importante. Nous pouvons également l'aborder au niveau des topologies. La topologie physique définit comment les équipements sont reliés entre eux, par quels équipements intermédiaires et par quelles liaisons.

Exemple de réseau physique

Dans la figure ci-dessus, vous voyez un ensemble d'ordinateurs et d'équipements comme les commutateurs, qui permettent de relier entre eux, au sein d'un même réseau local, différents périphériques. On retrouve par exemple des serveurs, des salles de travaux pratiques, ainsi que des équipements de bureau. Cet ensemble d'équipements constitue un réseau local et permet d'échanger des messages entre les différents ordinateurs qui le composent. Pour sortir du réseau local afin d'aller sur Internet, il faut traverser un routeur représenté à gauche. Ce routeur permet donc d'aller à l'extérieur de ce réseau local.

Exemple de réseau logique

Nous allons voir dans la suite qu'il est possible de faire plusieurs sous-réseaux au sein de ce réseau physique, c'est-à-dire plusieurs réseaux IP différents. Sur la figure, deux sous-réseaux IP sont représentés.

Chaque équipement se voit attribué une adresse IP et un masque de sous-réseau (netmask). L'adresse IP identifie l'équipement sur Internet ainsi que le réseau lequel il se trouve. Le masque indique la taille du réseau. Il permet de trouver l'adresse du réseau dans lequel se trouve la station mais surtout l'adresse des autres stations situées dans le même réseau.

Dans l'exemple ci-dessus, il y a deux réseaux distincts, l'un à gauche et l'autre à droite qui sont reliés entre eux par l'intermédiaire du routeur. C'est ce même routeur qui permet d'aller sur Internet comme nou l'avons vu dans la topologie physique.

Il y a donc deux niveaux différents d'un point de vue topologique : la topologie physique qui représente les câblages et les équipements d'interconnexion ; la topologie logique qui définit comment à partir des liaisons et des équipements qui constituent un réseau, on peut former différents sous-réseaux du point de vue d'Internet. Autrement dit, sur Internet, les deux réseaux IP représentés dans la topologie logique sont bien deux réseaux différents.

Petit rappel conversion hexadécimale/ décimale /binaire

Dans la suite, nous aurons besoin de faire des calculs sur les adresses IP qui utilisent les conversions hexadécimales / décimales / binaires. Voici donc un petit rappel sur ce point avant de poursuivre. En hexadécimal, on représente des nombres de zéros jusqu'à 15. Les nombres de 10 à 15 sont notés par une lettre de A (qui correspond à la valeur 10) jusqu'à F (valeur 15). Chaque chiffre héxadécimal est codé sur 4 bits. Sur un octet, la valeur maximale est FF (qui correspond à 255 = 15*16 + 15). Dans le tableau ci-dessous, on liste pour quelques valeurs décimales sur un octet la correspondance Hexadécimal à gauche et celle en binaire à droite. Par exemple, l'équivalent binaire de 0A est 0000 1111 et celui de FF est 1111 1111).

Hexadécimal décimal binaire
00 0 0000 0000
01 1 0000 0001
02 2 0000 0010
03 3 0000 0011
04 4 0000 0100
05 5 0000 0101
06 6 0000 0110
07 7 0000 0111
08 8 0000 1000
09 9 0000 1001
0A 10 0000 1010
0B 11 0000 1011
0C 12 0000 1100
0D 13 0000 1101
0E 14 0000 1110
0F 15 0000 1111
10 16 0001 0000
11 17 0001 0001
12 18 0001 0020
20 32 0010 0000
40 64 0100 0000
F0 240 1111 0000
FF 255 1111 1111

Format des adresses IPv4

Examinons le format de l'adresse IPv4. Une adresse IPv4 s'écrit sur 32 bits, c'est-à-dire quatre octets puisque chaque octet est sur huit bits. Les adresses IPv4 s'écrivent dans la notation décimale pointée, c'est-à-dire sous la forme de 4 nombres décimaux (un par octet soit compris entre 0 et 255) séparés par des points, comme par exemple 134.114.92.8. La première adresse est celle où tous les bits sont à zéro, soit 0.0.0.0, et l'adresse avec tous les bits à un est 255.255.255.255. Avec 32 bits, il y a donc un ensemble d'adresses qui est de 2^32 ce qui représente un peu plus de 4 milliards d'adresses IPv4.

Une adresse IPv4 se décompose en deux parties : la partie réseau et la partie machines. La partie réseau se trouve au début de l'adresse et la partie machine à la fin. Ce qui définit la longueur (en bits) de chaque partie est le masque réseau (netmask en anglais). Plus la partie réseau est petite, plus la partie machine est grande, ce qui signifie que la taille du réseau est plus importante car il peut adresser plus de machines.

Soit par exemple l'adresse 134.214.92.8 à laquelle on associe un masque réseau de longueur 16 bits. Cela signifie que la partie réseau utilise les 2 premiers octets de l'adresse et la partie machines les 2 octets suivants. Pour obtenir l'adresse du réseau dans lequel se situe cette machine, il faut mettre à zéro la partie machines c'est-à-dire les deux derniers octets dans cet exemple. L'adresse du réseau de cette machine est donc 134.214.0.0. C'est cette adresse qui va être utilisée pour atteindre ce réseau en traversant des routeurs intermédiaires. Une fois arrivé dans le réseau destination, la partie machine de l'adresse (ici 92.8) est utilisée pour identifier une machine particulière à l'intérieur de ce réseau. Ainsi, la partie réseau est utilisée par les routeurs pour le routage, c'est-à-dire trouver le chemin jusqu'à atteindre le réseau de destination. La partie machine permet, une fois le réseau atteint, de trouver la machine à l'intérieur de ce réseau.

Classes d'adresses IPv4

Classes d'adressage

Les classes d'adressage IPv4 définissent des tailles de réseau prédéfinies. Elles sont au nombre de cinq notées A, B, C, D et E. La classe E est réservée pour une utilisation future, la classe D pour les adresses multicast. Une adresse multicast est une adresse qui désigne un groupe de machines, c'est-à-dire plusieurs machines sous la même adresse. A droite sur la figure sont indiquées les plages d'adresses dans chacune des classes. Comment retrouver ces différentes plages ? Par définition, la classe A correspond à une valeur zéro pour le premier bit de l'adresse. Il s'agit du bit de poids fort, celui qui se trouve sur le bit 2^7 dans le premier octet. Si ce bit est à 0, comme 2^7 = 128, les adresses de classe A varient de 0 jusqu'à 127.

Pour la classe B, le premier bit de l'adresse vaut un et le deuxième qui vaut zéro. Et donc, par le même raisonnement, la valeur du premier octet varie de 128 jusqu'à 191. En effet, comme 2^6 = 64, si le deuxième bit est à zéro, la valeur maximale du premier octet est 255 - 64 = 191.

Pour la classe C, le bit 2^7 est à 1, le bit 2^6 à 1 et le troisième bit (2^5) à 0. Donc, par le même raisonnement, la valeur du premier octet varie de 192 à 223.

Dernière chose à remarquer : pour chaque classe, une taille de réseau est définie. Ainsi, pour les adresses de classe A, la partie réseau est le premier octet et il reste donc trois octets pour les machines. On peut donc mettre environ 2^24 machines dans un réseau de classe A. De la même manière, pour la classe B, la partie réseau de l'adresse est constituée des deux premiers octets et il reste donc deux octets pour les machines. Ces réseaux sont donc plus petits que les réseaux de classe A et on peut y mettre environ 2^16 machines soit 65536. Une autre chose à noter est que les réseaux de classe A sont très peu nombreaux : il y a 127 réseaux de classe A qui sont numérotés dans le premier octet. Pour les réseaux de classe B, il y a deux octets pour la partie réseau, sachant que les deux premiers bits sont fixés. Donc en fait, cela fait 2^14 possibilités soit 16384 : de 128.0 jusqu'à 191.255. Pour la classe C, on a un seul octet pour les machines, ce qui permet de numéroter environ 2^8, c'est-à-dire 256 machines dans chaque réseau. Et par contre, on a ici 21 bits qui varient pour la partie réseau et donc on est à 2^21 possibilités pour numéroter les réseaux de classe C.

Les adresses réseaux sont distribuées par un organisme international à but non lucratif : ICANN (Internet Corporation for Assigned Names and Numbers) puis décentralisé au niveau de chaque pays.

Les adresses IPv4 ont d'abord été attribuées selon ces classes d'adresses, c'est-à-dire qu'une organisation se retrouvait avec soit une adresse de classe A, soit une adresse de classe B, soit une adresse de classe C en fonction de ses besoins et de sa taille. Mais rapidement une limite a été atteinte car le nombre de réseaux disponibles n'était pas suffisant. Pour éviter de gaspiller des adresses, il faut pouvoir faire des réseaux de tailles variables en fonction du nombre de machines dans chaque réseau. Il faut donc que la partie réseau de l'adresse puisse varier de 0 bit à 32 bits et s'affranchir de ces trois classes prédéfinies. C'est ce que l'on appelle l'adressage CIDR, c'est-à-dire l'adressage sans classe.

Adresses IPv4 particulières

Adresses de réseau et de diffusion

Nous allons examiner les adresses IP particulières. Les adresses IPv4 s'étendent de l'adresse 0.0.0.0 à 255.255.255.255. De manière traditionnelle dans les réseaux, quand tous les bits de l'adresse sont à zéro, c'est l'adresse nulle. C'est donc une adresse qui n'est pas attribuée à une machine ou alors à une machine en attente d'attribution d'une autre adresse. Sur Internet, l'adresse 0.0.0.0 a une signification particulière que nous détaillerons plus loin. Il s'agit de l'adresse du réseau qui contient toutes les adresses IP c'est-à-dire celle de tout l'Internet. Elle est utilisée dans les tables de routage comme route par défaut c'est-à-dire celle qui est prise en dernier recours si les autres routes ne correspondent pas à l'adresse destination.

Traditionnellement dans les réseaux, l'adresse avec tous les bits à 1 est utilisée pour la diffusion (broadcast en anglais). De manière théorique, l'adresse 255.255.255.255 est une diffusion sur tout l'Internet. En réalité, la diffusion sur tout l'Internet c'est-à-dire l'envoi d'un message à plus de 4 milliards de destinataires est fort heureusement impossible sinon il y aurait des inondations de messages qui pourraient nuire à son fonctionnement. Elle est bloquée par les routeurs qui ne relaient pas un message qui serait envoyé à l'adresse 255.255.255.255. En pratique, un message à destination de cette adresse se traduit par une diffusion locale, c'est-à-dire une diffusion dans le réseau local dans lequel se trouve l'émetteur de cette diffusion.

Maintenant, il est possible de faire une diffusion dans un autre réseau que celui où l'on se trouve en utilisant l'adresse avec tous les bits de la partie machine à 1 dans un réseau donné. Par exemple, dans le réseau 132.227.0.0 de classe B, la partie réseau de l'adresse est constituée des deux premiers octets soit 132.227, la partie machine est les deux derniers octets. Pour faire une diffusion dans ce réseau, il faut donc utiliser l'adresse 132.227.255.255.

Adresse localhost

Une autre adresse particulière est l'adresse de bouclage interne ou loopback en anglais communément appelée localhost. Elle permet de tester la pile TCP/IP locale, c'est-à-dire de vérifier qu'on peut utiliser les protocoles d'Internet sur la machine sans passer par une carte réseau. N'importe quelle machine dispose de cette adresse locale après son démarrage et peut en faire usage via le nom localhost ou l'adresse IP 127.0.0.1. Elle permet par exemple d'installer un serveur Web sur sa machine et de le contacter à partir d'un navigateur Web en utilisant cette adresse.

Adresses privées

On va maintenant passer aux adresses privées (RFC 1918), qui sont elles aussi des adresses particulières qui ont été définies pour un usage chez soi. La norme a défini une plage d'adresses privées dans chaque classe d'adresses :

  • Classe A : de 10.0.0.0 à 10.255.255.255
  • Classe B : de 172.16.0.0 à 172.31.255.255
  • Classe C : de 192.168.0.0 à 192.168.255.255

Ces adresses peuvent être utilisées par tout le monde pour un usage interne ou privé et ne sont donc pas utilisables sur Internet. Cela signifie que si un message est envoyé à l'adresse 192.168.0.1, il pourra atteindre sa destination dans un réseau privé mais ne sera pas routé sur Internet. En réalité, tout le monde ou presque utilise les adresses privées chez soi : par exemple, si vous avez une box chez vous, ces adresses sont celles que la box utilise pour les communications internes entre la box et les équipements qui sont chez vous. Quand ces équipements veulent aller sur Internet, ils partagent l'adresse publique dont la box dispose c'est-à-dire que leur adresse privée est remplacée par l'adresse publique attribuée par votre fournisseur d'accès à Internet. Quel est l'intérêt de ces adresses ? Elles permettent d'économiser des adresses IP.

Adresses privées et le NAT

Si une entreprise qui utilise des adresses privées souhaite tout de même disposer d'une connexion à Internet, elle doit demander une adresse publique et faire des conversions entre les adresses privées et l'adresse publique. Le NAT (Network Address Translation) permet de remplacer une adresse privée par une adresse publique, ce qui permet d'accéder à Internet. L'intérêt de ce mécanisme est d'économiser des adresses IP publiques en permettant de partager une seule adresse publique à plusieurs équipements disposant d'une adresse privée. C'est par exemple ce que fait la box chez vous : elle dispose d'une seule adresse publique, attribuée par votre fournisseur d'accès à Internet, qu'elle partage à tous les équipements qui sont dans votre réseau local (en Wifi ou en filaire) après leur avoir attribué une adresse privée à chacun.

Exemple de réseau utilisant un NAT

Vous avez ici le réseau d'une entreprise qui est constitué de plusieurs ordinateurs : un, deux, trois, cinq, six, sept. L'équipement numéro quatre est le routeur qui permet de sortir du réseau local de l'entreprise, typiquement l'équivalent de la box. Il permet de relier le réseau local de l'entreprise à Internet en utilisant des adresses privées en interne. Dans cet exemple, la machine 1 a l'adresse 10.0.0.1, la machine 2 a l'adresse 10.0.0.2, etc. Le routeur lui-même a une carte réseau dans le réseau local de l'entreprise en 10.0.0.4.

Pour faire le lien avec Internet, il a aussi une adresse publique, ici 198.60.42.12. Ainsi, à chaque fois qu'un message sort du réseau local pour aller sur Internet, l'adresse privée est remplacée par l'adresse publique dans l'entête IP des messages qui vont sortir. On parle ici de l'adresse IP source car ce sont les messages qui sortent. Cela permet, lorsque l'on va sur Internet, d'avoir finalement l'adresse IP de la box alors que l'on était une machine dans le réseau local de l'entreprise. C'est ce qu'on appelle le NAT.

Autre exemple d'utilisation du NAT

Si l'on regarde encore un peu plus en détail ce mécanisme, vous avez sur l'exemple ci-dessus, une requête qui sort du réseau local avec comme adresse IP source 10.0.0.2.

Dans cet exemple sont représentés les entêtes des messages ; pas toutes les entêtes, mais juste : adresse IP source | adresse IP destination | port source | port destination. Le port destination est ici le port 80 puisqu'on va vers un serveur web et le port source 5555 est le port utilisé par le navigateur web au niveau de la machine locale.

Quand le paquet traverse la box, le NAT remplace l'adresse IP source privée (ici 10.0.0.2) par l'adresse IP publique de la box (ici 132.227.71.30) comme cela est attendu. Il se peut que le port source change également comme c'est le cas ici : 5555 est remplacé par 2222. Ce port source va servir quand le paquet va revenir, c'est-à-dire quand la réponse HTTP du serveur web va revenir pour retourner jusqu'à la machine locale.

Dans la réponse HTTP, ce port source devient le port destination et permet de retrouver l'adresse IP de la machine source grâce à la table NAT. La table NAT stocke pour tous les paquets qui sortent, l'adresse IP source d'origine et le port source d'origine. Dans cet exemple, quand on retraverse la box au retour, dans la réponse HTTP, la passerelle NAT va remettre l'adresse IP source et le port source d'origine pour pouvoir être réacheminé vers la machine locale. Pourquoi le port source peut-il changer ? Très simplement pour des questions d'index dans la table NAT, c'est-à-dire que si une autre machine utilise déjà le port source 5555, l'index 5555 est déjà utilisé, il est donc remplacé par un autre index disponible, ici 2222.

Dernier exemple d'utilisation du NAT

Pour finir sur le NAT, examinons l'exemple d'une requête entrante. Autrement dit, il y a quelqu'un qui est à l'extérieur sur Internet qui s'adresse à un serveur qui se trouve dans le réseau local, derrière la box. Ce serveur utilise lui aussi une adresse privée. Mais depuis l'extérieur, l'adresse connue de ce serveur et l'adresse publique de la box.

Le mécanisme est similaire au cas de la requête sortante : quand la requête entre dans la box, elle remplace l'adresse IP destination de la box (adresse publique) par l'adresse (privée) sur laquelle se trouve le serveur à atteindre. Dans l'exemple, le serveur est un serveur telnet (parce que le port destination est 23) se trouvant sur la machine 10.0.0.2. La table NAT dans la box référence pour chaque serveur qui se trouve dans le réseau local interne son adresse privée et son numéro de port. Il s'agit du NAT port forwarding.

Sous-réseau IPv4 et netmask

Nous avons vu qu'une adresse IPv4 se décompose en deux parties, la partie réseau et la partie machine, la longueur de chaque partie étant fixée par la classe de l'adresse. Cela manque de flexibilité car les classes d'adresses A, B et C ne définissent ainsi que trois tailles de réseau. Comme nous l'avons vu précédemment, une adresse réseau de classe A peut contenir environ 2^24 machines, une adresse de classe B environ 2^16 soit 65536 machines et 2^8=256 machines pour une classe C. Pour faire des réseaux de taille intermédiaire, on définit la notion de sous-réseaux.

Notion de sous-réseau

Un sous-réseau est un réseau qui est issu du découpage d'un réseau de classe A, B ou C en plusieurs sous-réseaux, chaque sous-réseau étant une partie du réseau de la classe. Pour faire ce découpage et numéroter les sous-réseaux, les premiers bits de la partie machine de l'adresse sont utilisés. Sur la figure ci-dessous, cela correspond à la partie SUBNET_ID. NET_ID correspond à la partie réseau de l'adresse avant découpage soit le premier octet pour une classe A, les deux premiers pour une classe B, les trois premiers pour une classe C.

Découpage d'un réseau en sous réseaux

Le reste de la partie machine HOST_ID permet, dans chaque sous-réseau, de donner des adresses aux machines. Pour déterminer la taille d'un sous-réseau, c'est-à-dire le nombre de machines qu'il peut contenir, on définit le masque réseau ou netmask comme nous le verrons juste après.

Voyons un exemple concret de découpage en sous-réseaux. Prenons le réseau 134.214.0.0 qui est attribué à l'Université Claude-Bernard Lyon 1. Ce réseau sera divisé en 64 sous-réseaux dans le but de créer un réseau différent pour chaque bâtiment de l'université. L'adresse du réseau est 134.214.0.0. Elle a été fixée par le fournisseur d'accès à Internet de l'Université qui est Renater. Il s'agit d'une adresse de classe B ce qui signifie que les deux premiers octets constituent la partie réseau soit NET_ID=134.214. Pour numéroter des sous-réseaux, il faut prendre un certain nombre de bits dans le troisième octet. Ici, nous voulons créer 64 sous-réseaux. Pour ce faire, 6 bits sont nécessaires car 2^6 = 64. Pour chaque sous-réseau, la partie réseau/sous-réseau de l'adresse fait donc 8+8+6=22 bits.

Découpage d'un réseau en sous réseaux

Il reste alors 32-22=10 bits pour la partie machines, les deux derniers bits du troisième octet et les 8 bits du dernier octet. Donc chaque sous-réseau peut contenir jusqu'à 2^10=1024 machines. Dans les adresses particulières, on a vu qu'il faut pouvoir désigner l'adresse du sous-réseau et l'adresse de diffusion dans le sous-réseau. Il reste 1022 adresses pour les machines dans chaque sous réseau. Pour obtenir l'adresse d'un sous-réseau, il faut mettre tous les bits de la partie machines à zéro. Pour l'adresse de diffusion, il faut mettre tous les bits de la partie machines à un. Cette adresse permet d'envoyer un message à toutes les machines se trouvant l'intérieur d'un sous-réseau.

La liste des 64 sous-réseaux est 134.214.0.0, 134.214.4.0, 134.214.8.0, ..., 132.248.0, 134.214.252.0. Il s'agit des multiples de 4 dans le troisième octet. En effet, la première adresse est obtenue en mettant les 6 bits de SUBNET_ID à 0, la deuxième en mettant les 5 premiers bits à 0 puis le 6ème bit soit le bit 2^2 à 1, et ainsi de suite jusqu'à mettre les 6 bits à 1 pour obtenir la dernière adresse.

Quand on numérote les sous-réseaux, on commence par tous les bits à zéro dans la partie sous-réseau (SUBNET_ID) et on peut aller jusqu'à mettre tous les bits à un dans la partie sous-réseau. Cela ne pose pas de problème et c'est la pratique usuelle.

Masque de sous-réseau

Le masque de réseau ou de sous-réseau, netmaask en anglais permet de donner la taille d'un réseau ou d'un sous-réseau c'est-à-dire le nombre de bits dans l'adresse réservés pour les machines (HOST_ID). En réalité, le masque indique le nombre de bits dans l'adresse correspondant à la partie réseau et sous-réseau (NET_ID + SUBNET_ID). Dans l'exemple de découpage en sous-réseaux réalisé dans la section précédente, NET_ID est sur 16 bits, SUBNET_ID sur 6 bits et HOST_ID sur 10 bits.

Il y a deux manières d'écrire le masque :

  • Soit avec la notation slash (également appelée notation CIDR) avec un nombre qui indique la taille du masque. Dans notre exemple, le masque dans cette notation est /22 car la partie réseau et sous-réseaux de l'adresse d'un sous-réseau correspond aux 22 premiers bits.
  • Soit en décimale pointée comme une adresse IP où tous les bits de la partie réseau et sous-réseaux sont à 1 et tous les bits de la partie machine sont à 0. Dans notre exemple, il se note 255.255.252.0 : dans le troisième octet, tous les bits sont à 1 sauf le bit 2^1 et le bit 2^0.

Dans la notation CIDR, le masque varie de /0 à /32. Si le masque est /x, plus x est grand, plus le sous-réseau est petit car le nombre de bits réservés pour les machines est 32-x. Le nombre de machines dans le sous-réseau est égal à 2^(32-x) - 2 si x est supérieur ou égal à 30. Si x=0, la partie réseau de l'adresse fait 0 bit donc les 32 bits de l'adresse sont pour les machines ; l'adresse du réseau qui correspond à tous les bits de la partie machines à 0 est nécessairement 0.0.0.0. Le réseau 0.0.0.0/0 contient toutes les adresses d'Internet.

Si x=1, la partie réseau de l'adresse est le bit 2^7 du premier octet qui vaut 0 ou 128. Il y a donc uniquement deux réseaux possibles avec le masque /1 : 0.0.0.0/1 ou 128.0.0.0/1. Chacun de ces sous-réseaux contient la moitié des adresses d'Internet. C'est comme si on avait coupé Internet en deux. Si x=2, on peut faire 4 sous-réseaux qui sont les multiples de 64 dans le premier octet. Internet est alors coupé en quatre, et ainsi de suite jusqu'à atteindre x=30 pour lequel chaque sous-réseau contient seulement deux machines. Le cas x=32 est particulier : il correspond au cas où la partie machine de l'adresse est nulle. Dans ce cas, le sous-réseau contient une seule machine ; l'adresse du sous-réseau est l'adresse de la machine mais aussi l'adresse de diffusion dans le sous-réseau.

Dans la notation du masque en décimale pointée, les valeurs possibles sont :

Notation décimale pointée Notation / ou CIDR Equivalent binaire
0.0.0.0 /0 00000000.00000000.00000000.00000000
128.0.0.0 /1 10000000.00000000.00000000.00000000
192.0.0.0 /2 11000000.00000000.00000000.00000000
224.0.0.0 /3 11100000.00000000.00000000.00000000
240.0.0.0 /4 11110000.00000000.00000000.00000000
248.0.0.0 /5 11111000.00000000.00000000.00000000
252.0.0.0 /6 11111100.00000000.00000000.00000000
254.0.0.0 /7 11111110.00000000.00000000.00000000
255.0.0.0 /8 11111111.00000000.00000000.00000000
255.128.0.0 /9 11111111.10000000.00000000.00000000
255.192.0.0 /10 11111111.11000000.00000000.00000000
... ... ...
255.255.0.0 /16 11111111.11111111.00000000.00000000
255.255.128.0 /17 11111111.11111111.10000000.00000000
... ... ...
255.255.255.0 /24 11111111.11111111.11111111.00000000
255.255.255.128 /25 11111111.11111111.11111111.10000000
... ... ...
255.255.255.255 /32 11111111.11111111.11111111.11111111

Par définition, le masque est une succession de bits à 1 suivie d'une succession de bits à 0. Ainsi, 255.244.0.0 ne peut pas être un masque car en binaire, cela s'écrit 11111111.11110100.00000000.00000000

Le masque de sous-réseau permet de retrouver l'adresse du sous-réseau quand on a l'adresse d'une machine. Prenons n'importe quelle adresse. Si on fait un ET logique entre l'adresse et le masque, cela revient à mettre à zéro la partie machine de l'adresse et donc d'obtenir l'adresse du sous-réseau. Pour savoir si deux machines sont dans le même sous-réseau, il suffit de prendre leur adresse, de faire le ET logique avec le masque de leur sous-réseau et de voir si on obtient la même adresse de sous-réseau. En cas d'égalité, elles sont dans le même sous-réseau.

Terminons par un exercice classique qui consiste à déterminer pour un réseau donné, le nombre de machines qu'il contient, l'adresse de la première et dernière machine ainsi que l'adresse de diffusion dans ce réseau. Soit par exemple le réseau 192.168.8.64/27. La partie réseau de l’adresse est constituée des 3 premiers octets (24 bits) + les bits 2^7, 2^6 et 2^5 du 4ème octet. Comme 2^5=32, les réseaux de taille /27 sont les multiples de 32 dans le dernier octet. 192.168.8.64/27 est donc bien l’adresse d’un réseau car 64 est un multiple de 32. L’adresse du réseau suivant, c'est-à-dire celui de même taille qui se trouve à la suite du réseau donné au départ, est le multiple de 32 suivant dans le dernier octet. L'adresse de diffusion est l'adresse du réseau suivant - 1. L'adresse de la dernière machine est l'adresse de diffusion - 1. Ainsi, nous avons :

  • Adresse du réseau : 192.168.8.64/27
  • Adresse du réseau suivant : 192.168.8.96/27
  • Adresse du réseau précédant : 192.168.8.32/27
  • Première machine = @réseau+1 : 192.168.8.65
  • Adresse de diffusion = @réseau_suivant-1 : 192.168.8.95
  • Dernière machine = @diffusion-1: 192.168.8.94
  • Nombre de machines dans le réseau : 2^(32-27) - 2 = 30

L'adressage sans classe - CIDR

Parlons maintenant de l'adressage géographique ou de l'adressage sans classe (classless) appelé CIDR (Classeless Inter-Domain Routing).

C'est un système d'adressage qui permet d'allouer des adresses IP sous forme de blocs de taille variable (sans considération de classe) en tenant compte de la localisation géographique quand cela est possible. Contrairement aux adresses avec classe qui ont des masques réseaux de longueur 8, 16 ou 24, on peut utiliser des masques de n'importe quelle longueur x avec x compris entre 0 et 32 comme vu précédemment. Cela permet d'éviter le gaspillage des adresses en attribuant aux organisations d'Internet le nombre d'adresses qui correspond au plus près de ses besoins.

Par exemple, si une organisation a besoin de 2000 adresses, elle a besoin de 11 bits pour numéroter ses machines car 2^11 = 2048. Elle a donc besoin d'une adresse réseau dont le masque a une longueur 32-11 = 21 soit un masque /21 = 255.255.248.0

La contrepartie de l'adressage sans classe est qu'une adresse de réseau n'a pas de sens si le masque associé n'est pas donné car le masque n'est plus donné par la classe d'adresses. Par exemple, 134.214.0.0 n'est pas le même réseau selon que le masque est /16 ou /22 comme vu précédemment. Une autre conséquence est que les tables de routage doivent pour chaque réseau destination inclure le netmask soit le masque associé à la destination.

Agrégation de sous-réseaux

L'agrégation de sous-réseaux consiste à regrouper dans une table de routage plusieurs destinations qui ont le même prochain saut et donc de regrouper plusieurs sous-réseaux de tailles variables en un seul afin de réduire le nombre de lignes dans une table de routage.

Une table de routage définit pour chaque destination potentielle le prochain saut, c'est-à-dire l'adresse IP du prochain routeur à traverser pour atteindre la destination. Si pour sortir d'un réseau il n'y a qu'une seule possibilité, c'est-à-dire un seul routeur, il est possible d'agréger toutes les routes en un seul réseau qui regroupe toutes les adresses d'Internet : 0.0.0.0/0. Cette route qui rassemble toutes les adresses d'Internet est appelée la route par défaut car elle est prise en dernier recours si les autres lignes de la table de routage ne correspondent pas à la destination recherchée.

Ainsi, l'agrégation permet de regrouper plusieurs destinations qui ont le même prochain saut pour faire une seule ligne au lieu d'en faire 15 ou 20. Pourquoi est-ce utile ? Car les routeurs doivent être le plus rapide possible. Le travail du routeur consiste à faire suivre chaque paquet IP qui traverse le routeur vers le bon port de sortie. Pour cela, il extrait de l'entête du paquet l'adresse IP destination et cherche dans sa table de routage l'adresse IP du prochain saut correspondant à cette destination. Pour que cette recherche soit la plus rapide possible, il faut que la table de routage contienne le moins de lignes possible. Plus une table de routage est petite, moins elle contient de lignes et plus le routage sera efficace. L'agrégation nous permet d'atteindre cet objectif.

Prenons maintenant un exemple d'agrégation, celui d'une entreprise qui a besoin de 510 adresses IP. Comme 2^9 - 2 = 510, cette entreprise a besoin d'agréger 2 adresses de classe C : par exemple 193.127.32.0/24 et 193.127.33.0/24. Ici, ces adresses de classe C se suivent puisque nous passons de 32 à 33 dans le troisième octet. Pour créer un seul réseau réunissant ces deux sous-réseaux, il suffit de les agréger en prenant 193.127.32.0/23 comme adresse pour le réseau agrégé. Un réseau avec le masque /23 est deux fois plus grand qu'un réseau avec le masque /24 puisque qu'il contient un bit de plus dans la partie machine.

Pour agréger 193.127.33.0/24 et 193.127.34.0/24, c'est un peu plus complexe car 193.127.33.0/23 n'est pas l'adresse d'un réseau. En effet, il s'agit d'une machine dans le réseau 193.127.32.0/23 qui contient toutes les machines dont l'adresse est comprise entre 193.127.32.1 et 193.127.33.254. Les réseaux dont le masque est /23 ont nécessairement un multiple de 2 dans le 3ème octet de l'adresse. 193.127.32.0/23 et 193.127.34.0/23 sont des adresses de réseau mais pas 193.127.33.0/23. Pour revenir à notre problème initial, il est possible d'agréger 193.127.33.0/24 et 193.127.34.0/24 en prenant un réseau encore deux fois plus grand : 193.127.32.0/22. En effet, ce réseau est l'agrégation de 193.127.32.0/24, 193.127.33.0/24, 193.127.34.0/24 et 193.127.35.0/24. Il agrége donc les deux réseaux initiaux mais contient également deux réseaux supplémentaires qui sont 193.127.32.0/24 et 193.127.35.0/24.

L'adressage sans classe s'est répandu assez rapidement sur Internet à partir des années 1995. A partir de ce moment là, l'organisme international qui attribue les adresses IP s'est mis à attribuer les adresses restantes (celles qui n'étaient pas encore attribuées) en fonction des continents, donc des zones géographiques, afin de faciliter les agrégations et le routage.

Pour terminer sur ces adresses sans classe, insistons une nouvelle fois sur le fait qu'à partir du moment où nous faisons des sous-réseaux de tailles variables, donner l'adresse d'un réseau sans donner son masque n'a pas de sens. Par exemple 132.227.0.0/16 et 132.227.0.0/23 sont bien deux réseaux différents qui ont la même adresse réseau mais pas la même taille. Le réseau de taille /23 est plus petit que le réseau de taille /16 puisqu'il contient moins de machines. Le réseau de taille /23 est inclus dans le réseau de taille /16 puisqu'il commence à la même adresse.

Agrégation et tables de routage

Dans une table de routage, on peut trouver des destinations qui ont la même adresse réseau, mais des masques différents avec des prochains sauts différents. Par exemple, on pourrait avoir 132.227.0.1 comme prochain saut pour le réseau 132.227.0.0/23 et 132.227.0.2 pour le réseau 132.227.0.0/16. Dans ce cas, un paquet à destination de 132.227.1.254 doit être routé vers 132.227.0.1 alors qu'un paquet à destination de 132.227.2.254 doit être routé vers 132.227.0.2. En effet, 132.227.1.254 se trouve à la fois dans 132.227.0.0/23 et dans 132.227.0.0/16 mais la route la plus précise est celle en /23. En revanche, 132.227.2.254 est seulement dans le réseau 132.227.0.0/16.

Ainsi, la table de routage doit être classée dans l'ordre des réseaux de plus petite taille vers les réseaux de plus grande taille. Le plus grand réseau qui soit est la route par défaut 0.0.0.0/0 qui se trouve toujours être la dernière ligne de la table de routage. Cette règle s'appelle the longest matching network prefix en anglais.

Configuration d'une interface réseau

Passons maintenant à la configuration d'une interface réseau qui utilise les adresses IPv4. Que faut-il donner comme informations ? Bien évidemment, il faut donner l'adresse IP de la carte réseau sans oublier le masque de sous-réseau. Le masque est essentiel car il donne la taille du réseau dans lequel se trouve cette carte réseau. Il permet également de retrouver l'adresse du sous-réseau et de connaître les machines qui se trouvent dans le même sous-réseau.

Une autre information qu'il est possible de donner quand on configure l'accès au réseau pour une machine est la passerelle par défaut. C'est ce qui permet de dire comment on sort du réseau local dans lequel se trouve cette machine. La passerelle par défaut est l'adresse IP du routeur qui permet d'aller sur Internet ; elle correspond à la route par défaut.

Par exemple, sous Windows, la configuration d'une carte réseau peut se faire via l'interface ci-dessous :

Configuration d'une interface réseau sous Windows

La configuration de cette carte réseau ajoute deux lignes dans la table de routage de la machine :

  • Une ligne pour joindre le sous-réseau dans lequel se trouve la machine. Pour retrouver l'adresse du sous-réseau, l'ordinateur fait un ET logique entre l'adresse IP de la machine et le masque de sous-réseau. Dans cet exemple, c'est 132.227.71.0/24. Pour joindre ce sous-réseau, il faut utiliser cette carte réseau.
  • L'indication de la passerelle par défaut ajoute une autre ligne dans la table de routage : pour joindre 0.0.0.0/0, c'est-à-dire pour sortir du sous-réseau et aller sur Internet, il faut faire suivre les paquets IP à 132.227.71.30.

Pour configurer une interface réseau sur un système Unix, on utilise généralement la ligne de commande dans un terminal. Par exemple :

ip addr add 192.168.9.3/22 dev eth0
ip link set up dev eth0

La première commande ip addr add permet d'ajouter une adresse IP (ici 192.168.9.3) et un masque (ici /22) à une carte réseau (ici eth0). La deuxième commande permet d'activer la carte réseau. Sous Windows, il est également possible d'activer ou désactiver une carte réseau une fois qu'on lui a attribué une adresse. Pour activer la carte réseau, c'est ip link set up, et pour la désactiver, c'est ip link set down.

Comme sous Windows, après avoir exécuté ces deux commandes dans un terminal Unix, une ligne est ajoutée dans la table de routage qui indique comment joindre le sous-réseau de cette carte réseau :

Destination   Masque         Passerelle     Interface
192.168.8.0   255.255.252.0     -             eth0

255.255.252.0 est l'équivalent en notation décimale pointée du netmask /22. Avec ce masque, le bit le plus à droite dans la partie réseau est le bit 2^2 du 3ème octet. Les sous-réseaux avec ce masque sont ceux dont l'adresse est un multiple de 4 dans le 3ème octet. Pourquoi l'adresse du sous-réseau est-elle 192.168.8.0 ? Car le multiple de 4 inférieur à 9 dans le 3ème octet est 8. On obtient le même résultat en faisant un ET logique entre le netmask /22 et l'adresse IP de la machine qui est 192.168.9.3. Pour atteindre ce sous-réseau et donc toutes les adresses comprises entre 192.168.8.1 et 192.168.11.254, il faut donc utiliser la carte réseau eth0. C'est cela qui est indiqué par cette ligne dans la table de routage.

Pour ajouter une passerelle par défaut, il faut exécuter une autre commande pour ajouter une autre ligne dans la table de routage. Par exemple :

ip route add 0.0.0.0/0 via 192.168.8.1

Ici, la passerelle par défaut est 192.168.8.1. Cette commande ajoute une deuxième ligne dans la table de routage :

Destination   Masque         Passerelle     Interface
192.168.8.0   255.255.252.0     -             eth0
0.0.0.0       0.0.0.0        192.168.8.1      eth0

Ainsi, un paquet à destination d'une adresse en dehors du sous-réseau 192.168.8.0/22 sera routé vers 192.168.8.1.

Adresses IPv6

Pourquoi IPv6 ?

Pourquoi le protocole IP version 6 est-il apparu ? Nous avons vu que les adresses IPv4 s'étendent sur 32 bits pour coder l'adresse. Il y a donc environ 2^32 soit 4 milliards d'adresses IPv4. Cela n'est pas suffisant pour les usages d'Internet aujourd'hui puisqu'il y a plus de 12 milliards d'équipements connectés. Des mécanismes pour économiser les adresses IPv4 ont été mis en oeuvre depuis de nombreuses années. Nous avons vu les adresses privées et le NAT (Network Address Translation) qui permettent, derrière une seule adresse publique, de mettre plusieurs équipements et de partager cette adresse publique. Nous avons vu également l'adressage CIDR en IPv4 qui permet de faire des réseaux de taille correspondant au nombre d'équipements que l'on souhaite mettre dans le réseau. Mais cela ne suffit pas car Internet n'a pas fini de s'étendre.

Aujourd'hui, Internet est composé de réseaux IPv4 mais aussi de réseaux IPv6. Les deux cohabitent grâce à des moyens pour interconnecter ces réseaux qui ont des formats d'adresses différents.

Les adresses IPv6 sont codées sur 128 bits, c'est-à-dire quatre fois plus qu'en IPv4. Ainsi, il y a 2^128 possibilités d'adressage, ce qui fait un nombre d'adresses considérable bien supérieur aux besoins d'Internet.

A termes, IPv6 suffirait et pourrait remplacer totalement IPv4. La fin de IPv4 est-elle proche ? On pourrait se dire ça. On peut aussi se demander pourquoi IPv6 ne remplace pas déjà IPv4. En fait, cela fait plusieurs dizaines d'années qu'on se pose cette question et IPv4 est toujours là. Pourquoi ? Tout simplement parce que remplacer un protocole par un autre alors que l'ancien est largement utilisé n'est pas simple. Cela nécessite de changer à la fois les cartes réseau mais aussi les équipements et logiciels qui fonctionnent avec ces adresses IPv4 et pas forcément avec IPv6.

La bascule compléte IPv4 vers IPv6 risque de durer encore longtemps mais cela n'est pas génant dans la mesure où les deux formats d'adresses cohabitent très bien.

Format des adresses IPv6

L'adresse IPv6 contient 128 bits et s'écrit au format hexadécimal, comme dans les deux exemples suivants : 2001:0DB8:0000:1111:0000:0000:0000:0200 et FE80:0000:0000:0000:0123:4567:89AB:CDEF.

Comme ces adresses sont très longues à écrire, pour plus de lisibilité, on sépare les chiffres héxadécimaux par le caractère :. L'adresse est ainsi composée de huit hextets séparés par :. Un hextet est une séquence de 16 bits soit quatre chiffres hexadécimaux.

Pour alléger l'écriture des adresses, on utilise des techniques de compression car beaucoup de chiffre sont à zéro dans les adresses IPv6. Quand dans un même hextet se trouvent quatre zéros, il est remplacé par un seul zéro au lieu de quatre. Les zéros inutiles sont également supprimés. Pour les deux exemples ci-dessus, cela donne : 2001:DB8:0:1111:0:0:0:0200 et FE80:0:0:0:123:4567:89AB:CDEF. La deuxième régle de compression permet de réduire la plus grande séquence d'hextets à 0 en utilisant la notation allégée :: une seule fois. Dans l'exemple ci-dessus cela donne : 2001:DB8:0:1111::200 et FE80::123:4567:89AB:CDEF. Pour retrouver l'adresse complète, il suffit d'ajouter suffisamment de zéros pour retrouver une adresse de 128 bits.

Une adresse IPv6 se décompose en 3 parties de taille fixe :

  • Les 48 premiers bits contiennent un préfixe de localisation publique.
  • Les 16 bits suivants contiennent un champ de topologie locale (subnet) permettant de définir des sous-réseaux au sein d'une organisation.
  • Les 64 derniers bits contiennent un identifiant ou interface ID désignant l'interface réseau. Généralement, cet identifiant est construit à partir de l'adresse MAC de la carte réseau, ce qui garantit l'unicité de l'adresse.

Comme en IPv4, il y a une partie réseau (les 64 premiers bits) et une partie machine (les 64 derniers bits) dans l'adresse. Dans la partie réseau, le préfixe de localisation est attribué par l'organisme international qui gère les adresses IP. Ensuite, chaque organisation a la possibilité d'identifier ces sous-réseaux comme elle le souhaite avec les 16 bits du champ de topologie locale.

Adresses IPv6 particulières

Comme avec IPv4, il y a plusieurs types d'adresses IPv6 :

  • Les adresses unicast qui permettent d'attribuer une adresse à une carte réseau ; une adresse unicast désigne une seule interface.
  • Les adresses multicast qui permettent de faire des groupes d'interfaces, c'est-à-dire avec une seule adresse, de désigner plusieurs machines.
  • Enfin, il y a les adresses anycast qui permettent de faire du multicast mais à l'intérieur d'un même sous-réseau.

Les adresses de broadcast sont limitées et sont remplacées par des adresses particulières qui permettent de faire des diffusion à l'intérieur d'un sous-réseau avec des adresses dites locales. Nous ne le traitons pas dans le cadre de ce cours.

Des adresses ont une signification particulières :

  • 0:0:0:0 (ou simplement ::) est en fait une adresse non attribuée qui permet de dire qu'une adresse n'a pas été attribuée
  • 0:0:0:1 (ou simplement ::1) est l'adresse localhost ou l'adresse de loopback correspondant au localhost en IPv4 127.0.0.1.
  • La notion d'adresse privée utilisables uniquement à l'intérieur d'une organisation et ne permettant pas d'aller sur Internet existe également en IPv6. Ces adresses commencent par FD00::.
  • Des adresses de liens permettent de faire de la diffusion sur une liaison c'est-à-dire dans un sous-réseau. Une liaison est un ensemble d'équipements qui se trouvent derrière un routeur. Ces adresses sont beaucoup utilisées en IPv6 pour faire le routage mais aussi pour distribuer les adresses aux machines de manière automatique.

La partie machine (Interface ID) de l'adresse IPv6 soit les 64 bits de poids faible est longue à écrire. Cette partie est généralement attribuée de manière automatique selon deux techniques :

  • Soit par un tirage aléatoire qui est fait au niveau de la carte réseau lorsqu'on la configure.
  • Soit par une technique qui utilise l'adresse MAC de la carte réseau en la transformant pour passer des 48 bits de l'adresse MAC aux 64 bits de l'Interface ID. Comment ? En ajoutant FFFE au milieu de l'adresse MAC et en inversant le 6ième bit du résultat. Par exemple, pour l'adresse MAC 00:A0:24:E3:FA:4B, cela donne 02A0:24FF:FEE3:FA4B.

Sinon, il y a toujours la possibilité de configurer l'interface ID à la main, c'est-à-dire en attribuant les adresses une par une à chaque carte réseau dans le sous-réseau. La partie publique de l'adresse, les 48 premiers bits, est aussi composée de différentes parties qui sont gérées par les organismes internationaux et les fournisseurs d'accès à Internet. Ainsi, chaque fournisseur d'accès à Internet se voit attribuer avec un certain nombre de bits dans la partie publique qui lui permet ensuite d'attribuer ces adresses à ses différents clients.

Voilà un aperçu rapide de l'adressage IPv6. Nous n'avons pas détaillé tous les types d'adresses et leurs usages, mais cela se voit plutôt dans des cours plus avancés.