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:

 

   74  .   125   .   91   .  104
01001010.01111101.01011011.01101000

(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 249 729 384. Toutefois, 1249729384 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 0x4A.0x7D.0x5B.0x68, la notation hexadécimale sans points 0x4A7D5B68, la notation octale avec points 0112.0175.0133.0150 ou le nombre sur 32 bits exprimé en octal 011237255550. Essayez ces différentes notations dans votre fureteur préféré pour l'adresse 74.125.91.104 (correspondant à google.ca) pour vous en convaincre. N'oubliez pas qu'avec l'avènement des barres d'adresses qui font aussi des recherches, toutes ces adresses doivent être préfixées par "http://" pour être comprises comme telles.)

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...

L'IANA a annoncé le 3 février 2011 qu'elle venait de distribuer les 5 derniers blocs d'adresses IP aux 5 RIR et qu'elle ne possédait plus aucun bloc de libre. Du côté de ces RIR:

La menace du problème plane depuis longtemps et certains estimés trop pessimistes ont déjà été dépassés, mais on s'approche clairement de plus en plus du jour où on n'aura plus d'adresses IP à notre disposition et qu'on en aura besoin de nouvelles. 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 4.8 x 10^28 adresses pour chacune des (près de) 7 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. Plusieurs protocoles et serveurs utilisent concurremment les deux types d'adressage (bien que ça soit toujours les adresses IPv4 qui servent concrètement).