DHCP
Introduction
DHCP et Bootp sont des protocoles permettant de configurer automatiquement l'environnement IP des équipements réseau : adresse IP, masque de réseau, routeur par défaut, adresse de serveurs DNS, etc….
Ces dispositifs permettent de s'affranchir des reconfigurations manuelles des postes, suite à des déménagements ou des modifications d'architecture.
Bootp
Le protocole Bootp est défini par les RFCs :
· RFC951 Bootpstrap Protocol
· RFC1542 Clarifications and Extensions for Bootp
Le mécanisme est le suivant :
1. Le client émet par broadcast une trame de requête Bootp, contenant son adresse MAC.
2. Le serveur Bootp du réseau reçoit ce broadcast ; si l'adresse MAC du PC est présente dans sa table Bootp, il envoie alors une réponse Bootp, contenant les paramètres de configuration IP du client (adresse IP, masque de réseau, routeur par défaut, serveur DNS, etc….).
3. Le client reçoit la trame et configure son stack TCP/IP.
4. Le client adresse ensuite au serveur Bootp (ou à un autre serveur si cela a été spécifié dans la réponse Bootp) une requête de transfert tftp afin d'obtenir un fichier de configuration.
5. Une fois que le client a obtenu les détails de sa configuration, il peut optionnellement émettre une requête de transfert tftp d'image système (si cela a été spécifié dans le fichier de configuration reçu).
La durée de bail d'une adresse IP n'est pas configurable ; elle ne peut prendre qu'une valeur infinie.
D'après ce mécanisme, le serveur Bootp doit avoir connaissance de l'adresse MAC du client Bootp pour être autorisé à lui répondre, et disposer des paramètres IP qui lui sont associés.
Une table faisant correspondre pour chaque client Bootp son adresse MAC et les paramètres IP associés doit donc être manuellement renseignée pour chaque équipement. Ce mécanisme pose le problème d'une administration difficile.
Le protocole Bootp est basé sur IP/UDP. Un protocole plus ancien, RARP avait été défini pour permettre à un client d'obtenir une adresse IP à partir de son adresse MAC. Mais s'appuyant sur le protocole de liaison de données, RARP nécessite sur le poste client des modifications du noyau ou des pilotes de la carte réseau ,pour permettre son interprétation.
DHCP
DHCP, Dynamic Host Configuration Protocol, est un protocole client/serveur défini par les RFCs :
· RFC2131 Dynamic Host Configuration Protocol
· RFC2132 DHCP Options and Bootp Vendor Extensions
DHCP est basé sur le protocole Bootp, l'enrichissant de nouvelles fonctionnalités, comme l'allocation dynamique d'adresses IP : il n'est plus utile de renseigner manuellement une table de correspondance adresse MAC / adresse IP. Une adresse IP peut être attribuée à partir d'un pool d'adresses IP disponibles.
Le format de la trame DHCP est le suivant :
0 8 16 24 31
| Type du message (op)1 | Type de l'adresse MAC (htype)2 | Longueur de l'adresse MAC (hlen) | (hops) |
| Identifiant de la transaction choisi aléatoirement (xid)3 | |||
| Temps écoulé depuis le début de la transaction (secs) | (flags)4 | ||
| Adresse IP du client renseignée uniquement en cas de statut Bound, Renew, Rebinding (ciaddr) | |||
| Adresse IP du client renvoyée par le serveur DHCP ('your IP address') (yiaddr) | |||
| Adresse IP du serveur à utiliser dans la prochaine étape du processus Bootp (siaddr)5 | |||
| Adresse IP de l'agent de relais DHCP (giaddr) | |||
| Adresse MAC du client (16 octets) (chaddr) | |||
| Adresse optionnelle d'un serveur (64 octets) (sname) | |||
| Nom du fichier de boot renseigné dans les DHCP Offer (128 octets) (file) | |||
| Paramètres complémentaires définis à partir d'une liste déterminée d'options (options)6 | |||
| (op)1 : | Type du message. | |||
| | 1 = BootRequest | (trame DHCP émise par le client à destination du serveur) | ||
| | 2 = BootReply | (trame DHCP émise par le serveur à destination du client) | ||
| | | |||
| (htype)2 : | Type de l'adresse MAC | |||
| | Exemple : | 1 = Ethernet 10Mb/s | ||
| | | |||
| (xid)3 : | Identifiant de la transaction choisi aléatoirement. | |||
| | Utilisé pour associer les requêtes d'un client et les réponses d'un serveur à une même transaction DHCP, il est choisi par le client DHCP et doit être unique sur le réseau local. | |||
| | | |||
| (flags)4: | Le bit positionné le plus à gauche de ce champ est appelé le "Flag de Broadcast". | |||
| | | |||
| (siaddr)5 : | Adresse IP du serveur à utiliser dans la prochaine étape du processus Bootp. | |||
| | Ce champ est renseigné dans les messages DHCP Offer et DHCP Ack. | |||
| | | |||
| (options)6 : | Exemple d'option : | |||
| | 'Type' | · Type du message DHCP, champ impérativement renseigné dans toute trame DHCP. | ||
| | | · L'option type 1 correspond à un message DHCP Discover. | ||
| | 'Server Identifier' | · Identifiant du serveur DHCP | ||
| | 'Requested IP Address' | · Adresse IP souhaitée par le client DHCP | ||
| | 'IP Address Lease Time' | · Durée de bail de l'adresse IP | ||
| | 'Parameter Request List' | · Liste des paramètres IP attendus par le client | ||
Ce format de trame correspond à celui de la trame Bootp à quelques différences près :
· Le champ 'vendor extensions' est renommé 'options' ; il est désormais de longueur variable (de 64 octets dans la trame Bootp). Les clients DHCP peuvent négocier une taille maximale de trames DHCP échangées en positionnannt le champ option 'Maximum DHCP Message Size'.
· Les deux octets qui suivent le champ 'secs' ne sont pas utilisés par la trame Bootp. La norme DHCP nomme ce champ 'flags', et attribue un rôle au bit positionné le plus à gauche du champ (le "Flag de Broadcast").
· Flag de broadcast
Certains clients DHCP ne sont pas capables de recevoir des datagrammes unicast avant que leur stack TC/IP ne soit configuré.
Dans ce cas, le client DHCP positionne à 1 le "Flag de Broadcast" (le bit le plus à gauche du champ 'flags') sur toute trame DHCP qu'il émet. Un serveur DHCP recevant une telle trame répond alors systématiquement par broadcast.
Si le "Flag de Broadcast" n'est pas positionné, les réponses des serveurs peuvent être émises sous forme d'unicast, l'adresse MAC destinatrice étant celle du champ 'chaddr' lu dans la trame cliente et l'adresse IP destinatrice étant celle offerte par le serveur.
Relais BootP (Bootp Relay)
Les communications DHCP sont basées sur des flux IP broadcastés. Un serveur DHCP ne recoit donc pas les requêtes DHCP des clients qui n'appartiennent pas à son domaine de diffusion.
Le mécanisme de relais Bootp permet à un client DHCP de passer outre cette limitation.
Lorsqu'un agent de relais Bootp reçoit une trame de broadcast DHCP, il la transmet aux serveurs DHCP appartenant à d'autres réseaux (par unicast ou par broadcast), en renseignant le champ 'giaddr' avec sa propre adresse IP. IL incrémente également le champ 'hops'. Une limite peut être fixée pour la valeur de ce champ afin de contrôler le nombre de retransmissions d'une même trame : au delà de cette limite, l'agent de relais supprime la trame.
Un serveur DHCP, qui reçoit une trame DHCP dont le champ 'giaddr' n'est pas à zéro, sait que la trame provient d'un client DHCP qui n'est pas joignable par broadcast. Il adresse alors sa réponse par unicast à l'agent de relais. L'agent de relais transmet la trame au client DHCP par broadcast ou par unicast en fonction du positionnement du "Flag de Broadcast".
Négociation DHCP
Le mécanisme DHCP définit les étapes de négociation suivantes :
1. Le client DHCP émet, par broadcast sur le réseau local, une trame de découverte DHCP, "DHCP Discovery", qui permet de :
· découvrir les serveurs DHCP du réseau,
· et demander l'obtention d'une configuration IP.
Le tableau suivant présente les adresses des en-têtes IP de la trame DHCP Discovery :
| Protocole | Adresse Source | Adresse Destination |
| MAC | Adresse MAC du client DHCP | FF FF FF FF |
| IP | 255.255.255.255 | 0.0.0.0 |
Le client renseigne le champ 'chaddr' de la trame DHCP par son adresse MAC, afin que les serveurs aient connaissance de son adresse MAC, même si la trame a été transmise par un agent de relais Bootp.
Le client peut éventuellement :
· spécifier une liste de paramètres attendus pour sa configuration, en renseignant le champ option 'Parameter Request List' dans sa trame de découverte,
· suggérer des valeurs pour l'adresse réseau en renseignant le champ option 'Requested IP Address', ou une durée de bail, dans le champ option 'IP Address Lease Time'.
2. Un serveur DHCP reçoit ce broadcast.
S'il est capable de satisfaire la demande, il répond en émettant une trame "DHCP Offer", incluant les paramètres requis par le client DHCP, et les valeurs qu'il lui a éventuellement suggérées (par broadcast ou unicast en fonction du positionnement du "Flag Broadcast" et de l'intervention d'un agent de relais).
Le serveur indique l'adresse IP qu'il propose au client en renseignant le champ 'yiaddr' de sa trame d'offre, et remplit à l'identique le champ option 'Requested IP Address'.
Un serveur DHCP renseigne le champ option 'Server Identifier' de toute trame DHCP qu'il émet.
La norme suggère au serveur DHCP :
· d'être capable de vérifier que l'adresse IP proposée n'est pas déjà utilisée sur le réseau (par des échos ICMP par exemple) — cette vérification, toutefois, ne doit pas avoir lieu en cas de renouvellement de bail,
· de laisser le choix à l'administrateur d'activer ou non cette vérification,
· et d'enregistrer un "Binding" pour cette offre, afin de ne pas proposer la même adresse à plusieurs clients.
La norme recommande de respecter la stratégie suivante pour l'attribution d'une adresse IP :
a. S'il existe déjà un "Binding" pour ce client, et qu'il est en cours de validité, le serveur attribue la même adresse IP que celle mentionnée dans le "Binding".
b. S'il existe déjà un "Binding", mais qu'il n'est plus valide (le bail a expiré, ou il a été préalablement libéré par le client), le serveur attribue la même adresse IP que celle mentionnée dans le "Binding", à condition que celle-ci soit encore valide et qu'elle n'ait pas été réattribuée.
c. Si le client a suggéré une adresse IP dans le champ option 'Requested Ip Address', le serveur lui attribue la même adresse, si celle-ci est toujours valide et qu'elle n'a pas été déjà attribuée.
d. Le serveur attribue une adresse IP choisie à partir d'un pool d'adresse renseigné administrativement.
La norme recommande également de baser l'adresse IP sur le réseau IP d'où provient le message "DHCP Discovery" :
· l'adresse réseau du serveur DHCP si le client est sur le même réseau physique,
· ou l'adresse réseau de l'agent de relais Bootp si le champ 'giaddr' de la trame de découverte DHCP n'est pas à zéro.
Cette stratégie d'attribution d'adresse IP n'est qu'une recommandation. Il n'est pas du ressort de la norme de fixer le choix.
Un serveur DHCP doit être en mesure d'attribuer une adresse IP différente de celle réclamée par le client, peut décider de ne pas attribuer d'adresse IP, même s'il reste des adresses libres, et ce pour des raisons administratives.
3. Le client reçoit l'offre, et peut décider d'accepter ou d'attendre éventuellement d'autres propositions de serveurs DHCP.
Il signifie son accord au serveur DHCP dont il retient l'offre, par une trame de broadcast "DHCP Request" dont :
· le champ option 'Server Identifier' est renseigné par l'identifiant du serveur DHCP sélectionné,
· et le champ 'ciaddr' est renseigné par le contenu du champ 'yiaddr' lu dans la trame d'offre DHCP.
La trame reprend les paramètres de l'offre, ou peut les modifier pour suggérer de nouvelles valeurs, (en renseignant les champs options adéquats).
Si le client ne reçoit aucune offre acceptable, il peut décider de renouveler le processus de configuration en émettant une nouvelle trame de découverte.
4. Les serveurs reçoivent le broadcast.
Ceux qui ne reconnaissent pas leur identifiant dans la trame de broadcast sont, par là même, notifiés du refus de leur offre.
Si le serveur sélectionné par le client DHCP est capable de satisfaire les options souhaitées, il acquitte la demande en émettant une trame "DHCP Ack", par broadcast ou unicast en fonction du positionnement du "Flag Broadcast" et de l'intervention d'un agent de relais ; il lui confirme l'adresse IP et les paramètres associés, et enregistre le "Binding" dans sa base d'information.
Si le serveur DHCP n'est pas capable de satisfaire la demande du client, il renvoie un acquittement négatif par un broadcast "DHCP Nack". La norme recommande alors au serveur d'être capable d'émettre un message informant l'administrateur du problème.
Si le client DHCP n'a pas sélectionné d'offre, les serveurs DHCP ne sont notifiés ni du refus de leur offre, ni de son acceptation. La norme recommande alors aux serveurs de conserver le "Binding" jusqu'à expiration d'un time-out, et de le libérer au delà.
Le PC reçoit le message d'acquittement.
La norme suggère au client DHCP de vérifier que l'adresse proposée n'est pas utilisée par le réseau (par une requête ARP par exemple).
Si elle ne l'est pas, le client, à ce stade, a achevé sa configuration. La norme recommande ensuite au client d'émettre une trame de réponse ARP afin de mettre à jour le cache des hosts du réseau.
Sinon, il décline l'offre du serveur DHCP par un unicast "DHCP Decline", et recommence le processus de configuration, après 10s de délais, durée recommandée par la norme. Le serveur DHCP qui reçoit cette trame doit alors enregistrer l'adresse IP comme non valide. La norme recommande au serveur d'être alors capable d'émettre un message informant l'administrateur du problème.
Si le client a reçu un message de non acquittement, il recommence le processus de configuration en émettant une nouvelle trame de découverte.
Si le client n'a pas reçu de message d'acquittement, ni de non acquittement, il reémet un broadcast de "DHCP Request".
Si le client DHCP n'obtient pas de réponse après un certain nombre de tentatives — nombre défini par un algorithme de retransmission qui, d'après une recommandation de la norme, ne doit pas durer plus d'une minute — il recommence le processus de configuration.
Le schéma ci-dessous illustre le mécanisme de configuration IP par DHCP, dans le cas où les serveurs et le client sont sur le même réseau local (même domaine de diffusion) :
Cas Particuliers
Libération d'adresse
Un client qui souhaite libérer son bail envoie au serveur DHCP un message "DHCP Release". Un tel message n'est pas envoyé lorsque le PC s'éteint.
Renouvellement de bail
Un client qui souhaite renouveler le bail de son adresse IP, envoie un message "DHCP Request", mais :
· sans renseigner le champ 'Server Identifier', ni le champ 'Requested IP Address',
· en précisant, dans le champ 'ciaddr', l'adresse IP qui lui a été préalablement attribuée.
Le message est envoyé par unicast au serveur qui a préalablement attribué l'adresse IP, et qui enverra en retour un unicast d'acquittement.
Le client qui a été configuré par DHCP a reçu, en argument du message DHCP Ack, deux timers T1 et T2.
T1 est le temps au bout duquel le client demande une extension de son bail : il émet une trame "DHCP Request" adressée au serveur qui lui a attribué son adresse IP (il passe de l'état BOUND à l'état RENEWING). Il renseigne le champ 'ciaddr' avec son adresse IP courante, mais laisse le champ option 'Server Identifier' à zéro.
Dès qu'il reçoit un message d'acquittement DHCP, le client retourne à l'état BOUND.
Si le client ne reçoit pas de message d'acquittement au bout de T2, il envoie une trame "DHCP Request" par broadcast à tous les serveurs. Il passe alors à l'état REBINDING.
Dès qu'il reçoit un message d'acquittement DHCP, il retourne à l'état BOUND.
Si le client DHCP ne reçoit pas de trame d'acquittement avant l'expiration de son bail (T1 < T2 < Durée de bail), il passe à l'état INIT et recommence le processus de configuration IP en émettant une trame de découverte DHCP.
Ces timers sont configurables par le serveurs, via des champs options des trames DHCP transmises au client. Par défaut :
T1 = 0,5 x (Durée de bail)
T2 = 0,875 x (Durée de bail)
Négociation DHCP excluant l'adresse IP
Lorsqu'un client DHCP a reçu une adresse IP par un moyen externe (configuration manuelle de l'administrateur), il émet une trame "DHCP Inform" pour obtenir le reste de sa configuration IP.
Il renseigne le champ 'ciaddr' par son adresse IP.
Les serveurs répondent au client par un unicast d'acquittement, adressé à l'adresse IP lue dans le champ 'ciaddr',
· sans allouer de nouvelle adresse,
· ni vérifier l'adresse annoncée dans les "Bindings",
· et sans inclure de durée de bail.
La norme recommande toutefois au serveur DHCP de vérifier que l'adresse annoncée par le client n'est pas déjà utilisée, et de laisser le champ 'yiaddr' à zéro dans la trame d'acquittement.
Reboot d'un client DHCP
Un client qui reboote, mais qui a gardé la connaissance de l'adresse IP qui lui a précédemment été attribuée par DHCP, émet une trame "DHCP Request" :
· en renseignant le champ 'Requested IP Adress'
· et en laissant à 0 le champ 'Server Identifier'.
Il passe ainsi de l'état INIT-REBOOT à l'état REBOOTING.
A réception d'une trame d'acquittement DHCP, il atteint le statut BOUND.
Diagramme d'état
Le diagramme suivant présente les différents états d'un client DHCP et les transitions possibles entre ces états.
Transport des messages DHCP
Les messages DHCP sont transportés par le protocole UDP. Les messages émis par un client vers un serveur DHCP (correspondant au type de trame DHCP 'BootRequest') utilisent le port 67. Les messages émis par les serveurs à destination des clients DHCP (correspondant au type de trame DHCP 'BootReply') utilisent le port 68.
Configuration administrative des serveurs DHCP
Les serveurs DHCP ne sont pas contraints de répondre à tous les messages de découverte ou de requêtes DHCP. Les spécifications de la norme ne portent que sur les interactions entre clients et serveurs lorsque ceux-ci ont choisi de communiquer. Les contrôles administratifs des autorisations de réponses sont du ressort de l'administrateur, qui peut, par exemple, configurer les serveurs DHCP pour ne répondre qu'à une liste prédéfinie de clients.
Les modes de configuration usuellement employés pour les serveurs DHCP sont les suivants :
· Bootp Manuel
Cette configuration correspond au support du protocole Bootpstrap : l'adresse MAC doit être connue, son association avec une adresse IP est manuelle et le bail est permanent.
· Bootp Automatique
Cette configuration permet à un PC d'obtenir par Bootp une adresse à partir d'un pool d'adresses IP dont le bail est permanent.
· DHCP Dynamique
Les adresses IP sont assignées par DHCP à partir d'un pool d'adresses IP, les durées de bail étant configurables.
· DHCP Manuel
Il s'agit de l'équivalent DHCP du Bootp Manuel. L'adresse MAC du PC doit être connue et assignée statiquement à une adresse IP ; le bail est permanent.
· DHCP Automatique
Il s'agit de l'équivalent DHCP du Bootp Automatique.






0 commentaires:
Enregistrer un commentaire