In questo articolo parleremo del protocollo Domain Name System (DNS), utilizzato per riuscire a riconoscere un host.

Ad ogni host connesso alla rete di internet viene assegnato un indirizzo IP: una stringa lunga 4 byte, separata ad ogni byte da un punto (nella version IPv4).

Parlando in decimale, un indirizzo IP è composto da 4 gruppi di numeri che vanno da 0 a 255. Leggendo questi numeri da sinistra verso destra, abbiamo informazioni sempre più dettagliate di dove si trova l’ host che vogliamo raggiungere.

www.informaticalab.com è molto facile da ricordare vero? Eppure non fornisce sufficienti informazioni per sapere dove si trova fisicamente all’ interno della rete internet.

Il server di informaticalab fisicamente si trova da qualche parte: per raggiungerlo abbiamo bisogno del suo indirizzo IP, ed è qui che entra in gioco il DNS.

Domain Name System

Il DNS è un database distribuito implementato in una gerarchia di server. A livello di trasporto sfrutta l’ UDP e viene generalmente utilizzato dagli altri protocolli a livello applicazione, per sapere un host a quale IP corrisponde (es: il tuo browser per sapere dove trovare informaticalab.com ha inviato una richiesta al server DNS).

I procedimenti per collegarsi a questo sito, parlando dal lato del DNS (che nell’articolo su HTTP non avevamo visto) sono:

  1. Viene richiesto www.informaticalab.com/pagina.html Il nostro browser estrae l’ URL (www.informaticalab.com) e lo passa al lato client dell’ applicazione DNS
  2. Il DNS invia una query contenente l’hostname  a un server DNS.
  3. Il client DNS riceve una risposta che contiene l’ indirizzo IP dell’ hostname
  4. Ottenuto l’ IP il browser può dare inizio a tutte le procedure di HTTP viste nell’articolo dedicato.

Il DNS è un protocollo del livello Applicazione che sfrutta il paradigma clientserver e a cui gli utenti (a parte gli amministratori di rete) non interagiscono direttamente.

Aliasing

L’ aliasing permette di associare un nome semplice da ricordare a uno più complesso: un host può avere uno o più sinonimi (alias appunto).

realay1.east-coast.bbc.com potrebbe avere i sinonimi bbc.com e www.bbc.com

Il primo, realay1.east-coast.bbc.com, è definito hostname canonico; gli altri due invece sono degli alias.

E’ facile notare che gli alias sono più facili da ricordare: nonostante questo il DNS permette, tramite apposita query ai database, di estrarre oltre che l’ IP anche l’ hostname canonico. L’ Aliasing funziona anche con i mail server: i web e mail server di una società potrebbero avere lo stesso alias ma hostname canonico diverso.

Distribuzione del carico

Un’ottima cosa che ci permette di fare il DNS, è la distribuzione del carico: per esempio vi immaginate se tutte le persone del mondo si collegassero allo stesso server di google? Impossibile gestire una tale mole di traffico con un solo server!

Per questo motivo, ne esistono molto di più, ma tutti hanno un’ indirizzo IP diverso. All’ hostname canonico, viene associato infatti un’ insieme di indirizzi IP.

Quando viene eseguita la query al DNS, questo ci riporta l’ insieme di indirizzi IP variandone l’ordine (noi utilizziamo il primo della lista) in modo da distribuire il carico di traffico su tutti i server.

DNS

Gerarchia del DNS

Con tutti i milioni di siti internet presenti al mondo, non è possibile che un solo server DNS riesca a mapparli tutti: infatti il mapping è distribuito gerarchicamente su moltissimi server DNS.

La gerarchia, li divide in 3 classi di Server DNS:

  • Root-Server (.)
  • Top-Level Domain (TLD)
  • Authoritative

Per riuscire a prendere l’ IP di un sito web, il DNS deve passare per tutte e tre le classi:

  • Richiede al server radice dove si trova il server DNS dei .com
  • Il client interroga il server dns per ottenere informaticalab.com
  • Il client interroga il server DNS di informaticalab.com per sapere l’ IP di www.informaticalab.com

Root Server

In Internet esistono 13 server DNS radice che per motivi di sicurezza e affidabilità, vengono replicati per arrivare ad un totale di 247 root server.
E’ possibile trovare il numero di repliche aggiornato, visitando il sito ufficiale.

I DNS locali contattano i root server che a loro volta:

  • Contatta un server DNS autorizzato (TLD) se non conosce la mappatura
  • Ottiene la mappatura
  • Restituisce la mappatura al server DNS locale

Server TLD e Server di competenza

I Top Level Domain Server sono quelli che si occupano di gestire i domini com,org,net,it eccetera. Verisign Global Registry Services gestisce i domini com, la Educause gestisce quelli edu e così via.

I server di competenza (authoritative server) sono invece offerti da ogni organizzazione che ha un host Internet pubblicamente accessibile. Essa infatti deve fornire i record DNS di pubblico dominio che mappano gli host ai rispettivi indirizzi IP.

In generale possono essere mantenuti dall’ organizzazione o dal service provider e sono due (primario e secondario).

Server DNS locale

I Server DNS locali non appartengono alla gerarchia dei server vista poco fà: ciascun ISP (Internet Service Provider – es: università, società, ISP residenziale) ha un server DNS locale chiamato anche Default Name Server.

Quando un host effettua una richiesta DNS, la query viene inviata al suo server DNS locale ed il server DNS locale opera da proxy e inoltra la query in una gerarchia di Server DNS.

Iterative
1. Query iterative. Il server DNS locale contatta ogni server della gerarchia fino ad arrivare a quello desiderato

 

2. Query ricorsive. Il server DNS locale contatta il primo server radice che poi contatta tutti i server al di sotto della sua gerarchia e restituisce l' ip dell'hostname al richiedente
2. Query ricorsive. Il server DNS locale contatta il primo server radice che poi contatta tutti i server al di sotto della sua gerarchia e restituisce l’ ip dell’hostname al richiedente

 

Cache

Il DNS sfrutta il caching per migliorare le prestazioni di risposta e ridurre il numero di messaggi che navigano nella rete Internet. Una volta che il server DNS impara una certa mappatura, la mette nella cache dove vengono mantenute per un certo periodo di tempo. Tipicamente, un server DNS locale memorizza nella cache gli indirizzi IP dei server TLD qindi i server DNS radice non vengono visitati spesso.

Record DNS

La mappatura è mantenuta nei database sotto forma di RR: Resource Record. Ogni RR mantiene una mappatura (es: hostname, ip, alias, nome canonico ecc), questi record poi vengono spediti dal server dell’ host richiedente all’ interno dei messaggi DNS che possono anche contenere più RR.

Il formato di un RR è: Name, Value, Type, TTL(tempo residuo di vita). Vediamo i tipi di valori che possono essere veicolate:

Type=A

Da hostname a Indirizzo IP: In name è presente il nome dell’ host, value è l’ indirizzo IP.

Type=CNAME

Da alias a Nome canonico: name è il nome alias di qualche nome “canonico” (nome vero) e value è il nome canonico (bbc.com, relay1.east.bbc.com, CNAME)

Type=NS

Da nome dominio a Name server: name è il dominio, value è il nome dell’ host del server di competenza di questo dominio

Type=MX

Da alias a nome canonico del mail server: value è il nome canonico del server di posta associato a name

Type=SOA

Specifica una serie di informazioni autoritative riguardo una zona

Type=AAAA

Indirizzo IPv6 dell’ hostname

Ti piave un riscontro pratico? Guarda questi dati associati a informaticalab.com

Messaggi DNS

Il protocollo DNS invia e riceve query sotto forma di messaggi scambiati usando lo stesso formato:

Un’ intestazione formata da:

Identificazione: numero a 16 bit per identificare la domanda, usato per la risposta

Flag: Contiene un id che corrisponde al tipo di messaggio. Es: Domanda o risposta, Richiesta di ricorsione, Ricorsione disponibile, Risposta di competenza,

Numero di: Numero di occorrenze delle quattro sezioni di tipo dati che seguono.

Ovvero:

  • Domande: Contiene i campi per il nome richiesto e il tipo di domanda (A,MX)
  • Risposte: RR nella risposta alla domanda
  • Competenza: Contiene i record per i server di competenza
  • Informazioni aggiuntive: Campo che se serve contiene informazioni extra.

Quando vogliamo registrare il nostro dominio,  es: informaticalab.com, il registrar ha bisogno dell’ IP e il nome dei server DNS di competenza (primario e secondario): dopo di che, il registrar si occuperà di inserire due RR nel server TLD com:

(informaticalab.com, dns.informaticalab.com, NS)

(dns.informaticalab.com, 127.0.0.1, A)

Inseriamo poi nel server di competenza un record di tipo A per www.informaticalab.com e uno di tipo MX per informaticalab.com ed è fatta!

Perchè UDP?

Per concludere il discorso del DNS, una piccola parentesi: il protocollo DNS sfrutta l’ UDP come abbiamo già detto in precedenza. Questo perchè UDP ha un minor overhead, i messaggi sono corti e un solo messaggio deve essere trasferito dal client a server e viceversa.

Se usassimo TCP, dovremmo eseguire un set-up della connessione perdendo molto tempo! In caso di perdita del pacchetto, quindi non abbiamo ricevuto risposta, scaduto un timeout viene re-inviata la richiesta (problema risolto quindi dallo strato applicativo).

Prova pratica

Per fare una prova pratica, da linea di comando potete lanciare il comando:

nslookup informaticalab.com

Volendo, possiamo anche specificare il tipo con -type=tipo:

nslookup -type=NS informaticalab.com

Ci darà i NS del dominio informaticalab.com