Chi naviga sul Web è abituato a raggiungere un sito digitando il nome a dominio nella barra indirizzi del browser. Come è noto i nomi a dominio sono correlati con indirizzi numerici, gli indirizzi IP, che consentono di individuare uno specifico elaboratore nella Rete. Esiste quindi un meccanismo di "risoluzione" che permette di tradurre il nome a dominio nel corrispondente indirizzo numerico, consentendo così all'utente di utilizzare nomi "parlanti" al posto degli indirizzi IP, difficili da ricordare.
Il DNS (Domain Name System) è il sistema oggi utilizzato dalla rete mondiale Internet per catalogare i nomi a dominio e risolverli nei corrispondenti indirizzi numerici.
Breve storia del DNS
La rete Arpanet (considerata il predecessore della rete Internet) fu creata nel 1969 all'interno del progetto americano DARPA e, originariamente, non possedeva un sistema centralizzato di risoluzione dei nomi: ogni nodo conteneva una mappa degli altri nodi della rete memorizzata all'interno di un file di testo denominato hosts. Questo sistema non garantiva l'univocità dei nomi. Inoltre, al crescere della dimensione della rete, l'attività di aggiornamento dei file hosts su ogni nodo divenne via via sempre più onerosa.
A partire dal 1973 fu sviluppato un sistema centralizzato per il mantenimento dei nomi a dominio, che attribuì allo Stanford Research Institute Network Information Center (SRI-NIC) il compito di mantenere tutte le corrispondenze in un unico file denominato "hosts". Tutti i computer della rete periodicamente accedevano a questo file per ottenerne una copia aggiornata.
All'inizio degli anni '80 l'unico sistema accentrato non era più in grado di gestire in modo efficiente le informazioni per tutti i computer collegati alla rete, la cui dimensione cresceva in modo esponenziale. Fu sviluppato pertanto un sistema distribuito per il mantenimento delle informazioni dei nomi a dominio. Il nuovo sistema, denominato DNS, è costituito da numerosi server organizzati secondo una struttura gerarchica ad albero, che ricalca la struttura a "namespaces" dei nomi a dominio.
Il file hosts ed ferri del mestiere: ipconfig e nslookup
Istruzioni come ipconfig
e nslookup
, che possiamo lanciare da linea di comando (su sistemi Windows naturalmente), consentono di interagire con il sistema di risoluzione dei nomi. Possiamo utilizzarli per illustrare il funzionamento del file hosts.
Prima di procedere, è necessario definire il concetto di "record" in ambito DNS: per record
si intende un abbinamento singolo tra un nome a dominio ed il corrispondente indirizzi IP.
L'uso del file hosts non è scomparso del tutto. Esso trova applicazione ancora nelle reti di piccole dimensioni, dove la gestione un singolo file per mantenere le corrispondenze risulta spesso molto più pratico che installare un server DNS interno. Nei sistemi Windows il file hosts si trova nella cartella:
%systemroot%System32driversetc
La modalità con cui un sistema operativo risolve un nome a dominio dipende dalla configurazione; tuttavia per la maggior parte dei sistemi operativi, l'ordine di risoluzione è il seguente:
- file hosts: ricerca di una corrispondenza all'interno del file locale hosts
- server DNS: interrogazione del/dei server DNS configurato/i nel computer locale
- Netbios (solo per i sistemi Windows): utilizzato in caso di fallimento dei due sistemi precedenti
Proviamo a verificare che l'ordine di risoluzione dei nomi a dominio cominci effettivamente dall'analisi delle corrispondenze contenute nel file hosts. Iniziamo puntando il browser su www.google.com.
Alla richiesta del browser, il sistema operativo utilizza il DNS per recuperare l'indirizzo IP dell'host www.google.com
. Una volta risolto il nome, il corrispondente indirizzo IP sarà memorizzato nella cache DNS locale, per essere riutilizzato in eventuali richieste successive. Per visualizzare il contenuto della cache locale del DNS, si apra una finestra DOS (con il comando cmd
) e si utilizzi il programma ipconfig
con l'opzione /displaydns
:
Visualizzare la cache DNS
c:ipconfig /displaydns
Verrà visualizzata la lista dei record presenti nella cache: dapprima i record relativi alla risoluzione inversa (cioè dall'indirizzo IP al nome a dominio) caratterizzati dalla desinenza in-addr.arpa.
, poi quelli relativi alla risoluzione diretta (cioè dal nome a dominio all'indirizzo IP). Tra questi ultimi, troviamo il record corrispondente all'host www.google.com
che abbiamo raggiunto con il browser.
www.google.com ---------------------------------------- Nome record . . . . . : www.google.com Tipo record . . . . . : 1 Durata (TTL). . . . . : 123 Lunghezza dati. . . . : 4 Sezione . . . . . . . : Risposta Record A (Host) . . . : 64.233.169.99
Si osserva che l'indirizzo IP ricercato, corrispondente a www.google.com
, è 64.233.169.99
.
Aprendo con un editor di testo il file hosts
, notiamo che tutti i record in esso contenuti sono presenti nella cache del DNS. Infatti il file hosts
è la prima fonte che viene interrogata nel processo di risoluzione dei nomi.
Procediamo poi all'azzeramento del contenuto della cache, utilizzando il comando ipconfig
con l'opzione /flushdns
.
Svuotare la cache DNS
c:ipconfig /flushdns
Ora modifichiamo il file hosts
creando una corrispondenza diversa per l'indirizzo IP 64.233.169.99
appena trovato. Aggiugiamo un nuovo record nel file host aggiungendo la riga:
64.233.169.99 www.yahoo.com
che ha l'effetto di associare al nome a dominio www.yahoo.com
l'indirizzo IP dell'host www.google.com
.
Salvate le modifiche, digitiamo nella barra degli indirizzi del browser il nome www.yahoo.com
. Il browser dovrebbe collegarsi ancora al sito www.google.com
, a dimostrazione del fatto che, se è possibile risolvere un nome mediante le informazioni presenti nel file hosts, i server DNS non vengono interrogati.
La risposta sarebbe stata diversa qualora l'informazione contenuta nel file hosts fosse stata ignorata ed il sistema avesse proceduto ad interrogare un server DNS. Per simulare tale richiesta, usiamo questa volta il programma nslookup
seguito dal nome da risolvere:
Risolvere gli indirizzi interrogando direttamente il DNS con nslookup
c:nslookup www.yahoo.com
La risposta che si ottiene è:
Address: 87.248.113.14 Aliases: www.yahoo.com
In questo caso 87.248.113.14
è il vero indirizzo IP corrispondente a www.yahoo.com
.
Prima di passare alla lettura del prossimo paragrafo, eliminiamo la riga aggiunta al file hosts e svuotiamo la cache del DNS con il comando ipconfig /flushdns
.
I server DNS
Nel paragrafo precedente è stato utilizzato nslookup
per interrogare il server DNS allo scopo di risolvere il nome www.yahoo.com
. Nella configurazione TCP/IP di un sistema Windows generalmente sono indicati 2 server DNS: il server DNS preferito ed il server DNS alternativo.
Il numero di server DNS configurabili non è limitato a due: accedendo alle impostazioni avanzate
è possibile aggiungerne altri.
Quando il browser richiede la risoluzione di un nome ed il sistema operativo non trova un'associazione nella cache DNS locale, né nel file hosts, effettua una chiamata ai server DNS.
Impostare almeno due server DNS consente la continuità del servizio qualora il primo non sia in grado, per motivi tecnici, di soddisfare la richiesta di risoluzione inviata dal client.
Nelle reti aziendali, qualora presente un dominio Active Directory, spesso si configura il primo server DNS con l'IP del server DNS interno all'azienda (per la risoluzione dei nomi locali alla LAN ed indispensabile al corretto funzionamento dell'Active Directory). Il secondo è spesso configurato con l'IP di un server DNS pubblico, così da garantire l'accesso al Web, qualora il server DNS aziendale non effettui la ricorsione (procedura descritta nel seguito).
Anche il comando ipconfig
ci consente di visualizzare la configurazione dei server DNS (mediante l'opzione /all
).
Esaminare la configurazione del DNS tramite ipconfig
c:ipconfig /all
la sezione DNS si presenta in questo modo:
Server DNS . . . . . . . . : 192.168.1.1 192.168.1.2
A livello mondiale, il namespace dei nomi a dominio è organizzato secondo una struttura gerarchica ad albero. I "root servers" (server radice) hanno il compito di risolvere i domini di primo livello (per esempio "it", "com", "org", "net", etc.).
Quando un client effettua una richiesta di risoluzione di un nome al server DNS, il server dapprima verifica se la corrispondenza richiesta è presente nella sua cache; in caso affermativo invia in risposta questa informazione. Qualora invece non ci fossero corrispondenze nella cache, normalmente il server DNS effettuano un'operazione denominata ricorsione.
Si supponga di effettuare la risoluzione del nome www.google.com
. La richiesta viene inoltrata ad uno dei root server del dominio di primo livello (.com
) per conoscere il server che lo gestisce; quest'ultimo viene interrogato per il dominio di secondo livello (google.com
), e così via fino a raggiungere il server autoritativo per il nome desiderato www.google.com
. Un server DNS è detto autoritativo quando ha la responsabilità della gestione e dell'aggiornamento dell'informazione.
Per concludere accenniamo al fatto che il protocollo DSN non implementa solo la risoluzione dei nomi (e la risoluzione inversa), ma anche altri servizi. Per esempio esso fornisce informazioni relative a:
- quali server di posta sono competenti per un dato dominio
- quali sono i server DNS autoritativi per un certo dominio