# Les réseaux informatiques/L'obtention d'une IPv4 : le protocole DHCP

Dans le chapitre précédent, nous avons vu des protocoles qui permettent de trouver l'adresse MAC qui correspond à une IP. Mais il existe des protocoles qui font la traduction inverse, à savoir qu'ils permettent de retrouver l'IP associée à une adresse MAC. Mieux, certains permettent d'attribuer une adresse IP à un ordinateur, ce qui permet de configurer les IP d'un réseau local. On peut, par exemple, citer le protocole RARP. Mais il a rapidement montré ses limites et a été remplacé respectivement par BOOTP, puis par des processus d'assignation d'IP plus modernes (comme le DHCP du chapitre précédent). De nos jours, les protocoles du type ARP/BOOTP sont très peu utilisés, pour diverses raisons : ils nécessitent un serveur pour fonctionner, ne sont pas forcément très utiles, etc. Par contre, DHCP est clairement le plus utilisé pour attribuer des adresses IP dans un réseau (local ou non), ce qui fait que nous allons en parler plus abondamment.

## Le protocole RARP

Le protocole RARP (Reverse ARP) fonctionne d'une manière similaire au protocole ARP, mais en sens inverse. On l'utilisait autrefois sur les terminaux sans disque dur, qui ne pouvaient pas mémoriser leur propre adresse IP, et qui ne connaissent donc que leur adresse MAC. De manière générale, il est utilisé quand des nœuds ne connaissent pas leur adresse IP, mais connaissent leur adresse MAC.

### Le déroulement d'une transaction RARP

Le protocole nécessite un serveur RARP, qui mémorise l'adresse IP pour chaque adresse MAC (un équivalent du cache ARP, mais inversé). Quand un ordinateur/terminal veut connaitre son IP, il envoie une requête RARP de type broadcast sur le réseau local. Cette requête fournit l'adresse MAC de l'émetteur et demande aux autres ordinateurs s'ils connaissent l'IP du demandeur. Le serveur, ou tout autre ordinateur qui a la réponse, envoie une réponse RARP à au demandeur, qui contient l'adresse IP demandée.

### L'en-tête RARP

Les paquets RARP ont un en-tête similaire à celui d'ARP, avec cependant quelques différences. L'en-tête est composé des champs suivants :
En-tête RARP :
| Champ | Description | Taille (en octets) |
| Network type | Indique le format du paquet RARP. | Deux octets |
| Protocol Type | Indique le protocole de couche réseau utilisé. | Deux octets |
| Hardware Adress Length | Nombre d'octets des adresses physiques (6 pour les adresses MAC). | Un octet |
| Protocol Adress Lenght | Précise la longueur en octets des adresses logiques (ici, des adresses IP). | Un octet |
| Opcode | Nombre qui code l'opération à effectuer. | Deux octets |
| Adresse physique de l'émetteur | Adresse physique de l'émetteur | 6 octets pour une adresse MAC |
| Adresse logique de l'émetteur | Adresse logique de l'émetteur | 4 à 16 octets pour une adresse IP |
| Adresse physique du récepteur | Adresse physique du récepteur | 6 octets pour une adresse MAC |
| Adresse logique du récepteur | Adresse logique du récepteur | 4 à 16 octets pour une adresse IP |
Un paquet ARP fait donc 28 octets, ce qui est plus petit que les 46 octets minimum d'une transmission Ethernet. Les 18 octets manquants sont comblés par des bits de bourrage, comme pour toute trame trop petite. Alors qu'on aurait pu utiliser ces 18 octets restants d'une manière plus utile...

## Le protocole DHCP

On a vu que toute machine, ainsi que tout réseau, se voit attribuer une adresse IP, essentielle pour l'accès Internet. On peut cependant se demander qui attribue les adresses IP à une machine. La réponse est qu'il y a deux possibilités. La première est celle d'une intervention humaine : l'administrateur du réseau attribue lui-même les IP aux machines, à sa charge de bien faire attention à ce qu'un autre réseau local n'aie pas la même IP. Une autre solution ne nécessite pas d'intervention humaine, tout étant automatisé. L'IP est alors fournie par une source extérieure. Cette dernière solution demande cependant qu'un protocole se charge de l'attribution des IP. De nombreux protocoles de ce genre ont existé : BOOTP et RARP sont de loin les plus vieux. De nos jours, c'est le protocole DHCP (Dynamic Host Configuration Protocol) qui est utilisé pour les adresses IPv4. Et c'est celui que nous allons étudier.

### Fonctionnement

Ce protocole permet à des ordinateurs qui veulent une IP d'acquérir celle-ci auprès de serveurs DHCP. Les clients connaissent les IP des serveurs DHCP, dont l'IP est fixé par le protocole DHCP. Les serveurs DHCP ont chacun une liste d'IP non-attribuées, qu'ils peuvent distribuer aux ordinateurs qui en font la demande. Pour lus de flexibilité, une IP est attribuée à un client/réseau durant un temps limité. Tout client qui veut une IP va envoyer une demande à plusieurs serveurs DHCP, en indiquant le temps durant lequel il veut réserver l'adresse IP. Les serveurs répondent en envoyant au client une offre, une proposition d'IP que les clients peuvent refuser ou accepter. Le client choisit une offre et renvoie un accusé de réception au serveur émetteur de l'offre. Ce serveur renvoie alors lui aussi un accusé de réception.

### Format des messages DHCP

Toout message DHCP suit le format suivant :
| Octet 0 | Octet 1 | Octet 2 | Octet 3 |
| Champ OP : vaut 1 pour une requête, 2 pour une réponse. | HTYPE : indique le type de réseau. | HLEN : longueur des adresses physiques. | HOPS : compteur de sauts (similaire au TTL). |
| XID : numéro de transaction. Généré aléatoirement par le client, répondu à l'identique par le serveur. ||||
| SECS : Temps écoulé depuis le démarrage du client DHCP sur la machine. | SECS : Temps écoulé depuis le démarrage du client DHCP sur la machine. | FLAGS : ensemble de valeurs de 1 bit, aux utilités diverses. | FLAGS : ensemble de valeurs de 1 bit, aux utilités diverses. |
| CIADDR : Adresse IP du client, si déjà connue du client (en cas de renouvellement d'IP, par exemple). Mis à 0 si inconnue, en cas de demande. ||||
| YIADDR : Adresse IP du client, donnée par le serveur lors de sa réponse. Vaut 0 en cas de demande. ||||
| SIADDR : Adresse IP du serveur. ||||
| GIADDR : Adresse IP Gateways. ||||
| CHADDR : Adresse physique du client (adresse MAC), de 64 octets. ||||
| SNAME : Nom d'hôte du serveur (64 octets). Parfois remplacé par des bits qui précisent certaines options du protocole. ||||
| FILE : Nom du fichier de démarrage (128 octets). Parfois remplacé par des bits qui précisent certaines options du protocole. ||||
| Options DHCP. ||||