Come tutti ben sanno Internet è una grande rete di calcolatori collegati tra loro nei modi più vari che esistono nell'ambito delle LAN e delle WAN. Il protocollo impegnato da Internet è il TCP/IP, che a sua volta si appoggia al livello fisico della rete sottostante, convertendo l'indirizzo fisico univoco della macchina in un indirizzo IP, della forma XXX.YYY.ZZZ.KKK a 32 bit. In questo modo, ogni computer collegato ad Internet possiede un indirizzo IP, indipendente dalla rete a cui è allacciato. Il problema nasce quando all'interno di una rete bisogna ricordare a memoria ogni singolo indirizzo IP appartenente ai PC a cui ci si vuole collegare. La situazione diventa ancora più ingestibile se ci si affaccia in Internet dove i Computer in rete sono migliaia e tutti con il proprio indirizzo IP. LA soluzione a tutto ciò si ottiene creando un nuovo livello di indirizzamento che converta un indirizzo alfanumerico come il classico URL che si inserisce nel proprio browser per la navigazione, in un indirizzo IP.
www.Nome1.it --- 212.100.100.6
Incaricato di effettuare questa conversione è
il DNS (Domain Name System o Domain Name Server). Se ad esempio si inserisce nel proprio
browser l'URL www.Nome1.it, esso contatterà via rete il DNS per ricevere la conversione
del nome in un indirizzo IP. Il DNS risponderà inviando al Browser l'indirizzo IP
212.100.100.6. A questo punto il Browser potrà contattare la macchina Nome1 e stabilire
la connessione.
Inizialmente il servizio conversione Nome > Indirizzo era affidato a macchie apposite,
ognuna delle quali contenente una copia completa del database dei nomi. La situazione
cominciò a diventare ingestibile non appena Internet iniziò ad allargarsi. I problema
era mantenere aggiornate tutte le copie del database e le grandi dimensioni che
quest'ultimo andava a raggiungere. Una soluzione a questo inconveniente, fu quella di
dividere i compiti della conversione tra le varie macchine, in modo tale che ogni macchina
gestisse un "sotto albero" dei nomi.
La situazione teorica finale è stata quindi quella di gestire lo spazio dei nomi come un
immenso albero. Ogni nodo dell'albero (tranne le foglie) costituisce un dominio, e deve
garantire la conversione dei nomi a se sottostanti. Analizziamo un piccolo esempio
pratico: supponiamo che un PC (PC1a.dna.prino.it) richieda la conversione in
indirizzo IP del nome del computer PC1b.dnb.primo.it. Esso manderà la richiesta al
DNS del nodo dna, che a sua volta la passerà al DNS del nodo primo. Quest'ultimo
passerà la richiesta al server DNS del nodo dnb, che restituirà l'indirizzo IP della
macchina PC2 in esso registrata. Tutto questo avviene soltanto in teoria, in pratica la
situazione è differente.
Praticamente un server DNS può occuparsi tranquillamente di più domini, raggruppando dentro di se più livelli del teorico albero di nomi. inoltre non è detto che il server DNS di una o più reti sottostanti sia fisicamente collegato alla rete stessa. Tutto ciò è possibile perchè il DNS nonè nient' altro che un database in rete, e come tale può trovarsi collegato alla rete a cui fa riferimento in tutt'altra parte del mondo, dando per scontato di conoscere l'indirizzo IP del server DNS altrimenti sarebbe tutto inutile. Essendo il DNS un database, è possibile anche effettuare la conversione inversa, da indirizzo IP a nome o nomi dell'host corrispondente, fornendo anche informazioni sul tipo di macchina, di sistema operativo, ecc.
Il principio di conversione del DNS si basa su tre elementi chiave:
Il Local Resolver
Il Server di Nomi
I Resource Records
Il Local Resolver è un piccolo programmino spesso richiamato da una API del sistema operativo. Questa API, può essere inserita da un programmatore all'interno del codice del proprio programma, e consente di interrogare il Server DNS e ricevere indietro le informazioni richieste.
Il Server di Nomi è un particolare programma che gira su una macchina della rete e che si mette in ascolto sulla porta 53 ed aspetta eventuali connessioni TCP/IP o pacchetti UDP. Una volta ricevuti i dati, elabora le richieste e rinvia al mittente la risposta. Il Server dei nomi può a sua volta dialogare con altro Server di nomi collegati su altre reti, diventando a sua volta un Local Resolver. Quest'ultima situazione si presenta nel caso in cui il Server dei nomi non possiede le informazioni richieste. Il server può anche memorizzare le risposte (che in realtà sono Resource Record) in una cache, e restituirle in materia non autoritaria, ovvero marcandole come non di sua competenza, ma ugualmente attendibili.
Un Resource Records (RR) è l'entità base che un Sarver di Nomi scambia con Local Resolver. ed è composto da diversi campi che specificano il tipo di informazione contenuta, il tipo di rete, ed altri tipi di informazioni generali. I Resource Records più importanti sono quelli che, dato un nome di un host, restituiscono l'indirizzo IP. I RR sono utilizzati sia dal server per memorizzare i dati del dominio e per trasmetterli ai Local Resorver, sia dallo stesso Local Resolver, che li usa per inviare le richieste al Server.
Il formato dei messaggi nel sistema DNS è abbastanza semplice. Innanzitutto è importante specificare che i nomi di dominio (dna.primo.it) vengono codificati label per label (dna, primo, it). Per ogni label viene specificata la lunghezza (1 byte) seguita dai caratteri stessi. Nella rappresentazione grafica dei messaggi, i campi dei nomi di dominio sono sempre rappresentati con dei trattini, a significare che la lunghezza di tali campi è variabile. Nello stesso messaggio scambiato dal Local Resolver al Server è presente anche una sezione di domanda ed una sezione di risposta. Questo significa che il Server prende il messaggio ricevuto, analizza la sezione di domanda, e riempie la sezione di risposta, modificando però anche l'header del messaggio stesso.
Nelle situazioni normali, il server riempie solo la sezione di risposta, e marca il bit autoritario dell'header del messaggio. Può però capitare che il server possieda nella sua cache un RR proveniente da un altro server. Allora il primo può rispondere in maniera non autoritaria, indicando nella sezione di autorità il giusto Name Server a cui rivolgere la domanda per ottenere una risposta autoritaria.
Di seguito è riportato lo schema del messaggio inviato ad un Server DNS.
Il formato del messaggio è composto da un
header e quattro sezioni di Domanda, Risposta, Autorità e Addizionale. Tutte contengono
un certo numero di RR codificati in forma standard, tranne la prima sezione, che contiene
dei RR particolari, leggermente diversi.
L' Header contiene alcune informazioni di stato, come un codice di operazione, bit di
Autorità, di Ricorsione, ecc. Contiene anche il numero di RR contenuti nelle 4 rimanenti
sezioni del messaggio.
Un RR di domanda contiene solo un nome di dominio, il tipo di richiesta e la casella della
richiesta. Quando si inserisce un nome nel proprio browser, questo manderà alcune
richieste al server DNS con QName Pippo per esempio. Le richieste avranno tutte Qtype =A
(richiesta di indirizzo IP) e QClass = IN (Internet). Ovviamente i valori A e IN sono
codificati nelle rfc.
Precedente Home