Il Domain Name System è un servizio basato su UDP che ha il compito di convertire gli hostname (più facili da ricordare per le persone) in indirizzi IP e viceversa.
Esso è costituito da un database distribuito implementato attraverso una gerarchia di server dei nomi e da un protocollo applicativo per permettere agli host di comunicare con i server dei nomi per accedere al servizio di traduzione (hostname in indirizzo IP e viceversa).
Sebbene la funzione di traduzione sia quella principale, il DNS offre altri importanti servizi:
- può fornire uno o più alias alternativi per un hostname
- può effettuare distribuzioni di carico fra le repliche di uno stesso server
La gerarchia dei server dei nomi prevede:
- server dei nomi locale: quando un host invia un messaggio di richiesta questo viene dapprima inviato al server dei nomi locale dell’host che di solito è separato dall’host da pochi router.
- server dei nomi radice: quando il server dei nomi locale non è in grado di soddisfare la richiesta "contatta" il server dei nomi radice, se questo ha la registrazione dell’host name invia un messaggio di risposta al server dei nomi locale il quale provvederà ad inoltrare la risposta all’host richiedente, viceversa contatta il server dei nomi assoluto che ha la correlazione per l’hostname da tradurre richiesto.
- server dei nomi assoluto: quando viene contattato da un server dei nomi radice fornisce una risposta DNS che contiene la correlazione richiesta: a questo punto il server dei nomi radice invia la risposta al server dei nomi locale e questo la inoltra all’host richiedente.
 |
Organizzazione del DNS
L’immagine a lato mostra l’organizzazione gerarchica dei server dei nomi e le comunicazioni che intercorrono fra di essi per soddisfare la richiesta di traduzione di un host.
La richiesta viene dapprima rivolta al server dei nomi locale e se questo non è in grado di soddisfarla coinvolge anche i server dei nomi radice e quindi i server dei nomi assoluto.
|
Tipicamente il server dei nomi radice non conosce direttamente l’indirizzo IP di un server dei nomi assoluto ma si appoggia ad un server dei nomi intermedio che a sua volta conosce l’indirizzo IP di un server dei nomi assoluto per l’hostname preso in considerazione.
Un’altra importante caratteristica del DNS è rappresentata dal caching: per migliorare le prestazioni e ridurre il carico di messaggi DNS nella rete quando un server dei nomi riceve una correlazione la mantiene nella sua memoria onde evitare di dover contattare un altro server dei nomi qualora si dovesse presentare la medesima richiesta di traduzione.
La classe Dns
La classe Dns del namespace System.Net contiene tutte le funzioni necessarie per accedere ai servizi del Domain Name System:
- GetHostAddresses()
- GetHostEntry()
- GetHostName()
GetHostName() ottiene l’hostname del computer locale:
string hostname = Dns.GetHostName();
GetHostAddresses() restituisce gli indirizzi IP per l’host indicato dal parametro sottoforma di un array di IPAddress
IPAddress[] ips;
ips = Dns.GetHostAddresses(hostname);
foreach (IPAddress ip in ips)
{
...
}
GetHostEntry() risolve un hostname o un indirizzo IP in un’istanza della classe IPHostEntry la quale costituisce un contenitore per le informazioni sull’indirizzo di un host.
IPHostEntry host; host = Dns.GetHostEntry(hostname);
foreach (IPAddress ip in host.AddressList)
{
...
}
foreach (string s in host.Aliases)
{
...
}
Fra i membri della classe IPHostEntry rivestono particolare importanza:
- AddressList che rappresenta l’elenco degli indirizzi IP (IPAddress[]) associati all’host
- Aliases che rappresenta l’elenco degli alias (String[]) associati all’host