Servizio DNS
Il DNS (Domain Name System) indica un sistema complessivo per ottenere l'indirizzo IP di un host della rete dal suo nome simbolico o hostname (risoluzione DNS); oppure per ottenere la conversione inversa, da un indirizzo IP ad un hostname assegnato ad un host della rete (risoluzione inversa). Con lo stesso acronimo (DNS) si intende anche il protocollo omonimo di livello 7 OSI (RFC 882 e successivi) che regola il funzionamento del sistema attraverso i sistemi server che hanno accesso ai database su cui sono memorizzate le associazioni nomi/indirizzi. Il DNS è una delle caratteristiche più visibili della rete Internet dato che i nomi simbolici sono molto più facili da ricordare rispetto agli equivalenti indirizzi IP. Cionondimeno tutta la rete TCP/IP necessita di indirizzi IP in formato numerico (es. in formato dotte) per far funzionare i protocolli, pertanto il servizio DNS è fondamentale sia per le reti TCP/IP locali su LAN (DNS privato), sia per Internet (DNS pubblico) e quindi in un numero a 32 bit. Il protocollo DNS è anch'esso di tipo client/server e viene trasportato da UDP (in qualche caso anche da TCP) sul numero di porta 53. In sostanza il protocollo DNS deve essere in grado di agire a livello 7 come supporto ad altre applicazioni di livello 7 che utilizzano nomi simbolici al posto di indirizzi IP (come ad esempio HTTP che utilizza gli URL al posto degli indirizzi IP). In queste occasioni il client DNS deve intercettare il nome simbolico utilizzato dall'applicazione (es., un URL) e fare una richiesta di risoluzione DNS alla parte server del protocollo DNS. Ottenuta la risoluzione, l'applicazione originaria potrà proseguire utilizzando l'indirizzo IP al posto del nome simbolico. La parte client del protocollo DNS è sempre attiva su ogni host di una rete TCP/IP ed è spesso chiamata resolver; la parte server del protocollo invece è realizzata solo su host che hanno accesso ad un database locale dei nomi (server DNS), ed è detta name server (abbreviato: ns).
Nella sua forma più semplice il protocollo DNS consiste in due passi: la richiesta del resolver (client DNS), e la risposta del name server (server DNS). Il resolver invia una richiesta di risoluzione di un nome con un pacchetto DNS Standard query su UDP, con IP remoto impostato sull'indirizzo di un DNS server (indirizzo IP che l'host deve avere nella sua configurazione di base, magari ottenuto con DHCP) e porta remota UDP 53. La porta locale sarà designata in modo casuale. Nel pacchetto sarà presente il nome simbolico che deve essere risolto. Il name server risponde con un pacchetto DNS Standard response su UDP con IP remoto coincidente con l'IP del client (resolver) e come porta remota la porta designata dal client (la porta locale invece sarà ancora la 53). Nel pacchetto sarà presente l'indirizzo IP relativo al nome simbolico ricevuto in consegna. Le richieste di risoluzione di hostname pubblici si basano su un database distribuito e sulla gerarchia ad albero dei nomi di dominio (domain name) che sono stati previsti per la gestione del DNS. Un nome di dominio è quindi una stringa separata da punti, come ad esempio itis.pr.it. I nomi di dominio si leggono in “little endian”: la parte più significativa del nome di dominio sta a destra. Quando un nome di dominio indica un preciso nodo nell'albero, si chiama FQDN (Fully Qualified Domain Name). I name server che stanno sulla radice dell'albero dei nomi sono detti root name servers e sono solo 13 per tutta Internet: a.root-servers.net, b.root-servers.net, ..., m.root-servers.net.
Quando il resolver di un client DNS avvia una richiesta che si espande al dominio pubblico, la richiesta viene presa in carico da più name server che possono operare in modo ricorsivo e/o iterativo: se un name server delega un altro name server, allora la richiesta è ricorsiva; se invece coopera con altri name server, la richiesta è iterativa.