Il dns (Domain Name System) è un sistema che serve a risolvere il mapping tra nome logico (una risorsa su internet quale può essere il nome di un sito web) ed il suo reale indirizzo IP (l'IP del server che ospita e fa girare il sito). Oltre alla risoluzione dei nomi dei siti web in indirizzi ip, il dns, viene principalmente usato per associare nomi di host e destinazioni di posta elettronica in indirizzi IP.
Riferendoci allo standard TCP/IP o ISO/OSI il dns è un "protocollo" che si colloca a livello applicativo e funge da supporto per svariate altre applicazioni. Volendo dare una definizione più tecnica il DNS è:
- Uno schema di denominazione gerarchico ripartito in domini
- Viene implementato tramite un Data Base distribuito (Name Server)
Cerchiamo di capire il significato di queste definizioni.
Architettura ad albero del DNS
Internet è suddivisa in domini, ognuno dei quali include moltissimi host e a sua volta i domini possono essere ripartiti in sottodomini e così via; in cima a questo albero gerarchico abbiamo il Top Level Domain o Root Domain. L'architettura del dns viene rappresentata con uno schema ad albero, dove ogni ramo è un dominio che può contenere altri domini (rami), le foglie invece non contengono ulteriori sottodomini, ma possono contenere anche migliaia di host.
I domini di livello superiore possono essere di tipo generico o specifici per nazione, per quelli generici abbiamo ad esempio:
- .com -> solitamente per attività commerciali online
- .edu -> università e/o organizzazioni ed enti formativi
- .mil -> forze militari
- .net -> fornitori di servizi di rete
- .org -> organizzazioni no-profit
Per quelli nazionali abbiamo:
- .it -> Italia
- .uk -> Regno unito
- .jp -> Giappone
- .fr -> Francia
- .de -> Germania
Questi vengono detti domini di secondo livello, poiché il TLD (Top Level Domain) è raprpesentato dal primo ".". Il nome di un dominio è pertanto composto dal cammino inverso dalla foglia (singolo host) sino alla radice (Root Domain), ogni ramo viene separato dal "." (punto).
Questi nomi che andranno a comporre l'indirizzo o url della risorsa sono case-insensitive (non fanno distinzione tra maiuscole e minuscole), e l'intero indirizzo non può essere più lungo di 255 caratteri.
Delega di autorità
Per creare un nuovo sottodominio occorre il permesso del dominio nel quale viene incluso. Non appena un nuovo dominio viene creato e registrato, esso può creare propri sottodomini, senza dover chiedere ulteriori permessi ai domini superiori. In pratica vi è una decentralizzazione delle responsabilità, dove ogni dns permette ad associazioni dotate di un proprio dominio di amministrare la relazione nome-indirizzi (nel proprio dominio) in maniera autonoma ed indipendente.
Tutto ciò è ottenuto mediante il meccanismo della delega di autorità che si basa sui seguenti principi:
- Ogni Name Server di un dominio, per essere conosciuto nel DNS, deve essere stato registrato dal Name Server di livello superiore, questo crea la delega.
- Una volta delegata l'autorità su una zona, il Name Server padre perde ogni possibilità di modificare le informazioni e le regole dei domini contenuti nella zona delegata
- I Name Server delegati possono essere più di uno (è consigliato averne almeno due, in alcuni casi è obbligatorio), ma uno solo è quello che possiede la vera autorità perché gestisce i files contenenti le informazioni.
Name Server
Il Name Server è un processo che implementa il Data Base distribuito per il funzionamento del DNS. In pratica è una macchina host (un server) sul quale gira un programma al quale è possibile inviare una query, per ottenere un indirizzo IP da un nome logico.
Zona
In Teoria un solo Name Server potrebbe contenere l'intero Data Base del DNS (Domain Name Server), in pratica un unico server sarebbe sovraccaricato e risulterebbe quasi inservibile, inoltre in caso di guasto l'intera Internet risulterebbe bloccata. Per evitare allora problemi associati ad un'unica fonte d'informazione, lo spazio dei nomi DNS viene suddiviso in zone non sovrapposte, ossia una zona è una parte contigua dello spazio del dominio. Ogni zona contiene alcune parti dell'albero ed inoltre contiene dei Name Server che mantengono le informazioni di "autorità" relativa a quella zona. Usualmente la zona è limitata da confini amministrativi.
Name Server Autoritativi
Un Name Server si definisce autoritativo quando è:
- In possesso dei dati per una determinata zona dell'albero dei nomi (i cui dati si considerano sempre aggiornati)
- Per un dominio vi possono essere più Name Server autoritativi
- E' fortemente consigliato averne più di uno, localizzati in modo da ridurre il rischio di interruzione del servizio DNS
A sua volta i Name Server Autoritativi si distinguono in:
- PRIMARIO: quando possiede i file (su disco) delle informazioni (file di zona) e, pertanto in ogni zona vi sarà un solo Name Server primario.
- SECONDARIO: quando acquisisce, dal Name Server primario, i dati relativi alla zona mediante una procedura automatica denominata "zone-transfer". I Name Server secondari possono essere più di uno.
Dal punto di vista di chi riceve il servizio non vi è alcuna differenza tra Name Server primario e secondario, in quanto forniscono l'identico servizio. Vengono usati nell'ordine in cui sono posti.
Per migliorare l'affidabilità posso rivolgermi ad un Name Server di un'altra zona, ma c'è uno svantaggio, che è quello che le informazioni (Resource Record) non sono autoritative (quindi corrette poiché costantemente aggiornate) ma sono residenti in cache e possono pertanto non essere aggiornate (rimangono valide per un tempo limitato e non sono informazioni autoritative).
Funzionamento del DNS
Quando un programma vuole accedere ad una risorsa interna di cui conosce il nome logico, per potervi accedere ha bisogno di conoscere il suo indirizzo IP, avvalendosi così del DNS (Domain Name Server).
Il processo di risoluzione dei nomi a dominio è basato sul modello Client-Server, che funziona nel seguente modo:
- Il Client (un programma, ad es. un browser), invoca una procedura di libreria detta RESOLVER, passandole come parametro d'ingresso il "nome logico" di cui vuole conoscere l'indirizzo IP.
- Il RESOLVER manda un pacchetto UDP (User Datagram Protocol), che rappresenta la query, ad un Name Server locale (di zona), il quale cerca il nome e restituisce l'indirizzo IP corrispondente al RESOLVER
- Il RESOLVER trasmette tale indirizzo IP al programma chiamante
- Usando tale indirizzo IP, il programma può aprire una connessione TCP con la destinazione, oppure può mandarle pacchetti UDP.
Un Name Server può funzionare in due modi:
- RICORSIVA: Quando un RESOLVER, riceve una interrogazione su un mone di dominio, passa la richiesta ad uno dei Name Server locali; se il dominio si trova sotto la giurisdizione del Name Server interrogato, allora esso restituisce i "Resource Record" di autorità della risorsa.
- ITERATIVA: In questo modalità, quando una interrogazione fallisce, ossia non può essere soddisfatta localmente; allora viene restituito il nome del prossimo Name Server da interrogare lungo il cammino. Questa procedura offre maggior controllo al client durante il processo di ricerca.
N.B. E' possibile configurare sulla propria macchina il DEFAULT DOMAIN di appartenenza e, la SEARCH LIST in un apposito file di configurazione (un file di testo), il file hosts e resolv.conf rispettivamente per Windows e Unix.
Resource Records (Descrittori di Risorse)
Ciascun dominio (che sia radice o meno) che includa uno o migliaia di host, viene associato ad un insieme di descrittori di risorse (resource records). Il descrittore più comune di un singolo host è il suo indirizzo IP, ma ne esistono anche di altri tipi.
Quando un RESOLVER trasmette un nome di dominio ad un DNS (Domain Name System), ciò che ottiene in risposta sono i descrittori di risorsa associati a quel nome. Quindi la vera funzione del DNS è di mappare i nomi di domini sui descrittori di risorsa.
Un Resoruce Records è una quintupla di valori rappresentati uno per linea (un record per linea), codificati in binario, ma presentati in forma di testo ASCII; i campi sono i seguenti:
Nome_dominio |
| |
Tempo_di_vita |
| |
Tipo |
| |
Classe |
| |
Valore |
Esaminiamo più nel dettaglio queste voci:
- Nome_dominio: denota il dominio a cui questo descrittore appartiene (esistono più descrittori per dominio)
- Tempo_di_vita: indica quanto sia stabile il descrittore, se il descrittore è fortemente stabile questo campo ha un valore (numerico) alto, ad es. 86400 (che non sono altro che il numero di secondi in un giorno). Una macchina che possiede lo stesso indirizzo IP da molto tempo avrà tale valore alto. Se invece il descrittore è volatile il suo valore allora risulta basso, ad es. 60 (1 minuto). Il tempo di vita è basato sul concetto di CACHING.
- Tipo:indica di che specie di descrittore si tratta
- A -> indirizzo IP di un host
- NS -> name server
- PTR -> puntatore
- MX -> posta
- TXT -> testo
- Classe: contiene un codice che denota il tipo d'informazione, ad es. il codice "IN" sta per "informazione internet"
- Valore: può contenere un numero, un nome di dominio o una stringa ASCII