DHCP (Dynamic Host Configuration Protocol)

Il semplice gesto di accendere il computer e collegarlo alla rete tramite il cavo ethernet o connettendosi in wireless ci consente in un attimo di essere connessi non solo online ma anche con gli altri computer della nostra rete, condividendo con facilità file e risorse di sistema. Questa però non è magia ma è semplicemente frutto del lavoro di un "piccolo" servizio di rete che fornisce indirizzi IP (i numeri identificativi di ogni PC) ai vari computer della rete in maniera del tutto automatizzata. Il nome di chi svolge tutto ciò è DHCP (Dynamic Host Configuration Protocol), un protocollo di rete, spesso integrato nei router che sollevando così gli amministratori di rete e gli utenti utilizzatori dal gravoso compito di gestire manualmente gli indirizzi IP.

Il DHCP fa parte della suite protocollare del TCP/IP, se su una rete viene utilizzata tale architettura TCP/IP (rappresenta lo standard de facto), essa per funzionare ha bisogno all'avvio delle macchine di un software di protocollo e di parametri che gli permettano la sua corretta configurazione per il funzionamento. Il processo di fornitura dei parametri viene chiamato "configurazione". Quindi sorge il problema da dove caricare il software e di come ottenere i parametri di configurazione. 

Il SW (SoftWare) di protocollo può essere:

  • ricavato da una ROM (Read Only Memory) interna
  • caricato da un disco durante la fase di Boot
  • precaricato col S.O. (Sistema Operativo)

 

I parametri del protocollo possono essere:

  • inseriti manualmente
  • ricavati da un file locale su disco
  • ottenuti automaticamente dalla rete

 

In passato tali parametri venivano caricati manualmente dal Network Administrator (amministratori di rete) e le macchine possedevano tutte indirizzi IP assegnati (detti indirizzi statici o fissi).

Al crescere della Rete e delle macchine ivi presenti, questa soluzione non andava più bene; oltre al numero crescente di computer interconnessi, nelle odierne internet, dove gli host portabili si spostano da una subnet ad un'altra, vi è uno sfruttamento non ottimale degli IP address che risultano impegnati anche quando non servono (non sono connessi).

E' opportuna quindi una soluzione che automatizzi il tutto, ecco che così che nasce l'esigenza che ha portato all'attuale protocollo che risolve dette problematiche, il DHCP (Dynamic Host Configuration Protocol)

NOTA: indipendentemente dal fatto che si utilizzi il DHCP su una rete o meno, alcuni indirizzi IP devono rimanere comunque statici, come ad es. per i computer che eseguono i protocolli DHCP, WINS e DNS.

 

Quindi il DHCP (Dynamic Host Configuration Protocol) è la soluzione della suite TCP/IP che consente una messa in rete Plug-and-Play degli host (i client DHCP).

 

 

Cos'è il DHCP

Il DHCP è un protocollo di rete che permette ai dispositivi presenti che ne facciano richiesta di essere automaticamente configurati per entrare a far parte della LAN (Local Area Network). Tramite questo protocollo non è necessario specificare alcun parametro di rete, in quanto il DHCP Server fornisce tutte le informazioni necessarie al client nel momento stesso in cui questo effettua il boot.

Il DHCP non solo è in grado di fornire gli IP address (dinamici) ai client, ma fornisce anche i parametri necessari al funzionamento del protocollo IP, detti parametri sono:

  • Indirizzo IP: dipendente dalla rete in cui l'host si troova
  • Subnet-mask: necessaria per ricavarsi il subnet addressing
  • Gateway Address: indirizzo IP dell'elemento di rete (solitamente un router) al quale spedire i pacchetti diretti verso l'esterno della subnet
  • Domain Name: definisce il nome della rete in cui l'host operat
  • ...ulteriori parametri di configurazione

 

 

Predecessori del DHCP

Il primo RFC del DHCP 1531 risale all'ottobre del 1993, precedentemente si usava:

  • RARP
  • ICMP
  • BOOTP
  • DRARP
  • TFTP

 

RARP (Reverse Address Resolution Protocol)

Il funzionamento di RARP è molto semplice, l'host invia una RARP Request con il suo MAC address in broadcast. Il server RARP cerca il MAC address nella sua tabella e risponde con l'IP address dell'host.

N.B. il client ed il server devono essere nella stessa subnet.

I limiti di RARP saltano subito agli occhi, è un sistema totalmente SERVER BASED, è in grado di fornire soltanto indirizzi IP, è in grado di soddisfare le sole richieste degli host client che sono noti al server e funziona staticamente. Per migliorare RARP dopo l'ottenimento degli indirizzi IP da parte degli host si potrebbe utilizzare TFTP per ottenere ulteriori informazioni di configurazione, oppure si può usare DARP (Dynamic RARP).

ICMP (Internet Control Message Protocol)

Più che un sistema di configurazione di rete diverso, ICMP è un protocollo che rappresenta un arricchimento di RARP, esso presenta infatti due funzioni in più:

  • reperimento della subnet-mask
  • determinazione del gateway di default

Ecco la sequenza di operazioni svolte per la configurazione di rete da parte di ICMP:

  1. Invio in broadcast di una request RARP
  2. Estrazione dell'IP address dalla risposta RARP
  3. Invio in broadcast di una richiesta ICMP per la subnet-mask
  4. Estrazione della subnet-mask da un replay ICMP
  5. Invio in broadcst di una richiesta per il gateway
  6. Estrazione dell'IP address del gateway da un repaly ICMP

BOOTP (BootStrap Protocol)

Con la sua RFC 951 del Settembre del 1985, il BOOTP rappresenta il vero padre del DHCP, il BOOTP fù il primo protocollo per la configurazione host di macchine diskless (senza disco fisso).

Il BOOTP usa un meccanismo di tipo Client-Server con l'invio di pacchetti UDP (da 576 byte), il processo di configurazione degli host in rete si svolger per lo più in questa maniera:

  1. Il client (host) trasmette in broadcast una BOOTREQUEST contenente il proprio MAC address
  2. Il server risponde trasmettendo in broadcast una BOOTREPLY contenente l'IP address

A differenza di RARP, il BOOTP oltre all'indirizzo IP fornisce al client diversi parametri: IP address, subnet-mask, indirizzo IP del gateway, posizione del boot file, etc...

Il limite principale di BOOTP risiede nel suo meccanismo di funzionamento di tipo statico, infatti il client deve essere presente nel database del server BOOTP prima del BOOTREQUEST altrimenti non viene riconosciuto; inoltre avere un BOOTP per ogni subne di rete risulta molto oneroso.

 

DHCP l'evoluzione del BOOTP

Il DHCP (Dynamic Host Configuration Protocol) è costruito a partire dal BOOTP, con le seguenti aggiunte:

  • Riallocazione automatica degli indirizzi IP riutilizzabili
  • Opzioni aggiuntive e più ricche

DHCP fornisce tutti i parametri di configurazione di cui alla RFC 1122 (Requirements for Internet Hosts), BOOTP invece solo una parte, Vendor extensions di BOOTP divengono "Options" di DHCP e passano da 64 a 32 bit

Il DHCP può accettare richieste da client BOOTP in quanto usa lo stesso "message format" del BOOTP.

 

Colloquio CLIENT-SERVER DHCP (Processo di configurazione)

Il funzionamento del protocollo DHCP, si articola in 4 fasi, ed è bene precisare che il Server DHCP assegna un IP address per lease time che può essere:

  • DIANMICO (è il funzionamento normale)
  • PERMANENTE
  • FIXED (in base a preregistrazione)

Il funzionamento del lease time viene scelto in base alla "policy" scelta dal DHCP; ma veniamo alle fasi di funzionamento del DHCP

  1. RICHIESTA di IP: al boot un host, configurato come CLIENT DHCP invia in broadcast un messaggio DHCPDISCOVER, contenente come SA '0.0.0.0' poiché ancora non possiede un indirizzo IP, e come DA '255.255.255.255' (rappresenta un messaggio inviato in broadcast) poiché non conosce l'indirizzo IP del Server DHCP. Inoltre il messaggio conterrà anche il MAC address della scheda di rete ed il nome del computer (netBios), in maniera tale che possa essere identificato in maniera univoca dal Server DHCP.
  2. OFFERTA di IP: I server DHCP, mandano un messaggio DHCPOFFER contenente l'indirizzo IP. Il client utilizzerà il primo IP che riceverà, e nel caso ci siano più server DHCP sulla rete, gli altri verranno ignorati.
  3. SELEZIONE di IP: Il client risponde mandando un messaggio DHCPREQUEST in broadcast, informando in questo modo tutti i server DHCP della rete che ha accettato un IP. Il messaggio include fra l'altro l'indirizzo del server DHCP dal quale è stato accettato l'IP; tutti gli altri server DHCP a questo punto ritirano la loro offerta di IP.
  4. CONFERMA di IP e VALORE di LEASE: Il server DHCP dal quale è stato accettato l'IP manda allora un messaggio di conferma DHCPACK al client, contenente il valore di lease-time per l'IP. Quando il client riceve il messaggio di ACK completa la configurazione del TCP/IP, una volta ricevuti i parametri.

colloquio tra client e server DHCP per il processo di configurazione

Richiesta di Rinnovo dell'IP col DHCP

Il client DHCP tenta di rinnovare il proprio IP ancor prima che il suo lease-time sia scaduto. Ricordiamo che il server DHCP trasmette in DHCPOFFER il lease-time; il client DHCP riceve il DHCPOFFER ed il DHCPACK ed in base al valore del lease-time stabilisce il tempo che dovrà trascorrere prima del rinnovo del suo IP, che può essere calcolato in due modi a seconda delle condizioni che si verificano:

  • Renewal time T1 = 0.5 * lease-time -> allo scadere di T1 il client trasmette al server DHCP in unicast un DHCPREQUEST con la richiesta di estendere il lease. Se a seguito di questa richiesta riceve un ACK, i timer vengono resettati e si calcola il nuovo lease expiration time, mantenendo in sostanza lo stesso indirizzo IP precedentemente assegnatogli.
  • Rebinding time T2 = 0.875 * lease-time -> se il client non riceve un DHCPACK di cui al punto sopra, allora allo scadere di T2 trasmette in broadcast un DHCPREQUEST con la richiesta di estendere il lease. Se riceve un ACK (anche da un server DHCP differente) i timer vengono resettati e si calcola il nuovo lease expiration time, in questo caso spesso l'IP del client cambia rispetto al vecchio assegnatogli.

NOTA: T1 e T2 sono configurabili dal Server tramite le Options ed in ogni modo si avrà sempre: T1 < T2 < lease-time

Scadenza dell'IP

Allo scadere dell'IP, il client rilascia l'indirizzo IP (che diventa riutilizzabile), ed esegue nuovamente una richiesta in broadcast per un altro indirizzo IP, e fino a quando la configurazione non sarà completata nuovamente non sarà possibile utilizzare l'interfaccia di rete del client.