Il Domain Name System (DNS) e' un database distribuito usato dagli applicativi TCP/IP per la mappatura da nomi host ad indirizzi di Internet.
Non esiste un singolo sito in Internet che conosca tutte le informazioni del database, invece ogni sito mantiene la sua porzione di database limitata alla descrizione del sito, e gestisce un server di questa porzione di database, che puo' essere interrogato da altri sistemi in Internet.
Gli applicativi accedono al servizio DNS tramite un resolver. Questo non e' un programma specifico, ma e' invece un insieme di funzioni di programmazione predisposte a contattare il server DNS, che vengono linkate nell'applicativo stesso. Molto spesso le funzioni o subroutine che implementano il resolver sono raccolte in una libreria dinamica.
Il resolver non e' quindi patre dei protocolli TCP/IP del kernel, ma dei protocolli applicativi. E quindi compito degli applicativi convertire il nome host in indirizzo IP prima di invocare i protocolli TCP o UDP.
I concetti ed i dettagli implementativi del DNS sono contenuti nei documenti RFC1034 ed RFC1035. L'implementazione DNS piu' comune per UNIX si chiama BIND - Berkeley Internet Domain Server, ed il nome del programma e' di solito named.
Lo spazio dei nomi del DNS e' gerarchico ed implementato in una struttura ad albero. Ogni nodo ha un'etichetta di lunghezza massima 63 caratteri. La radice e' un nodo speciale senza etichetta. Non vi e' differenza nelle etichette tra maiuscole e minuscole.
Il nome di dominio e' la sequenza di etichette a partire dal nodo verso la radice, usando il carattere 'punto' (.) come separatore di etichetta.
Ogni nodo dell'albero DNS deve avere un nome di dominio univoco. Le etichette possono essere ripetute in locazioni diverse dell'albero (stesse regole dei nomi di files e directories in un file system).
Un nome dominio che termina con un punto si dice nome di dominio completo o Fully Qualified Domain Name (FQDN). Se il nome di dominio non termina con un punto si presume che non sia completamente qualificato, e che manchino quindi etichette di nodi.
Un nodo dell'albero direttamente sotto il nodo radice si chiama dominio ad alto livello (top-level domain). Questi sono divisi in tre aree:
Non vi e' nessuna implicazione che i domini generici siano riservati agli Stati Uniti, e difatti esiste anche il dominio nazionale US.
Molte nazioni (Gran Bretagna, Germania, ecc.) suddividono il dominio nazionale ad alto livello in domini a secondo ed anche a terzo livello predeterminati. Altre nazioni non lo fanno (Italia).
Il concetto principale amministrativo del DNS e' la delega di responsabilita'. L'organizzazione principal del DNS, il Network Information Center (NIC) amministra solo la porzione dell'albero che copre i domini ad alto livello e delega la responsabilita' amministrativa dei sottodomini a singole organizzazioni nazionali.
Si definisce zona la porzione dell'albero DNS sottoposta ad amministrazione singola. Molti domini a secondo livello sono separati in zone. Ogni zona ha una persona amministratrice responsabile, che si cura dell'allocazione dei nomi ed indirizzi della zona e della manutenzione del database e configurazione delle macchine server.