Il protocollo DHCP Dynamic Host Configuration Protocol fornisce un meccanismo per assegnare dinamicamente gli indirizzi IP ed i parametri di configurazione ad un host tramite TCP/IP.
Questo protocollo definito dalle RFC 1533, 1534, 1541 e 1542 è un'estensione del protocollo BOOTP. L'utilizzo del DHCP su una rete con un significativo numero di macchine ne permette una migliore e più semplice gestione, riducendo i possibili conflitti di indirizzo.
Attraverso DHCP infatti, oltre ad assegnare ad ogni macchina automaticamente un diverso indirizzo di rete e la relativa subnet mask, è possibile assegnare anche altri parametri come per esempio: l'indirizzo di broadcast, il nome del nodo e del dominio, il gateway predefinito, l'indirizzo del server di stampa, l'indirizzo del DNS ecc.
Per utilizzare questo protocollo deve essere configurata una macchina, il DHCP Server, che si fa carico di distribuire gli indirizzi e gli altri parametri di configurazione ai client che ne fanno richiesta. Il range degli indirizzi distribuibili è chiamato Scope, ed ogni configurazione è valida solo per un determinato periodo di tempo, chiamato tempo di lease, scaduto il quale il client deve richiedere nuovamente la configurazione. In sostanza il client affitta il suo indirizzo di rete per un determinato periodo di tempo.
Il processo per la configurazione di un client tramite DHCP avviene in quattro fasi:
1. Il client invia sulla rete un messaggio in broadcast (in quanto non conosce l'indirizzo del server) chiamato DHCPDISCOVER. Questo messaggio proverrà quindi da 0.0.0.0 e come destinazione avrà 255.255.255.255. Il messaggio DHCPDISCOVER contiene anche l'indirizzo MAC (univoco) della macchina che fa la richiesta.
2. Il server DHCP che riceve la richiesta invia in risposta un messaggio chiamato DHCPOFFER contenente un indirizzo selezionato dallo SCOPE e l'indirizzo MAC del client che ne ha fatto richiesta per far sì che l'offerta giunga al client corretto.
3. Il client, invia ora un messaggio DHCPREQUEST in broadcast indicando che ha accettato l'indirizzo IP offerto.
4. Infine il server DHCP invia un messaggio DHCPACK (ACKnowledgment) che conferma al client l'assegnazione dell'indirizzo con il relativo tempo di lease ed invia anche i vari parametri opzionali.
Nel caso in cui il server è impossibilitato ad assegnare la configurazione richiesta dal client invia un messagggio di tipo DHCPNACK (Negative ACKnowledgment) il quale indica che è necessario ripetere tutti i passi per ottenere una nuova configurazione.
Esempio che è possibile trovare nei log di un DHCP server Linux:
Joker dhcpd: DHCPDISCOVER from 00:48:54:6e:b0:4d (Enigma) via eth0
La macchina Joker (DHCP Server) riceve la richiesta da Enigma (DHCP Client) con MAC Address 00:48:54:6e:b0:4d
Joker dhcpd: DHCPOFFER on 192.168.0.100 to 00:48:54:6e:b0:4d (Enigma) via eth0
Joker offre a Enigma, identificato tramite il MAC 00:48:54:6e:b0:4d, l'indirizzo 192.168.0.100
Joker dhcpd: DHCPREQUEST for 192.168.0.100 (192.168.0.2) from 00:48:54:6e:b0:4d (Enigma) via eth0
Enigma accetta e richiede l'indirizzo 192.168.0.100
Joker dhcpd: DHCPACK on 192.168.0.100 to 00:48:54:6e:b0:4d(Enigma) via eth0
Joker assegna ad Enigma l'indirizzo richiesto
Il rinnovo DHCP avviene in tre fasi:
1. Ogni volta che il client DHCP viene riavviato, se il tempo di lease non è scaduto, viene richiesta la conferma per la configurazione corrente tramite uno scambio di messaggi DHCPREQUEST e DHCPACK.
2. Quando è trascorso il 50% del tempo di lease il client DHCP invia messaggio al server DHCP per rinnovare la configurazione in uso. Se il server riceve il messaggio ed è disponibile al rinnovo invia un messaggio DHCPACK con i parametri, altrimenti il client utilizza i proprio valori fino alla scadenza del lease.
3. Quando è trascorso l'85% del tempo di lease il client DHCP invia in broadcast una richiesta DHCP per rinnovare la configurazione. Se il DHCP server che aveva precedentemente concesso la licenza riceve il messaggio, la rinnova, altrimenti viene inviato un DHCPNACK e quindi il client dovrà ripetere le quattro fasi iniziali.