PROFDINFO.COM

Votre enseignant d'informatique en ligne

L'adressage IP

Sur un réseau TCP/IP, la couche 3 (ou couche réseau, implémentée par IP) a besoin d'utiliser un système d'adressage routable et hiérarchique. Ce système doit permettre d'envoyer un paquet au bon destinataire. Chaque routeur qui reçoit un paquet doit pouvoir rapidement déterminer le prochain hop à lui faire faire: l'envoyer à destination (si elle est locale) ou à un autre routeur sinon (et il faut alors possiblement déterminer auquel). Ceci implique qu'une partie de l'adresse doit représenter le sous-réseau et une autre partie la machine dans le sous-réseau (d'où: hiérarchique).

En IPv4, une adresse est un nombre sur 32 bits. Bien que cette adresse soit toujours stockée en binaire, elle est souvent représentée par quatre nombres de 0 à 255 (donc 8 bits chacun) séparés par des points. Par exemple:

 

   172  .   18   .   28   .   183
10101100.00010010.00011100.10110111

(Il faut avouer que c'est plus simple que de considérer le nombre sur 32 bits en tant qu'un seul et même nombre, dans ce cas-ci 1 443 434 071. Toutefois, 1443434071 est un format d'adresse IP considéré comme valide et supporté par tout fureteur qui se respecte. C'est la même chose pour la notation hexadécimale avec points 0xAC.0x12.0x1C.0xB7, la notation hexadécimale sans points 0xAC121CB7, la notation octale avec points 00254.00018.00034.0267 ou le nombre sur 32 bits exprimé en octal 012602207127. Essayez ces différentes notations dans votre fureteur préféré pour l'adresse 74.125.91.104 pour vous en convaincre.)

Le masque de sous-réseau

Une partie de cette adresse contient en fait l'adresse du réseau (la partie de gauche). L'autre partie contient l'adresse de la machine (la partie de droite). La longueur de ces parties est variable (afin de permettre des réseaux avec un grand nombres de machines, ainsi que beaucoup de réseaux avec peu de machines). C'est pourquoi on utilisera toujours le masque de sous-réseau conjointement avec l'adresse.

Le masque indique combien de bits (à partir de la gauche) correspondent à l'adresse du réseau. Ce nombre de bits est souvent noté à droite de l'adresse, séparé par une barre oblique, comme ceci:

172.18.28.183/24

Ceci signifie que les 24 premiers bits sont l'adresse du réseau (et donc que les 8 derniers sont l'adresse de la machine). Concrètement, ce qui se passe, c'est qu'un & ("et" binaire) est effectué entre l'adresse donnée et le masque de sous-réseau. On mettra le nombre de bits de ce masque à 1, et le reste à 0. Le résultat obtenu sera l'adresse du réseau:

    172   .   18   .   28   .   183        (adresse)

  10101100.00010010.00011100.10110111      (adresse en binaire)
& 11111111.11111111.11111111.00000000      (masque, 24 bits à 1)
-------------------------------------
  10101100.00010010.00011100.00000000      (adresse du réseau en binaire)
    172   .   18   .   28   .    0         (adresse du réseau)

Évidemment, si on veut l'adresse de la machine dans le réseau, on n'a qu'à faire un & avec le complément du masque...

On écrit aussi souvent le masque dans le même format que l'adresse IP (quatre nombres séparés par des points). Dans notre exemple, ce masque serait donc 255.255.255.0.

Les classes de réseau

Au tout début, le premier octet représentait l'adresse du réseau et les 3 derniers l'adresse de la machine. Cela permettait 256 réseaux ayant jusqu'à 16 77 214 machines chacun. Le nombre de réseaux différents augmentant rapidement au-delà de 256, on créa alors (en 1981) les classes. Tout réseau appartenait alors à une classe. Il existait des classes A, B et C et trois masques de sous-réseau correspondants (255.0.0.0, 255.255.0.0 et 255.255.255.0, respectivement). On avait donc:

 

Classe Masque Premiers bits de l'adresse Plage d'adresses Nb de réseaux Nb de machines(*)
A 255.0.0.0 0 0.0.0.0 - 127.255.255.255 128 16 777 214
B 255.255.0.0 10 128.0.0.0 - 191.255.255.255 16 384 65 534
C 255.255.255.0 110 192.0.0.0 - 223.255.255.255 2 097 152 254

(*) On verra un peu plus loin pourquoi ces nombres ne semblent pas tout à fait exacts.

Il y avait aussi une classe D (prévue pour le multicast, bien peu utilisée) et une classe E (réservée et non utilisée):

 

Classe Masque Premiers bits de l'adresse Plage d'adresses Nb de réseaux Nb de machines
D /4 1110 224.0.0.0 - 239.255.255.255 N/D N/D
E /4 1111 240.0.0.0 - 255.255.255.255 N/D N/D

Le masque de sous-réseau des classes A, B et C pouvait être déduit aisément en regardant les premiers bits de l'adresse et il n'était donc jamais nécessaire de le fournir.

Plusieurs plages d'adresses sont réservées et ne peuvent pas être utilisées pour n'importe quoi, ce qui diminue concrètement le nombre d'adresses réellement disponibles. Parmi celles-ci, on note les plages d'adresses privées, réservées à l'adressage interne dans un réseau, une pour chaque classe:

 

Plage Classe Nb adresses
10.0.0.0 - 10.255.255.255 A 16 777 216
172.16.0.0 - 172.31.255.255 B 1 048 576
192.168.0.0 - 192.168.255.255 C 65 536

À cela s'ajoutent d'autres plages réservées pour d'autres buts. Mentionnons 127.0.0.0 - 127.255.255.255 prévue pour le loopback (des adresses qui pointent vers nous-mêmes, peu importe sur quelle machine on est - 127.0.0.1 est la plus utilisée).

L'adressage sans classes

Le manque d'adresses IP s'est vite fait sentir à mesure qu'Internet gagnait en popularité. Une des premières solutions fut d'enlever le carcan des classes de réseaux. En effet, plusieurs réseaux contenaient trop de machines pour se satisfaire d'une classe C et recevaient donc une classe B. Toutefois, beaucoup d'entre eux n'utilisaient pas la majorité des adresses de la classe (pensez à un réseau de 300 machines par exemple!).

À partir de ce moment (quelque part en 1993), on commença à créer des sous-réseaux de tailles variables selon les besoins. C'est ici que le masque de sous-réseau prend toute son utilité. Les adresses doivent donc toujours être écrites avec la notation A.B.C.D/N, où N peut prendre n'importe quelle valeur.

Par exemple: est-ce que les adresses 10.10.1.32/27, 10.10.1.44/27 et 10.10.1.90/27 sont dans le même sous-réseau?

     10   .   10   .    1   .   32
  00001010.00001010.00000001.00100000
& 11111111.11111111.11111111.11100000     (/27)
-------------------------------------
  00001010.00001010.00000001.00100000
     10   .   10   .    1   .   32        (l'adresse du sous-réseau)


     10   .   10   .    1   .   44
  00001010.00001010.00000001.00101100
& 11111111.11111111.11111111.11100000     (/27)
-------------------------------------
  00001010.00001010.00000001.00100000
     10   .   10   .    1   .   32        (l'adresse du sous-réseau)


     10   .   10   .    1   .   90
  00001010.00001010.00000001.01011010
& 11111111.11111111.11111111.11100000     (/27)
-------------------------------------
  00001010.00001010.00000001.01000000
     10   .   10   .    1   .   64

On voit donc que 10.10.1.44/27 et 10.10.1.90/27 ne sont pas dans le même sous réseau. 10.10.1.44/27 est dans le même réseau que 10.10.1.32/27 - d'ailleurs, 10.10.1.32/27 est l'adresse du réseau lui-même.

En effet, un réseau a une adresse, la première dans sa plage. Dans le cas des réseaux de classe A, B ou C, l'adresse du réseau finit toujours par des 0. Dans le cas d'un sous-réseau hors classe, toute adresse est possible, selon le masque donné. Cette première adresse ne peut pas être donnée à une machine.

La dernière adresse du réseau, quant à elle, est réservée au broadcast, un paquet qui doit être envoyé à tout le monde. On ne l'utilisera donc pas non plus comme adresse de machine. Dans les réseaux de classe A, B ou C, elle finit par des 255.

(C'est d'ailleurs pour ça qu'il y a deux adresses de moins pour chaque classe dans le tableau plus haut.)

L'attribution des adresses IP

C'est ICANN (Internet Corporation for Assigned Names and Numbers), basée en Californie mais indépendante du gouvernement américain et à but non lucratif, qui a la responsabilité de diviser les adresses IP disponibles et d'en distribuer les blocs à travers le monde. ICANN délègue en fait la tâche à l'IANA (Internet Assigned Numbers Authority), qui assumait auparavant déjà ces responsabilités à partir de l'Université de la Californie du Sud, pour le Département de la Défense américaine.

L'IANA attribue donc des blocs d'adresses aux RIR (Regional Internet Registries). Il y en a 5:

Carte de répartitions des RIR

Ces RIR attribuent ensuite, chacun selon ses critères et son systèmes, des blocs d'adresses aux fournisseurs Internet de leur région, qui eux les attribuent à leurs clients.

Le manque d'adresses IP

Avec la prolifération d'appareils ayant accès à Internet et la popularité croissante du médium, le fait d'éliminer les classes d'adresses n'a réglé le problème que temporairement. Il n'y a en effet que 4.29 milliards d'adresses IP possibles, desquelles il faut enlever les quelques 600 millions d'adresses réservées et inutilisables, ce qui nous laisse quelque chose comme 3.7 milliards d'adresses. Ça semble beaucoup, mais c'est bien peu avec l'usage intense d'Internet qui est fait aujourd'hui par les cellulaires, ordinateurs portables, ordinateurs de bureau, téléphones intelligents, télévisions...

La plupart des organismes de gestion des adresses IP s'entendent pour dire que nous manquerons d'adresses quelque part entre 2010 et 2011.

Beaucoup de solutions ont déjà été mises en place pour repousser le problème aussi loin:

Les solutions ne manquent pas mais le problème reste entier.

IPv6

La solution qui réglera tout: passer à IPv6 (le protocole IP actuellement utilisé est IPv4). Une adresse IPv6 respecte ce format:

aaaa:bbbb:cccc:dddd:eeee:ffff:gggg:hhhh

Où aaaa à hhhh sont des nombres hexadécimaux. Une adresse IPv6 contient donc 128 bits, ce qui permet environ 3.4 x 10^38 adresses, soit environ 5 x 10^28 pour chacun des 6.5 milliards de personnes actuellement sur Terre. Ça devrait suffir pour longtemps.

Notez que lorsqu'un ou plusieurs zéros non significatifs apparaissent dans un des huit nombres en hexadécimal qui composent l'adresse, ils peuvent être omis, question de simplifier le tout. De plus, lorsque plusieurs 0000 consécutifs sont placés dans l'adresse, on peut tous les remplacer par :: (évidemment, on ne peut le faire qu'une fois par adresse pour éviter la confusion).

Du coup, une adresse comme:

2002:3f45:0034:06bd:0000:0000:0000:098a

peut devenir:

2002:3f45:34:6bd:0:0:0:98a

puis:

2002:3f45:34:6bd::98a

(toute autre notation équivalente est acceptée et valide).

Outre la plage d'adresses élargies, plusieurs améliorations intéressantes ont été apportés dans IPv6. Entre autres:

On s'attend évidemment à ce que le passage d'IPv4 à IPv6 ne soit pas facile, mais beaucoup s'y préparent déjà depuis un certain temps.