Le protocole « DHCP »

Position du problème

Lorsque vous connectez une machine à un réseau Ethernet TCP/IP, cette machine, pour fonctionner correctement, doit disposer :

  • D'une adresse IP unique dans votre réseau et appartenant au même réseau logique que toutes les autres machines du réseau en question,
  • un masque de sous réseau, le même pour tous les hôtes du réseau,
  • une adresse de DNS, pour pouvoir résoudre les noms des hôtes, surtout si votre réseau est connecté au Net,
  • l'adresse de la passerelle qui vous permet justement d'accéder au Net. (Nous supposerons que votre réseau domestique n'est pas suffisamment complexe pour contenir de multiples sous-réseaux).

Si vous n'avez déjà rien compris à ce discours, alors il est nécessaire pour vous de lire d'abord les chapitres sur TCP/IP(v4) et IP et le Routage.

Pour configurer vos hôtes locaux, vous avez trois possibilités :

  • vous utilisez « zeroconf » (rfc3927), la chose qui permet à chaque nœud d'un réseau de s'auto-attribuer une adresse IP dans le bloc 169.254/16. Tout ce qu'il y a de plus basique, ce système remplit son office, mais ne permet aucune administration du réseau ;
  • vous passez de machine en machine, avec un petit carnet et vous configurez à chaque fois tous les paramètres de la pile IP à la main, en n'oubliant pas de tout marquer dans votre carnet. Ce n'est pas le plus compliqué, ce qui est d'avantage gênant, c'est de ne jamais oublier de noter toutes les modifications que vous pourriez être amené à faire par la suite ;
  • vous installez un serveur DHCP sur votre réseau et vous dites à vos clients d'aller chercher toute leur configuration IP sur ce serveur. En gros, il remplacera votre carnet, sera naturellement à jour et vous évitera des déplacements.

Comme vous le voyez, le luxe de la troisième solution est tout de même tentant, au point que nous allons le mettre en œuvre.

Que disent les livres ?

Les choses se passent avec le peu de moyens dont vous disposez:

  • votre adresse MAC que vous ne perdez jamais, puisqu'elle est écrite en dur dans votre interface Ethernet ;
  • le « Broadcast » ou « Diffusion » qui permet d'envoyer des trames à toutes les machines du réseau physique.

Le dialogue est décrit de la manière suivante:

Le dialogue de DHCP

  1. Lorsque le client DHCP démarre, il n'a aucune connaissance du réseau, du moins, en principe. Il envoie donc une trame « DHCPDISCOVER », destinée à trouver un serveur DHCP. Cette trame est un « broadcast », donc envoyé à l'adresse 255.255.255.255. N'ayant pas encore d'adresse IP, il adopte provisoirement l'adresse 0.0.0.0. Comme ce n'est pas avec cette adresse que le DHCP va l'identifier, il fournit aussi sa « MAC Address ». En réalité, 0.0.0.0 ne voulant rien dire, le système devra fonctionner uniquement avec les adresses MAC lors du premier dialogue. Autrement dit, le client présente son adresse MAC et effectue un broadcast ethernet sur ff:ff:ff:ff:ff:ff ;
  2. Le, ou les serveurs DHCP du réseau qui vont recevoir cette trame vont se sentir concernés et répondre par un « DHCPOFFER ».
    Cette trame contient une proposition de bail et la « MAC Address » du client, avec également l'adresse IP du serveur. Tous les DHCP répondent et le client normalement accepte la première réponse venue, sauf s'il a déjà quelques exigences.
    Le « DHCPOFFER » sera un broadcast (Ethernet) ou non, suivant le serveur DHCP utilisé. Nous aurons l'occasion d'observer tout ceci dans la dernière page de ce chapitre.
  3. Le client répond alors par un DHCPREQUEST à tous les serveurs (donc toujours en « Broadcast ») pour indiquer quelle offre il accepte.
  4. Le serveur DHCP Concerné répond définitivement par un DHCPACK qui constitue une confirmation du bail. L'adresse du client est alors marquée comme utilisée et ne sera plus proposée à un autre client pour toute la durée du bail.

Détails sur le serveur DHCP

Un serveur DHCP dispose d'une plage d'adresses à distribuer à ses clients. Il tient à jour une base de données des adresses déjà utilisées et utilisées il y a peu (C'est ce qui explique que l'on récupère souvent la même adresse, le DHCP ayant horreur des changements).

Lorsqu'il attribue une adresse, il le fait par l'intermédiaire d'un bail. Ce bail a normalement une durée limitée dans le temps. Sur un réseau d'entreprise où l'on dispose largement d'assez d'adresses pour le nombre de postes et que ces derniers sont en service toute la journée, le bail peut être d'une semaine ou plus encore. Un bail long diminue le trafic réseau pour les renouvèlements 1) qui ont lieu moins souvent. En revanche, plus le bail est long, plus l'administrateur devra planifier longtemps à l'avance toute modification de l'architecture de son réseau.

Après expiration du bail, ou résiliation par le client, les informations concernant ce bail restent mémorisées dans la base de données du serveur pendant un certain temps. Bien que l'adresse IP soit disponible, elle ne sera pas attribuée en priorité à une autre machine. C'est ce qui explique que l'on retrouve souvent la même adresse d'une session à l'autre.

Détails sur le bail

Dans le bail, il y a non seulement une adresse IP pour le client, avec une durée de validité, mais également d'autres informations de configuration comme:

  • L'adresse d'un ou de plusieurs DNS (Résolution de noms)
  • L'adresse de la passerelle par défaut (pour sortir du réseau IP où le DHCP vous a installé).
  • L'adresse du serveur DHCP (nous allons voir pourquoi).

Cette liste est loin d'être complète, il existe en effet une grande quantité d'options qui peuvent êtres transmises.

Lorsque le bail arrive à environ la moitié de son temps de vie, le client va essayer de renouveler ce bail, cette fois-ci en s'adressant directement au serveur qui le lui a attribué. Il n'y aura alors qu'un DHCPREQUEST et un DHCPACK.

Si, au bout des 7/8e de la durée de vie du bail en cours, ce dernier n'a pu être renouvelé, le client essayera d'obtenir un nouveau bail auprès d'un DHCP quelconque qui voudra bien lui répondre. Il pourra alors se faire que le client change d'adresse IP en cours de session. Normalement, cette situation ne devrait pas se produire, sauf en cas de panne du DHCP.

Question subsidiaire

Il doit donc y avoir nécessairement un serveur DHCP par réseau physique et il doit disposer d'une adresse IP dans la même classe que celle qui constitue sa plage d'adresses ?

Non, pas nécessairement. Votre réseau physique peut être formé de plusieurs sous réseaux logiques, avec des routeurs entre chaque sous réseau et le tout peut fonctionner avec un seul serveur DHCP…

Mais alors, comment la négociation peut-elle se faire, puisque, normalement, un « broadcast » n'est pas retransmis par les routeurs ?

Les requêtes DHCP doivent pouvoir atteindre le serveur qui est situé sur un autre réseau logique, elles doivent donc passer les routeurs, ce qui n'est pas possible. Il est alors nécessaire d'installer sur un ou plusieurs routeurs un agent de relais qui va intercepter les requêtes en broadcast et les transmettre à un serveur DHCP connu de cet agent.

Relais DHCP

C'est l'agent de relais situé sur la passerelle qui va faire l'intermédiaire et le client réussira tout de même à obtenir un bail, donné par un DHCP situé sur un autre réseau et transmis par l'agent de relais.

Nous ne pousserons pas le luxe jusque là, mais la solution existe. Le serveur DHCP sera même capable d'envoyer des paramètres différents, suivant le sous réseau du client…

1)
Depuis la réforme de 1990 de l'orthographe, il est conseillé d'écrire « renouvèlement » plutôt que « renouvellement »