Il DNS è essenzialmente un database distribuito per la risoluzione dei nomi dei sistemi collegati in rete. Il database è formato dalle informazioni presenti su vari server che concorrono a formare il DNS, detti appunto server DNS o name server. Il database che si viene a delineare è di tipo gerarchico, ovvero è un albero (DNS tree), in cui ogni nodo è costituito da un server DNS. La posizione di un server DNS all’interno dell’albero deriva dalla sua importanza (zona di competenza, v. sez. 19.1.1.1) nel DNS.
Ad ogni interfaccia di rete di ogni sistema (name server o meno) viene quindi associato un nome con una lunghezza massima di 63 caratteri. Il nome può contenere lettere alfabetiche, numeri ed il simbolo “-” e deve necessariamente iniziare con una lettera.
L’interfaccia del name server che rappresenta la radice (root) dell’albero del DNS è identificata dal nome “.”. Per ogni sistema, si definisce il nome di dominio che è rappresentato dall’elenco dei nomi dei nodi attraversati, partendo dal sistema considerato fino ad arrivare al name server alla radice dell’albero del DNS separati dal carattere “.” (analogamente a quanto avviene per i file con il carattere di separazione “/”, ma i nomi sono considerati nell’ordine opposto). Il nome di dominio così risultante identifica univocamente un sistema. Ad esempio, considerando la fig. 19.1, il nome di dominio del sistema col nome pippo che sta sotto il sistema col nome mydomain che sta sotto il sistema col nome local, al di sotto del sistema . è
pippo.mydomain.local.
Analogamente a quanto avviene per il filesystem, si può parlare di nomi assoluti
(completi), se il carattere terminale del nome è “.”, o relativi (incompleti). I nomi di dominio
assoluti sono anche detti FQDN (Fully Qualified Domain Name). I nomi relativi vengono
completati dal meccanismo di risoluzione dei nomi, il resolver, secondo un’opportuna logica:
in genere i nomi relativi non contenenti nessun “.” vengono completati aggiungendo a destra
un suffisso locale (ad esempio .mydomain.local.), mentre gli altri vengono completati
semplicemente aggiungendo sulla destra un “.” (per questo motivo nella pratica il “.” finale
viene omesso).
I domini che stanno gerarchicamente sotto ad altri domini, sono detti sotto-domini e sono contenuti nel dominio da cui derivano. L’albero del DNS può essere suddiviso in livelli dipendentemente dalla profonità considerata a partire dalla radice. Esistono così il domininio di livello zero (quello a cui appartiene “.”), i domini di primo livello (o TLD - Top Level Domain), quelli di secondo, e così via. I domini di primo livello di Internet sono gestiti dallo IANA e si dividono in
Per ogni interfaccia è possibile associare più nomi. Il primo costituisce il nome canonico (o nome primario) dell’interfaccia, mentre gli altri sono detti alias.
Il name server più utilizzato sui sistemi Unix-like è named che è contenuto nel pacchetto BIND (Berkeley Internet Name Domain). Nel seguito sarà fatto riferimento a tale name server.
La caratteristica fondamentale del DNS è il fatto che ogni name server ha una propria zona di competenza o di autorità (zone of authority), per la quale il name server è detto authoritative name server. Un name server conosce soltanto i nomi delle interfacce che appartengono in maniera diretta alla sua zona di competenza. La gestione delle altre interfacce viene delegata ai name server che hanno la competenza su altre zone. Una zona è una parte dell’albero del DNS (un sotto-albero) che viene amministrata in maniera autonoma. Ad esempio un dominio di secondo livello può costituire (ed in genere è così) una zona. Una zona può essere ulteriormente suddivisa in altre zone (o sotto-zone), per poter meglio amministrare l’intera zona (ogni sotto-zona verrà amministrata in maniera autonoma).
Per ogni zona sarà presente un authoritative name server primario. Possono anche esservi uno o più authoritative name server secondari in maniera tale da rendere più affidabile il servizio di ricerca nel DNS: nel caso in cui un name server interrompa la propria operatività (ad esempio in seguito ad un guasto), ci sarà un altro name server che assicura la continuità del servizio. La differenza tra un name server primario ed uno secondario è che quello primario legge le informazioni relative alle zone da file detti zone file o master file, mentre quello secondario le acquisisce via rete dal primario, per mezzo dell’operazione denominata zone transfer.
Le informazioni relative ai domini sono memorizzate sui name server sottoforma di elementi di tabelle ed ognuna di esse costituisce un Resource Record, o RR. Ogni RR è formato dai campi riportati in fig. 19.2 ed illustrati di seguito.
![]()
|
![]()
|
L’interrogazione dei name server e le relative risposte, seguono uno specifico protocollo. Ogni messaggio di richiesta (query) o di risposta (response) si compone della sezioni illustrate in fig. 19.3 e descritte di seguito
Header L’header del messaggio ha il formato riportato in fig. 19.4 e descritto di seguito.
![]()
|
![]()
|
Question Contiene la richiesta da inoltrare al name server, ovvero una serie di QdCount (in genere 1) elementi con il formato riportato in fig. ?? ed illustrato di seguito.
![]()
|
![]()
|
Answer, Authority o Additional Le sezioni Answer, Authority e Additional hanno tutte la stessa struttura: esse contengono il numero di RR (per la struttura v. sez. 19.1.1.2) secondo quanto indicato rispettivamente da AnCount, NSCount e ARCount.
Per ridurre la lunghezza del messaggio, il protocollo del DNS prevede di comprimere i nomi dei domini nei messaggi, secondo quanto di seguito descritto.
I nomi di dominio sono rappresentati da sequenze dei seguenti gruppi di campi
Per ridurre la dimensione dei nomi di domini trasmessi, Label può essere, anziché una parte del nome di dominio, un riferimento ad essa, cioè un valore di 16 bit, di cui i due bit più significativi due devono essere impostati a 1 ed i rimanenti bit indicano il byte da considerare dall’inizio del messaggio (ovvero il suo offset);
Generalmente i resolver forniti con i sistemi operativi sono degli stub resolver, ovvero non sono in grado di risolvere un nome di dominio in maniera autonoma contattando direttamente il server della zona di competenza, ma essi contattano un name server, il quale effettua la risoluzione al loro posto. Per motivi di efficienza, un name server memorizza (in una memoria cache) le richieste che riceve ed i risultati ottenuti con le relative operazioni di risoluzione dei nomi. Per questo motivo, un name server è detto anche chaching name server.
Il master file è un file in formato testo che contiene i RR della zona del DNS considerata. I RR sono inseriti essenzialmente per righe (le parentesi possono essere utilizzate per inserire un RR su più righe) ed i campi sono separati da spazi o TAB. Inoltre sono definite le seguenti direttive
OwnerName [TTL] [Class] Type RData
Se un RR non contiene un valore per il campo OwnerName, questo viene desunto dal RR
precedente che lo ha specificato. I campi Type e Class sono espressi mediante gli mnemonici
standard elencati in tab. 19.3 e 19.4. I campi TTL e Class possono anche essere
espressi in ordine invertito (se non specificati vengono considerati gli ultimi valori
specificati in tali campi). I nomi di dominio sono espressi come stringhe di caratteri
intervallate da ‘.’. Inoltre alcune sequenze di caratteri assumono un particolare significato
(v. tab. 19.9).
![]()
|
a[A[b[B[...]]]]
dove
![]()
|
Inoltre esistono delle regole per la validazione del contenuto di un master file. Le principali sono le seguenti
Di seguito è riportato un esempio di master file. Segue una descrizione dello stesso.
;
; Zone file for linux.bogus
;
; The full zone file
;
$TTL 3D
@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. (
200402151 ; serial, todays date + todays serial #
8H ; refresh
2H ; retry
4W ; expire
1D ) ; minimum
;
TXT "Linux.Bogus, your DNS consultants"
NS ns ; Inet Address of name server
NS ns.friend.bogus.
MX 10 mail ; Primary Mail Exchanger
MX 20 mail.friend.bogus. ; Secondary Mail Exchanger
localhost A 127.0.0.1 ; localhost IP address
gw A 192.168.196.1 ; gw IP address
TXT "The router"
ns A 192.168.196.2 ; ns IP address
MX 10 mail ; ns mail server
MX 20 mail.friend.bogus. ; ns secondary mail server
www CNAME ns ; alias www for ns
donald A 192.168.196.3 ; donald IP address
MX 10 mail ; donald mail server
MX 20 mail.friend.bogus. ; donald secondary mail server
TXT "DEK"
mail A 192.168.196.4 ; mail IP address
MX 10 mail ; mail mail server
MX 20 mail.friend.bogus. ; mail secondary mail server
ftp A 192.168.196.5 ; ftp IP address
MX 10 mail ; ftp mail server
MX 20 mail.friend.bogus. ; ftp secondary mail server
Le 6 righe successive (SOA) definiscono la zona di competenza del dominio in questione (@) con il nome ns.linux.bogus., il cui responsabile ha l’indirizzo di posta elettronica hostmaster@linux.bogus.. Tale RR è di classe Internet, ha versione 200402151 e chi lo riceve può richiederne un aggiornamento dopo che sono trascorse 8 ore dal ricevimento dello stesso, riprovando ad intervalli di 2 ore nel caso in cui la richiesta non andasse a buon fine, e comunque tale RR dovrebbe essere scartato dopo 4 settimane che non si riesce ad aggiornarlo. Inoltre i RR della zona considerata hanno un TTL minimo di 1 giorno.
I successivi RR (NS) definiscono il nome di dominio degli authoritative name server per la zona considerata (ns e ns.friend.bogus.).
I sucessivi RR (MX) definiscono il valore di precedenza ed il nome di dominio dei server di posta elettronica della zona considerata (mail, server preferenziale, e mail.friend.bogus., server secondario).
Quando un client tenta di contattare un server con il suo nome di dominio, viene iniziata la risoluzione del nome, ovvero vengono lanciati in esecuzione sul sistema, i programmi che costituiscono il resolver, cioè il meccanismo di risoluzione dei nomi.
In genere, per prima cosa il resolver controlla se l’associazione tra il nome di dominio desiderato ed il relativo indirizzo IP è presente nel file /etc/hosts. Nel caso in cui non sia presente, richiede la risoluzione del nome al name server, di cui il resolver deve necessariamente conoscere l’indirizzo IP (v. file /etc/resolv.conf). La comunicazione tra il resolver ed i name server avviene per mezzo di uno specifico protocollo di rete (v. RFC 1034 e 1035).
Si supponga ad esempio che il sistema A (name1.domain1.it) voglia contattare il sistema B (name2.domain2.com), come illustrato in fig. 19.5. Dopo aver verificato che sul file /etc/hosts non vi sia specificato l’indirizzo IP di name2.domain2.com, il sistema A chiede al name server (dns.domain1.it) di cui conosce l’indirizzo IP di risolvere il nome name2.domain2.com. Si supponga, per semplicità, che il resolver inoltri al name server dns.domain1.it una richiesta ricorsiva e che il name server dns.domain1.it sia in grado di effettuare una ricerca ricorsiva del nome di dominio in maniera autonoma. Il name server dns.domain1.it non è competente relativamente al dominio domain2.com e pertanto contatterà il name server di competenza del dominio .it per inoltrargli una richiesta (ricorsiva) a proposito del nome di dominio name2.domain2.com. Di nuovo, tale name server non è competente relativamente al dominio domain2.com e pertanto contatterà il name server di competenza del dominio . per inoltrargli una richiesta (ricorsiva) a proposito del nome di dominio name2.domain2.com. Tale name server non è competente relativamente al dominio domain2.com, ma conosce il name server di competenza del dominio .com e gli inoltra una richiesta (ricorsiva) a proposito del nome di dominio name2.domain2.com. A sua volta, tale name server non è competente relativamente al dominio domain2.com, ma conosce il name server di competenza del dominio domain2.com per inoltrargli una richiesta (ricorsiva) a proposito del nome di dominio name2.domain2.com. A questo punto il name server di competenza del dominio domain2.com risponderà con l’indirizzo IP corrispondente al nome di dominio name2.domain2.com. Quindi i server si passeranno tale informazione a ritroso fino a recapitarla al resolver, il quale la memorizzerà in una propria cache, in maniera tale che una successiva richiesta di tale risoluzione del nome non venga più effettuata interrogando i name server, ma la risposta è gestita direttamente dal resolver.
Il confronto tra i nomi di dominio viene sempre effettuato senza fare distinzione tra le lettere maiuscole e quelle minuscole.
Il DNS utilizzato per Internet, fa uso di un nome di dominio particolare per la risoluzione dei nomi di dominio a partire dagli indirizzi IP delle interfacce: in-addr.arpa. Tale nome di dominio permette l’operazione che va sotto il nome di IP address lookup.
I sotto-domini di in-addr.arpa possono al massimo avere fino a 4 livelli ed ogni livello rappresenta un byte dell’indirizzo IP espresso in notazione decimale (da 0 a 255). Il nome di dominio risultante per un determinato indirizzo IP in decimal dotted notation
aaa.bbb.ccc.ddd
sarà espresso come
ddd.ccc.bbb.aaa.in-addr.arpa
Il fatto che l’indirizzo IP venga rovesciato nel nome di dominio è dovuto al fatto che
in questo modo è possibile strutturare l’albero del DNS in maniera tale da poter
agevolmente organizzare le zone delegando ad ogni livello la competenza di una
sottorete.
[da completare ...]