01-07-2004

per commenti
osservazioni
critiche
e ringraziamenti
       
scrivi all'autore

Chiedi all'esperto -  Home
ViaLattea home

Vorrei sapere quali sono i compiti che deve svolgere un server DNS e se possibile come lo si potrebbe implementare in C?

(risponde Luca Fini)


Un server DNS (Domain Name Server) ha lo scopo di tradurre gli indirizzi dei nodi della rete Internet dalla forma "normale" a quella numerica. Il funzionamento del protocollo TCP/IP (vedere anche una precedente risposta) infatti prevede che i nodi della rete siano univocamente identificati mediante un Numero IP, costituito da quattro valori compresi fra 0 e 256. Ad esempio il computer che fa da supporto al sito di "Vialattea" ha numero IP: 213.145.29.14.

I numeri IP sono però difficili da ricordare; per un "umano" è assai più facile ricordare qualche cosa che somigli ad un nome, ad esempio www.vialattea.net. Per questo motivo il funzionamento della rete Internet prevede l'uso di nomi per identificare i nodi di rete ed un meccanismo di traduzione fra nomi e corrispondenti numeri IP.

I server DNS sono programmi, attivi su particolari nodi, che mantengono le tabelle di informazioni necessarie per effettuare la traduzione dei nomi e per fare questo automaticamente si scambiano fra loro le variazioni che via via si verificano.

La struttura dei server DNS è gerarchica, come è gerarchica la struttra dei nomi dei nodi, e l'informazione (cioè le tabelle) è diffusa in tutta la rete. Per comprendere questo fatto vediamo come avviene la traduzione di un nome:

Quando il mio PC deve collegarsi a www.vialattea.net, chiede al suo DNS (che normalmente si trova abbastanza "vicino", ad esempio sulla stessa LAN, e che viene specificato nella configurazione della rete) la traduzione del nome. Il DNS si rivolge ad un server di primo livello per sapere quale server DNS contiene le tabelle relative ai nomi che terminano per .net e riceve il numero relativo; poi si rivolge a questo per sapere quale server DNS contiene i nomi che terminano per .vialattea.net e riceve un secondo numero IP; infine interroga quest'ultimo server per avere il numero corrispondente a www.vialattea.net e lo passa al mio PC come risposta finale all'interrogazione. Si noti che in questo modo i server di primo livello contengono solo le informazioni relative ai server di secondo livello; questi ultimi solo quelle dei server di terzo livello del proprio gruppo; quelli dell'ultimo livello di solito contengono le informazioni relative alla propria LAN.

Il sistema è un po' più complicato in quanto prevede vari meccanismi di ridondanza per accelerare le risposte e per evitare che la traduzione di un nome sia affidata ad un solo server; nonché meccanismi per aggiornare automaticamente le informazioni.

Per quanto riguarda le implementazioni la più usata e più nota è una versione "open source" nota con il nome di BIND (Berkeley Internet Name Domain) ed è distribuita in forma sorgente, quindi costituisce il miglior esempio possibile di come realizzare un server DNS:

http://www.isc.org/