DHCP en pratique

DHCP est définit par la RFC 2131 disponible à http://www.ietf.org/rfc/rfc2131.txt . Il permet de gérer l'attribution d'adresses IP sur un réseau de manière centralisée. Le protocole est assez simple; il n'y a qu'un seul format de trame possible, donc les paquets sont souvent assez creux (ie: remplis de zéros).

D'abord, la machine qui souhaite avoir une adresse IP envoie un paquet au broadcast, avec comme adresse source "0.0.0.0". Le type de ce paquet est DHCPDISCOVER.

Le serveur DHCP lui répond alors, en mettant comme adresse IP de destination l'IP proposée par DHCP. Le client reçoit ce paquet via son adresse mac. Le type de ce paquet est DHCPOFFER.

Le client demande alors explicitement cette adresse, en envoyant une DHCPREQUEST.

Le serveur valide alors cette demande via un paquet de type DHCPACK.

Quelques détails sur le format:

   0                            1                            2                            3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     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)                         |
   +---------------------------------------------------------------+
   |                                                               |
   |                          file    (128)                        |
   +---------------------------------------------------------------+
   |                                                               |
   |                          options (variable)                   |
   +---------------------------------------------------------------+

                  Figure 1:  Format of a DHCP message

Ce que la RFC écrit en petit, c'est que les options commencent par un "magic cookie", égal à { 99, 130, 83, 99 }

Enfin, aussi fondamental que puissent être les types de messages (DHCPDISCOVER, DHCPOFFER etc ..), ces valeurs sont en fait stockées dans l'espace options.
L'option est alors une suite de 3 octets:
- le premier code le type de paquet. Dans notre cas, la valeur 53 doit-être utilisée : DHCP Message Type.
- le second est la taille des options, ici 1 (octet)
- le troisième est le type de requête, donc la correspondance est donnée par :

Value   Message Type
           -----   ------------
             1     DHCPDISCOVER
             2     DHCPOFFER
             3     DHCPREQUEST
             4     DHCPDECLINE
             5     DHCPACK
             6     DHCPNAK
             7     DHCPRELEASE

Source: http://www.ietf.org/rfc/rfc1533.txt

Pour pseudo conclure, le code pour mbed est disponible dans la librairie rflpc en tant que sample, dans la branche dhcp .

Add new comment

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image.