Il Dynamic Host Configuration Protocol (in acronimo DHCP, in italiano "protocollo di configurazione IP dinamica"), in telecomunicazioni e informatica, è un protocollo applicativo (ausiliario) che permette ai dispositivi o terminali di una certa rete locale di ricevere automaticamente ad ogni richiesta di accesso, da una rete IP (quale una LAN), la configurazione IP necessaria per stabilire una connessione e operare su una rete più ampia basata su Internet Protocol (IP).
Il protocollo è implementato come servizio di rete ovvero come tipologia di server: ad esempio nei sistemi Unix e Unix-like è implementato nel demone DHCP, in quelli basati su Active Directory di Microsoft e/o Windows Server dal servizio server dhcp.
Generalità Descrizione e caratteristiche del DHCP Esso consente l'interoperabilità con tutte le altre sotto-reti scambiandosi dati, purché anch'esse integrate allo stesso modo con il protocollo IP. Infatti in una rete basata sul protocollo IP, ogni calcolatore ha bisogno di un indirizzo IP, scelto in modo tale che appartenga all'insieme di indirizzi possibili assegnati all'intera sottorete (cioè al Net_ID) a cui è collegato e che sia univoco, cioè non ci siano altri calcolatori che stiano già utilizzando quell'indirizzo.
Il compito di assegnare manualmente gli indirizzi IP ai calcolatori comporta infatti un rilevante onere per gli amministratori di rete, soprattutto in reti di grandi dimensioni o in caso di numerosi computer che si connettono a rotazione solo a ore o giorni determinati. Inoltre gli indirizzi IPv4 disponibili (attualmente usati nella quasi totalità delle reti al mondo) con l'aumentare dei computer connessi a Internet hanno cominciato a scarseggiare, diminuendo la disponibilità di IP fissi per eventuali configurazioni statiche.
DHCP supporta questo compito automaticamente e in maniera dinamica, cioè solo quando richiesto dall'host. Viene utilizzato soprattutto in reti locali, in particolare su Ethernet. In altri contesti, funzioni simili sono svolte all'interno di PPP. Una volta ricevuta la configurazione di rete la stazione o computer della rete locale diventa a tutti gli effetti un host (ospite) della rete Internet e può intraprendere sessioni di navigazione Web e tutti gli altri servizi offerti dalla rete stessa. Infatti, un servizio DHCP è svolto anche da un semplice router di casa.
Componenti Il client DHCP è un calcolatore che ha bisogno di ottenere un indirizzo IP valido per la sottorete a cui è collegato, è anche il programma che si occupa di richiedere l'indirizzo IP e configurarlo.
Il server DHCP è il calcolatore che assegna gli indirizzi IP, è anche il processo che svolge questa funzione. Talvolta questa funzione è incorporata in un router.
Il DHCP relay è il calcolatore (o più spesso una funzione implementata in un router) che si occupa di inoltrare le richieste DHCP ad un server, qualora questo non sia sulla stessa sottorete. Questo componente è necessario solo se un server DHCP deve servire molteplici sottoreti. Deve esistere almeno un DHCP relay per ciascuna sottorete servita. Ogni relay deve essere esplicitamente configurato per inoltrare le richieste a uno o più server.
Parametri gestiti Il protocollo DHCP viene usato anche per assegnare al computer diversi parametri necessari per il suo corretto funzionamento sulla rete a cui è collegato. Tra i più comuni, oltre all'assegnazione dinamica dell'indirizzo IP, si possono citare: Maschera di sottorete Default gateway Indirizzi dei server DNS Nome di dominio DNS di default Indirizzi dei server WINS Indirizzi dei server NTP Indirizzo di un server tftp e nome di un file da caricare per calcolatori che caricano dalla rete l'immagine del sistema operativo, ad esempio tramite l'ambiente di esecuzione pre-boot. Parametri di configurazione del proxy WPAD
Nel protocollo c'è comunque il supporto per assegnare tramite DHCP molti altri parametri, definiti nell'RFC 2132.
Inoltro e comunicazione dati Nelle piccole reti, in cui viene gestita una sola subnet IP, i client DHCP comunicano direttamente con i server DHCP. Tuttavia, i server DHCP possono anche fornire indirizzi IP per più sottoreti. In questo caso, un client DHCP che non ha ancora acquisito un indirizzo IP non può comunicare direttamente con il server DHCP utilizzando il routing IP, perché non ha un indirizzo IP con router, non conosce l'indirizzo IP di un router e non conosce l'indirizzo IP del server DHCP.
Per consentire ai client DHCP su sottoreti non direttamente servite dai server DHCP di comunicare con i server DHCP, è possibile installare agenti di inoltro DHCP su queste sottoreti. Il client DHCP trasmette sul collegamento locale; il relay agent riceve la trasmissione e la trasmette a uno o più server DHCP utilizzando l'unicast. Il relay agent memorizza il proprio indirizzo IP nel campo GIADDR del pacchetto DHCP. Il server DHCP utilizza GIADDR per determinare la sottorete su cui il relay agent ha ricevuto la trasmissione e assegna un indirizzo IP su quella sottorete. Quando il server DHCP risponde al client, invia la risposta all'indirizzo GIADDR, usando ancora l'unicast. Il relay agent quindi ritrasmette la risposta sulla rete locale.
In questa situazione, la comunicazione tra il relay agent e il server DHCP, utilizza in genere la porta 67 UDP di origine e di destinazione.
Modalità di assegnazione indirizzi IP A seconda dell'implementazione, il server DHCP può avere tre metodi di allocazione degli indirizzi IP:
Allocazione dinamica È l'allocazione automatica di indirizzi temporanei.
L'allocazione dinamica per un periodo dato viene chiamata 'affitto' (lease). Il client la può estendere tramite ulteriore richiesta o può rilasciare l'indirizzo affittato in qualsiasi momento se non serve più. In caso di scarsità di indirizzi, il server DHCP riutilizza indirizzi affittati col tempo scaduto
Allocazione automatica Il server DHCP assegna automaticamente un indirizzo IP a un client richiedente nell'intervallo definito dall'amministratore. Questo è come nell'allocazione dinamica, ma il server DHCP mantiene una tabella delle assegnazioni degli indirizzi IP passati, in modo che possa assegnare preferenzialmente a un client lo stesso indirizzo IP precedente.
Allocazione manuale (comunemente chiamata allocazione statica) Il server DHCP emette un indirizzo IP privato dipendente dal'indirizzo MAC (MAC address) di ciascun client, basato su una mappatura predefinita da parte dell'amministratore. Questa funzione è denominata in vari modi : come assegnazione DHCP statica nel DD-WRT, indirizzo fisso dalla documentazione dhcpd, prenotazione indirizzo da Netgear, prenotazione DHCP o DHCP statico da parte di Cisco e Linksys e prenotazione indirizzo IP o binding indirizzo MAC/IP da vari altri produttori di router. Se non viene rilevata alcuna corrispondenza per l'indirizzo MAC del client, il server può facoltativamente non ricorrere all'assegnazione dinamica o automatica.
DHCP viene utilizzato per Internet Protocol versione 4 (IPv4), nonché per l'IPv6. Sebbene entrambe le versioni abbiano lo stesso scopo, i dettagli del protocollo per IPv4 e IPv6 differiscono sufficientemente da poter essere considerati due protocolli separati. Per l'operazione IPv6, i dispositivi possono utilizzare in alternativa l'autoconfigurazione dell'indirizzo stateless. Gli host IPv6 possono anche utilizzare l'indirizzamento locale del collegamento per ottenere operazioni limitate al collegamento di rete locale.
Richiesta e attribuzione dell'indirizzo
DHCP utilizza il protocollo UDP, le porte registrate sono la 67 per il server e la 68 per il client.
Quando un calcolatore vuole ottenere un indirizzo tramite DHCP, attiva il processo DHCP client. In questo momento, il calcolatore non ha un indirizzo IP valido, quindi non può usare tutte le funzionalità della rete.
La procedura descritta dal protocollo consta di diversi handshake tra client e server, ovvero scambio di pacchetti, ovviamente tutti incapsulati in frame di livello datalink, come Ethernet: In primis, il client invia un pacchetto chiamato DHCPDISCOVER in broadcast, con indirizzo IP sorgente messo convenzionalmente a 0.0.0.0, e destinazione 255.255.255.255 (indirizzo di broadcast). Il pacchetto è ricevuto da tutti gli host presenti nello stesso dominio di broadcast, e quindi da eventuali server DHCP presenti, i quali possono rispondere (o meno) con un pacchetto di DHCPOFFER in cui propongono un indirizzo IP e gli altri parametri di configurazione al client. Questo pacchetto di ritorno è indirizzato all'indirizzo di livello datalink del client (al suo MAC address - non ha ancora un indirizzo IP) ovvero in unicast.
Se nel dominio di broadcast ci sono anche uno o più DHCP relay, questi inoltrano il pacchetto al loro server di riferimento, che può rispondere al client sempre attraverso il relay. Il relay agent comunica al server il proprio indirizzo IP sulla sottorete da cui ha ricevuto il pacchetto di DHCPDISCOVER, permettendo al server di capire da quale sottorete è arrivata la richiesta, e quindi offrire un indirizzo per la sottorete giusta. Un server DHCP che debba servire diverse sottoreti IP deve essere configurato per conoscere i parametri di ciascuna (indirizzo della rete, maschera di sottorete, indirizzo di broadcast, indirizzo del gateway).
Il client aspetta per un certo tempo di ricevere una o più offerte, dopodiché ne seleziona una, e invia un pacchetto di DHCPREQUEST (o DHCPACCEPT) in broadcast, indicando all'interno del pacchetto, con il campo "server identifier", quale server ha selezionato. Anche questo pacchetto raggiunge tutti i server DHCP presenti sulla rete (direttamente o tramite un relay).
Il server che è stato selezionato conferma l'assegnazione dell'indirizzo con un pacchetto di DHCPACK (nuovamente indirizzato in unicast all'indirizzo di livello datalink del client, possibilmente attraverso un relay); gli altri server vengono automaticamente informati che la loro offerta non è stata scelta dal client, e che sulla sottorete è presente un altro server DHCP.
Scadenza e rinnovo degli indirizzi A questo punto, il client è autorizzato a usare l'indirizzo ricevuto per un tempo limitato, detto tempo di lease. Prima della scadenza, dovrà tentare di rinnovarlo inviando un nuovo pacchetto DHCPREQUEST al server, che gli risponderà con un DHCPACK se vuole prolungare l'assegnazione dell'indirizzo. Questi sono normali pacchetti IP unicast scambiati tra due calcolatori che hanno indirizzi validi. Se il client non riesce a rinnovare l'indirizzo, tornerà allo stato iniziale cercando di farsene attribuire un altro.
Identificazione e autenticazione dei client Il client si identifica verso il server attraverso un campo client-id dei pacchetti DHCP. Questo campo ha normalmente come valore l'indirizzo MAC della scheda di rete per cui si richiede l'indirizzo, ma può anche essere configurato manualmente. Questa è l'unica forma di autenticazione disponibile per DHCP, ed è piuttosto debole, in quanto utilizza un dato che viene inviato in broadcast sulla rete locale, e quindi può essere facilmente trovato da qualunque altro calcolatore connesso alla stessa rete. Per controllare l'accesso a una rete esistono metodi più solidi che, però, richiedono un supporto da parte degli switch a cui sono collegati gli utenti, come IEEE 802.1x.
Un server dovrebbe cercare di assegnare allo stesso client sempre lo stesso indirizzo IP su ciascuna sottorete, ma non ci sono garanzie che questo sia possibile, a meno che un indirizzo non sia associato esclusivamente a un client.
Il server può utilizzare il campo client-id per decidere quale indirizzo assegnare al client, o quali altri parametri passargli, o anche di non rispondere per nulla alla richiesta del client.