BOOTP: tutte le informazioni sul precursore del DHCP
Per poter comunicare tra loro in una rete, come Internet, i sistemi partecipanti richiedono un indirizzo IP. Anche se questo si può effettuare manualmente, in pratica alla maggior parte dei dispositivi vengono assegnati gli indirizzi in modo automatico. Alla base di questo processo c’è il protocollo di comunicazione DHCP, che supporta i sistemi che ricercano una connessione al fine di ottenere le informazioni necessarie. Agli albori di computer, rete, ecc., il protocollo Bootstrap, noto anche come BOOTP, svolgeva ancora la funzione di gestore degli indirizzi.
Cos’è BOOTP (il protocollo Bootstrap)?
Nel settembre del 1985, lo Stanford University Network Group ha pubblicato la specifica RFC 951, la prima versione del protocollo Bootstrap (BOOTP). Questo protocollo di comunicazione, sviluppato in collaborazione con un team del produttore di computer Sun Microsystems, ha permesso ai terminali e alle workstation senza disco rigido dell’epoca di utilizzare, oltre all’indirizzo IP, anche informazioni quali l’indirizzo del gateway, l’indirizzo del boot server e la cartella in cui è contenuto il file di avvio (necessaria per caricare il sistema operativo). Questo protocollo ha sostituito il Reverse Address Resolution Protocol (RRP) utilizzato fino ad allora, che forniva esclusivamente indirizzi di rete e poteva essere utilizzato solo nelle sottoreti.
Il protocollo Bootstrap fa parte della famiglia dei protocolli Internet e funziona, come molti altri protocolli dello stack, secondo il modello client-server. Lo scambio di messaggi nella trasmissione di informazioni di rete avviene, dunque, tra un BOOTP client e un BOOTP server. Come protocollo per il trasporto dei pacchetti di dati richiesti viene utilizzato lo User Datagram Protocol (UDP) (porte 67 e 68). In confronto al TCP non solo risulta meno complesso, ma rispetto al protocollo standard supporta anche il broadcasting. Siccome durante la connessione il client non conosce né il proprio indirizzo né quello del BOOTP server, questo sistema di scambio dei messaggi, utilizzato da tutti coloro che condividono la rete, è l’unica soluzione per l’identificazione automatica degli indirizzi.
Come scambiare informazioni in rete con BOOTP
La mappatura degli indirizzi tramite BOOTP si basa su un semplice scambio di messaggi in due fasi tra client e server, in cui la parte client è l’iniziatore. Poiché il client all’inizio non conosce né il proprio indirizzo né l’indirizzo del BOOTP server, esso invia una richiesta generale (“BOOTREQUEST”) all’indirizzo broadcast 255.255.255.255. Il server in ascolto sulla porta 67 riceve ed elabora la richiesta. Il compito principale è quello di assegnare all’indirizzo MAC di sistema del client il corrispondente indirizzo IP. In seguito, la risposta (“BOOTREPLY”), comprese ulteriori informazioni di rete, viene quindi inviata tramite broadcast al client, che può così configurare il sistema operativo in rete.
Se il client conosce già l’indirizzo del BOOTP server, può anche inviare la richiesta direttamente tramite connessione unicast.
Questa è la struttura dei messaggi che client e server inviano nella comunicazione tramite il protocollo Bootstrap:
Ogni messaggio BOOTP inizia con il campo “op” di 8 bit, che definisce il tipo di operazione o di messaggio. Per le richieste del client viene impostato il valore 1 (per BOOTREQUEST), mentre le risposte del server hanno il valore 2 (per BOOTREPLY). Seguono rispettivamente 8 bit che identificano il tipo (“htype”) e la lunghezza dell’indirizzo hardware (“hlen”). Il campo “hops”, sempre di 8 bit, indica il numero delle stazioni intermedie, attraverso le quali passa il pacchetto durante il suo percorso verso il destinatario. Nelle richieste del client il valore è sempre 0.
Il blocco successivo contiene una transazione ID casuale di 32 bit, generata dal client, che viene successivamente utilizzata nella risposta del server in modo che il client possa associarla in modo univoco. Il client compila, inoltre, il campo “secs” (16 bit), che indica i secondi trascorsi dal tentativo di avvio da parte del client. Le informazioni introduttive sono completate da un altro campo di 16 bit, che rimane completamente vuoto. Le altre voci del pacchetto BOOTP contengono informazioni di rete, che vengono illustrate nell’elenco seguente:
- Indirizzo IP del client (ciaddr): l’etichetta “ciaddr” (client ip address) individua il campo di 32 bit in cui il client inserisce il proprio indirizzo IP, se lo conosce già. In caso contrario, al campo viene assegnato il valore 0.
- Indirizzo IP del client (yiaddr): il campo “yiaddr” (your ip address) è sempre riservato all’indirizzo IP del client. A differenza della sezione precedente del pacchetto, questo campo di 32 bit viene compilato dal server se il client non conosce il suo indirizzo IP nel momento in cui viene creata la richiesta di rete.
- Indirizzo IP del server (siaddr): nella sequenza di 32 bit “siaddr” (server ip address) il BOOTP server comunica al client il proprio indirizzo IP.
- Indirizzo IP del gateway (giaddr): se un gateway (ad esempio un router) è incluso nel processo di comunicazione, il suo indirizzo viene inserito nel campo “giaddr” (gateway ip address).
- Indirizzo hardware del client (chaddr): l’indirizzo hardware (128 bit) è uno dei valori obbligatori del client quando si utilizza il protocollo Bootstrap per lo scambio di messaggi. Senza questo ID, detto anche indirizzo del dispositivo o MAC, il server non può assegnare al client l’indirizzo corretto, né i parametri di rete appropriati.
- Nome host del server (sname): facoltativamente il server può anche specificare il proprio nome host nella risposta BOOTP. A tale scopo è disponibile un campo fino a 512 bit, nel quale è possibile inserire una stringa di caratteri con delimitatore zero (un carattere zero segna la fine della stringa).
- Nome del file di avvio (file): la specificazione di un file di avvio concreto, di cui il client ha bisogno per avviare il sistema operativo sul rispettivo terminale o sulla rispettiva workstation, è ugualmente opzionale. Anche questo campo prevede una stringa con delimitatore zero, che in questo caso restituisce il percorso completo del file. La sequenza di caratteri può essere lunga fino a 1024 bit. Nella richiesta del client questo campo contiene il valore 0 o un nome generico.
- Informazioni specifiche del produttore (vend): nella parte finale del messaggio del protocollo BOOTP si possono trovare informazioni specifiche del produttore che non sono previste dal protocollo, come le specifiche e i numeri di serie hardware. Inoltre, quest’area informativa di 512 bit può essere riservata a un processo di bootstrap esterno o del kernel.
I messaggi BOOTP possono avere una lunghezza complessiva fino a 2400 bit (300 byte). Il pacchetto completo UDP/IP, con la richiesta o la risposta del protocollo Bootstrap, presenta la seguente struttura:
BOOTP vs DHCP: perché il protocollo Bootstrap non è più utilizzato oggi
Per i terminali client e le workstation senza disco rigido, BOOTP era la soluzione perfetta per ricevere un indirizzo IP privato sulla rete desiderata e configurare in questo modo il sistema operativo. Poiché l’identificazione dell’indirizzo tramite il protocollo di comunicazione poteva essere effettuato durante il processo di booting, per i computer fissi, che erano utilizzati in reti con dimensioni più gestibili, risultava pratico e semplice. Ad esempio, non era un problema che l’amministratore dovesse configurare manualmente le tabelle informative di rete del server BOOTP.
Tuttavia, con la crescita delle reti e la diffusione di computer sempre più autonomi e mobili, grazie allo sviluppo di dispositivi portatili, l’impossibilità di automatizzare il processo di configurazione diventava uno svantaggio e cominciò perciò a nascere l’esigenza di un nuovo protocollo. Tale successore è stato individuato nel Dynamic Host Configuration Protocol (DHCP) nel 1993 (specifiche definitive nel RFC 2131). Anche se il DHCP si basa in gran parte sulla struttura del protocollo bootstrap, implementa diverse opzioni di configurazione aggiuntive e fornisce la possibilità di assegnare indirizzi di rete riutilizzabili ai client che ricercano una connessione. Inoltre, l’assegnazione delle informazioni dell’indirizzo con DHCP funziona anche durante l’esecuzione del sistema, senza che sia necessario un riavvio come avviene con BOOTP.
BOOTP vs DHCP: le differenze più importanti
BOOTP | DHCP | |
Autoconfigurazione | L’assegnazione degli indirizzi IP richiede la configurazione manuale delle tabelle degli indirizzi | Supporta l’assegnazione automatica e l’identificazione automatica degli indirizzi IP (ma anche la configurazione manuale) |
Indirizzi IP temporanei | Non possibile | Possibile per un periodo di tempo limitato |
Supporto di dispositivi mobili | La configurazione IP e l’accesso alle informazioni di rete non sono possibili | Supporta la mobilità dei client di rete |
Possibilità di errori | Elevata a causa della configurazione manuale | Quasi privo di errori grazie alla configurazione automatica dei componenti di rete |
Requisiti di sistema | Nessuno | Richiede un disco rigido per l’archiviazione e l’inoltro delle informazioni |
Grazie alle varie ottimizzazioni, il DHCP è diventato rapidamente il protocollo standard per la gestione degli IP nelle reti, mentre il protocollo BOOTP ha soltanto valore storico. Tuttavia, poiché DHCP supporta il protocollo Bootstrap, i server DHCP possono in linea di principio anche rispondere a qualsiasi richiesta fatta da un client BOOTP.