Apparence
Uubu.fr

Les systèmes Linux, l’open source, les réseaux, l’interopérabilité, etc.
« Il vaut mieux viser la perfection et la manquer que viser l’imperfection et l’atteindre. » (Bertrand Arthur William RUSSEL)
08 juin 2010

réseaux           Protocoles Réseaux


rfc2131

rfc2131

Dynamic Host Configuration Protocole

   DHCP (Dynamic Host Configuration Protocole) est un protocole faisant lui même partie de la suite de protocole BOOTP. Protocole de niveau application de type client-serveur, il permet à un hôte n'ayant pas de configuration réseau (adresse IP, masque, adresse dns, passerelle etc...), d'en obtenir une afin de pouvoir communiquer sur le réseau.

   DHCP permet l'allocation dynamique d'adresse IP mais peut également réserver certaines adresses à des clients spécifiques. On distingue 3 types d'allocations. L'allocation dynamique attribue une adresse IP à une machine parmi le pool d'adresse disponible. L'allocation automatique fonctionne de la même manière, mais fournit un baille infini, réservant ainsi l'IP de manière permanente. L'allocation manuelle, consiste à réserver une IP associée à une adresse MAC, garantissant à une machine de toujours obtenir la même adresse.

   Grâce à l'allocation dynamique d'adresse IP, une adresse IP peut être réutilisée sur le réseau lorsqu'une machine n'est plus connectée, permettant ainsi de profiter au mieux de la plage d'adresse disponible. De plus la configuration manuelle de chaque client peut être longue et source d'erreur, et en cas de modification du réseau (changement de l'adresse du dns ou de la passerelle par exemple) il est nécessaire de reconfigurer chaque client. Grâce à DHCP, les modifications sont apportées uniquement au serveur DHCP, propageant ainsi la mise à jour de la configuration à tous les clients.

   Il est possible d'avoir plusieurs serveurs DHCP sur un réseau, les clients DHCP doivent attendre un certains temps lors d'une demande de configuration, afin de recevoir plusieurs offres, et de pouvoir choisir celle qui lui convint le mieux.

   Un client peut également demander à utiliser certains paramètres spécifique, comme une adresse réseau particulière ou une durée de bail.

   Un serveur DHCP s'assure qu'une adresse IP n'est pas utilisée 2 fois sur le même réseau. Il mémorise les configurations client de manière à redonner, dans la mesure du possible, la même configuration au même client.

Format d'un message DHCP


_op (1)____|_Htype (1)____|_Hlen (1)____|_Hops (1)
________________________xid (4)___________________
_____________Secs (2)____|_flags (2)______________
_______________________ciaddr (4)_________________
_______________________yiaddr (4)_________________
_______________________siaddr (4)_________________
_______________________giaddr (4)_________________
_______________________chaddr (16)________________
_______________________sname (64)_________________
______________________fichier (128)_______________
____________________options (variable)____________

Description des champs

op (1 octet) Code opération du message / type du message. 1 = BOOTREQUEST, 2 = BOOTREPLY
htype (1 octet) Adresse matérielle, voir la section ARP dans le RFC "Assigned Numbers" ; par ex., '1' = Ethernet 10Mb.
hlen (1 octet) Longueur de l'adresse matérielle (par ex. '6' for Ethernet 10Mb).
hops (1 octet) Mis à zéro par le client, utilisé de manière optionnelle par les agents de relais quand on démarre via un agent de relais
xid (4 octets) Identifiant de transaction, un nombre aléatoire choisit par le client, utilisé par le client et le serveur pour associer les messages et les réponses entre un client et un serveur
secs (2 octets) Rempli par le client, les secondes s'écoulent depuis le processus d'acquisition ou de renouvellement d'adresse du client
flags (2 octets) Drapeaux (voir figure 2).
ciaddr (4 octets) Adresse IP des clients, rempli seulement si le client est dans un état AFFECTÉ, RENOUVELLEMENT ou REAFFECTATION et peut répondre aux requêtes ARP
yiaddr (4 octets) 'votre' (client) adresse IP.
siaddr (4 octets) Adresse IP du prochain serveur à utiliser pour le processus de démarrage ; retournée par le serveur dans DHCPOFFER et DHCPACK.
giaddr (4 octets) Adresse IP de l'agent de relais, utilisée pour démarrer via un agent de relais.
chaddr (16 octets) Adresse matérielle des clients.
sname (64 octets) Nom d'hôte du serveur optionnel, chaîne de caractères terminée par un caractère nul.
fichier (128 octets) Nom du fichier de démarrage, chaîne terminée par un nul ; nom "generic" ou nul dans le DHCPDISCOVER, nom du répertoire explicite dans DHCPOFFER.
options (variable) Champ de paramètres optionnels. Voir le document d'options pour une liste des options définies.

Alloctation d'une adresse réseau

1) le client diffuse un message DHCPDISCOVER sur son réseau local physique. Ce message peut inclure des options qui suggèrent des valeurs pour les adresses réseau et la durée du bail.
2) chaque serveur DHCP peut répondre avec un message DHCPOFFER, qui inclut une adresse réseau valide dans le champ yiadrr, ainsi que d'autres paramètres de configuration.
3) le client choisit parmi les propositions DHCPOFFER reçu par les serveur DHCP celle qui lui convient le mieux, puis diffuse un DHCPREQUEST, en re-spécifiant l'adresse IP choisie et les options de configurations.
4) le serveur répond par un DHCPACK en re-spécifiant l'adresse et les paramètres de configuration pour valider la demande du client.
5) Le client DEVRAIT faire une vérification finale sur les paramètres (généralement un ARP). Si le client détecte que l'adresse est déjà utilisée, il DOIT envoyer un DHCPDECLINE au serveur et relancer le processus de configuration. Le client DEVRAIT attendre un minimum de dix secondes avant de relancer la configuration pour éviter un trafic réseau excessif dans le cas d'un bouclage.

En cas de requête invalide, par exemple un DHCPREQUEST contenant une adresse IP invalide ou que le bail a expiré, le serveur peut diffuser un DHCPNACK.
Si l'adresse IP reçu par un client est déjà utilisée par un autre client du réseau, le client peut envoyer un DHCPDECLINE pour prévenir le serveur DHCP.
Lorsque le client désire libérer l'adresse réseau, il envoie un DHCPRELEASE au serveur.
Le client peut seulement demander les paramètres de configuration locaux avec un message DHCPINFORM. Dans ce cas le client possède déjà une adresse réseau attribuée de manière externe.

Format des messages DHCP

   DHCP utilise UDP comme protocole de transport des messages.

   Un message DHCPDISCOVER contient l'adresse MAC source du client et l'adresse MAC de diffusion en destination (FF:FF:FF:FF:FF:FF). L'adresse IP source est 0.0.0.0 et l'adresse de destination est l'adresse de diffusion 255.255.255.255. Le port source est 68 et le port de destination est 67. Cette diffusion est nécessaire puisque le client ne connait pas le ou les adresses des serveur DHCP.

   Un message DHCPOFFER contient l'adresse MAC source du serveur, l'adresse MAC de destination du client. L'adresse IP source est celle du serveur DHCP, et l'adresse de destination est l'adresse de diffusion 255.255.255.255. Port source 67 et port destination 68. Ce message contient les paramètre de configuration.

   Un message DHCPREQUEST contient l'adresse MAC source du client et l'adresse MAC de diffusion en destination (FF:FF:FF:FF:FF:FF). L'adresse IP source est 0.0.0.0 et l'adresse de destination est l'adresse de diffusion 255.255.255.255. Le port source est 68 et le port de destination est 67. Ce message est toujours en diffusion puisque cela permet à tous les serveur DHCP de recevoir le DHCPREQUEST. Le champ Server Identifier permet de spécifier à quel serveur DHCP est destiné le DHCPREQUEST. La diffusion permet aux autres serveur DHCP d'être avertit que le client décline leur DHCPOFFER. Ce message contient également les paramètres de configuration.

   Un message DHCPACK contient l'adresse MAC source du serveur, l'adresse MAC de destination du client. L'adresse IP source est celle du serveur DHCP, et l'adresse de destination est l'adresse de diffusion 255.255.255.255. Port source 67 et port destination 68. Ce message contient de nouveau les paramètres de configuration. Il permet de confirmer l'attribution de l'adresse réseau. Un client qui se souvient de l'adresse réseau qui lui a déjà été attribuée, peut ignorer l'envoie d'un DHCPDISCOVER et envoie directement un DHCPREQUEST. Lors du renouvellement d'un bail, le client envoie un DHCPREQUEST, mais en unicast, le serveur DHCP lui envoie un DHCPACK confirmant le renouvellement du bail.

Durée et renouvellement du bail

   Le client maintient deux temporisateurs, T1 et T2 qui spécifient les temps auxquels le client essaie d'étendre son bail sur son adresse réseau. T1 est le temps au bout duquel le client entre en état RENOUVELLEMENT et tente de contacter le serveur qui a émis l'adresse réseau du client. T2 est le temps au bout duquel le client entre en état REAFFECTATION et tente de contacter un serveur. T1 DOIT être plus récent que T2, qui doit être plus récent que la date à laquelle expire le bail.

   Au temp T1 ( 0,5*durée_du_bail) le client envoie un message DHCPREQUEST. Si aucun DHCPACK n'arrive avant T2 (0,875*durée_du_bail) le client envoie un DHCPREQUEST. En cas de non réponse le client peut re-émettre un DHCPREQUEST à la moitié du temps restant, jusqu'à un minimum de 60sec.

   Si le bail expire avant que le client ne reçoive un DHCPACK, le client passe en état INIT, il DOIT alors immédiatement stopper tout processus réseau et nécessite une initialisation des paramètres réseau comme si le client n'était pas initialisé.

Relay DHCP

   Comme les clients contactent les serveurs DHCP à l'aide d'une diffusion, dans un inter-réseau, vous devrez théoriquement installer un serveur DHCP par sous-réseau. Si votre routeur prend en charge la RFC 1542, il peut faire office d'agent de relais DHCP, et ainsi relayer les diffusions de demande d'adresse IP des clients DHCP dans chaque sous-réseau.

   Si votre routeur ne prend pas en charge la RFC 1542, une machine serveur peut être configurée comme agent de relais DHCP, il suffira de lui spécifier l'adresse du serveur DHCP. Les demandes des clients DHCP seront relayées vers le serveur DHCP par l'agent de relais DHCP qui transmettra les offres aux clients.

   Après avoir envoyé une trame de broadcast, le client DHCP dialoque avec l'agent de relai DHCP en unicast. L'agent demande une adresse au serveur DHCP dont il connaît l'adresse (2). Le serveur retourne à l'agent une adresse (3) qui est donnée au client DHCP par l'agent (4).

   Le principal problème du service DHCP est la mise à jour des serveurs de noms d'hôtes. Bind sous Linux permet la mise à jour dynamique (RFC 2136) grâce à un serveur "updater" qui peut ajouter ou supprimer dynamiquement des enregistrements de ressources. Il faut pour corriger cela installer un serveur DNS dynamique ( DDNS) qui accepte les inscriptions des clients DHCP.