# Les réseaux informatiques/L'adressage IP

On a vu que les machines d'un réseau local ont une adresse MAC, pour que l'on sache qui est qui sur le réseau. Le même problème se pose sur internet : comment identifier un PC bien précis sur un réseau global ? Par exemple, si vous voulez accéder à un site web sur un serveur, comment votre ordinateur fait-il pour dire : je veux communiquer avec ce serveur bien précis, et pas un autre ? Pour cela, chaque ordinateur possède un numéro qui permet de l'identifier sur le net, chaque numéro étant appelé une adresse logique. De nos jours, les adresses IP sont standardisées par le protocole IP, raison pour laquelle les adresses logiques sont aussi appelées des adresses IP. Il existe actuellement deux versions du protocole IP : IPv4 et IPv6. Ne cherchez pas la version 5 d'IP, elle n'existe pas. Elle a été envisagée, prototypée, mais abandonnée pour ensuite renaître, sous une forme particulièrement remaniée, en IPv6.
L'adresse IP doit non seulement indiquer l'ordinateur dans le réseau local, mais aussi quel est le réseau voulu : cela fait une information en plus comparé à l'adresse physique. Les adresses IP sont donc décomposées en deux portions : un préfixe réseau qui indique le réseau local adressé et un suffixe hôte qui adresse l’ordinateur dans ce réseau. Il est évident que toutes les machines d'un réseau ont des adresses avec le même préfixe réseau : la seule différence entre ces adresses sera le suffixe hôte. Par convention, les bits de poids forts forment le préfixe réseau, alors que les bits de poids faible forment le suffixe réseau. Parmi les adresses d'un réseau, deux sont spéciales :
* l'adresse de diffusion (broadcast) est la plus grande adresse possible qui appartient au réseau : quand on envoie une donnée à cette adresse, elle est envoyée à tous les ordinateurs du réseau ;
* l'adresse de réseau est l'adresse qui sert à identifier le réseau : c'est la plus petite adresse du réseau (le suffixe hôte est à 0) ;
* les autres adresses servent à identifier des machines connectées au réseau.
Ce que je viens de dire pourrait faire croire qu'on obtient l'adresse logique en concaténant l'adresse physique à un identifiant de réseau. Ce n'est pas du tout ce qui est fait avec les adresses IP : l'adresse logique n'a aucun lien avec l'adresse physique. Il faut donc garder une table de correspondance entre IP et adresse MAC pour chaque réseau local (la table en question est la table ARP). La subdivision entre préfixe réseau et suffixe hôte est réalisée par des méthodes assez spéciales, qu'il est important de bien comprendre. Le reste du chapitre sera consacré à ces méthodes.

## Les adresses IPv4

En IPv4, les adresses font exactement 32 bits (4 octets) : de quoi coder 4 294 967 296 adresses IP différentes. La notation des adresses IP est normalisée : on doit noter chaque octet en décimal et les séparer par des points.

### Les adresses IPv4 réservées

Si une adresse IPv4 identifie un ordinateur dans le cas général, certaines adresses IPv4 sont spéciales et réservées pour des utilisations particulières. Si l'on omet les adresses de réseaux privés (nous reviendrons dessus tout à l'heure), la liste des adresses spéciales est la suivante :
| Intervalle d'adresses | Description |
| 0.0.0.0/8 | Réseau actuel. |
| 100.64.0.0/10 | Espace d'adresses partagé |
| 127.0.0.0/8 | Adresses de loopback |
| 169.254.0.0/16 | Adresses Link-local |
| 192.0.0.0/24 | Adresses réservées au protocole IETF |
| 192.0.2.0/24 | Adresses TEST-NET-1 |
| 192.88.99.0/24 | Adresses utilisées pour la compatibilité entre IPv4 et IPv6 |
| 198.18.0.0/15 | Adresses pour benchmarks réseaux |
| 198.51.100.0/24 | Adresses TEST-NET-2 |
| 203.0.113.0/24 | Adresses TEST-NET-3 |
| 224.0.0.0/4 | Adresses routées en multicast |
| 240.0.0.0/4 | Adresses de classe E, réservées |
| 255.255.255.255 | Adresse de diffusion |
Les adresses comprises entre 127.0.0.1 (inclue) et 128.255.255.255 (inclue) sont assez intéressantes à étudier. Ces adresses ne sont pas des adresses IP d'Internet, mais correspondent à l'ordinateur local (celui sur lequel vous travaillez, par exemple). L'adresse la plus importante est clairement l'adresse 127.0.0.1. Si vous envoyez un paquet sur cette adresse, le paquet ne quittera pas l'ordinateur émetteur et ne sera pas envoyé sur le réseau. À la place, il passera directement de la mémoire d'émission (où les paquets sont mis en attente avant envoi) vers la mémoire de réception (là où sont stocké les paquets réceptionnés en attente de traitement). On pourrait croire qu'elle est inutile, mais elle est extrêmement importante pour diagnostiquer certaines pannes réseau. Elle permet de vérifier que l'ordinateur fonctionne correctement en cas de panne. Si l'envoi d'un paquet sur cette adresse réussit, alors l'ordinateur n'est pas responsable de la panne et le coupable est ailleurs. Mais si l'envoi échoue (on ne récupère pas le paquet envoyé), alors la panne est à chercher sur l'ordinateur testé (logiciel défectueux, mauvaise installation de Windows, problème de pilote de carte réseau, ou autre).

### La pénurie d'IPv4 et ses solutions

Depuis les années 2000, on n'a plus assez d'adresses IPv4 pour combler les besoins du monde entier. Diverses mesures ont donc étés prises pour faire perdurer l'IPv4 durant quelques décennies. Le NAT (Network Address Translation) en est une. Celle-ci se base sur des adresses qui ne peuvent pas être routées sur internet et sont des adresses IP internes à un réseau local. Plusieurs équipements peuvent utiliser ces adresses, à condition qu'ils soient dans des réseaux locaux différents. Ces adresses sont appelées des adresses privées, les adresses IP normales étant appelées des adresses IP publiques. Voici les intervalles d'adresses privées :
| Adresse de base et masque | Intervalle d'adresses |
| 10.0.0.0/8 | 10.0.0.0 – 10.255.255.255 |
| 172.16.0.0/1 | 172.16.0.0 – 172.31.255.255 |
| 192.168.0.0/16 | 192.168.0.0 – 192.168.255.255 |
Le NAT permet d'attribuer des adresses privées à des équipements qui doivent communiquer sur internet. Le réseau local étant obligatoirement connecté sur internet via un routeur, celui-ci a une adresse IP publique. Le NAT permet de router des paquets émis par des ordinateurs d'un réseau local en se faisant passer pour le routeur : l'adresse privée de l’émetteur du paquet sera remplacée par l'adresse publique du routeur. Il permet aussi de rediriger les paquets entrants, qui sont routés vers l'adresse IP publique du routeur, vers l'ordinateur destinataire : l'adresse de destination est remplacée par l'adresse privée de destination par le routeur avant d'être routée sur le réseau local.

## Les adresses IPv6

En IPv6, les adresses font quatre fois plus que les adresses IPv4 : exactement 128 bits, à savoir 16 octets. Plus de 256 milliards de milliards de milliards de milliards d'adresses IP différentes. Autant dire qu'on a le temps de voir venir la prochaine pénurie !
Pour noter une adresse IPv6, on n'utilise pas des nombres écrits en décimal : les octets sont notés en hexadécimal, pour économiser de la place. De plus, la séparation utilise le symbole deux-points (:) pour séparer des groupes de deux octets.

### Le préfixe réseau

Il faut signaler que le suffixe hôte d'une adresse IPv6 prend au moins la moitié de l'adresse IP, à savoir 64 bits. Évidemment, le reste est utilisé pour le préfixe réseau. Elle peut faire plus dans quelques cas, mais la quasi-totalité des adresses de machines ont systématiquement des suffixes et préfixes de 64 bits.
Sur la majorité des adresses IPv6 unicast, le préfixe réseau est subdivisé en deux sections :
* une section de 48 bits, qui commence systématiquement par 001 : le préfixe de routage global ;
* et une section de 16 bits qui identifie un sous-réseau précis parmi l'espace de routage global.

### Le suffixe hôte

Le suffixe hôte est une portion d'adresse IP assez importante. À l'heure actuelle, ce suffixe doit être généré pour chaque ordinateur/équipement réseau. En IPv4, la génération du suffixe hôte passait par un protocole spécialisé, appelé DHCP. Ce protocole, bien que très bien fait, entraînait cependant une certaine complexité dans la gestion des adresses IP. En IPv6, le protocole DHCP est toujours utilisable, même s'il existe des méthodes beaucoup plus simples pour générer le suffixe hôte. Dans les grandes lignes, la génération de l'adresse IPv6 (de son suffixe hôte) est réalisée soit en utilisant l'EUI-64, soit en tirant un nombre aléatoire, soit en utilisant DHCPv6. Il est aussi possible de configurer manuellement l'adresse IP, ce que tout administrateur réseau sait faire avec les outils adaptés.
La première technique utilise l'adresse MAC de l'ordinateur pour dériver une adresse IPv6. Évidemment, l'adresse MAC subit quelques transformations. En effet, l'adresse MAC de 48 bits ne permet pas d'obtenir un suffixe hôte IPV6 de 64 bits : l'adresse MAC ne fournit que 6 sur les 8 nécessaires. Les deux octets manquant sont remplis par une valeur par défaut : FFFE (en hexadécimal), soit 255. 254 en décimal. Ces deux octets sont insérés au milieu de l'adresse MAC, entre les trois premiers octets et les trois derniers. Enfin, en guise de dernière modification, le 7ème bit du premier octet est inversé. Ce bit est le bit U du couple U/L. Dans la majorité des cas, le premier octet de l'adresse MAC, dont la valeur est souvent 00, passe alors à 02. L'utilisation de l'EUI-64 pose des problèmes de confidentialité, vu que l'adresse MAC peut être déduite de l'adresse IPv6 d'un ordinateur. D'où le fait que d'autres techniques existent pour dériver le suffixe hôte. La méthode idéale est de fabriquer celle-ci de manière aléatoire. Une méthode serait par exemple d'utiliser un algorithme comme MD5 ou SHA-1 sur l'adresse EUI-64, afin de camoufler celle-ci.