DNS
Anche se gli utenti tendono ad assegnare dei nomi simbolici alle diverse stazioni, è bene ricordare che tutti gli accessi applicativi si traducono in uno scambio di datagrammi tra due o più entità IP (stazioni client e server).
Gli indirizzi IP delle stazioni coinvolte rappresentano tutto ciò che occorre sapere per instradare correttamente i pacchetti IP attraverso la rete.
Indipendentemente da quanto è noto all’utente, direttamente connesso al programma che agisce da client, per poter creare il datagramma IP alla sorgente, occorre recuperare l’indirizzo IP della stazione di destinazione.
Una prima difficoltà, in questo procedimento, emerge ogni volta che una stazione server cambia il proprio indirizzo IP.
La variazione di indirizzo IP può essere conseguenza del fatto che il server è stato spostato in una rete diversa, o può essere dovuta alla presenza di uno schema per l’assegnazione dinamica degli indirizzi IP.
Prima che il servizio torni nuovamente ad essere disponibile, occorre notificare alle stazioni client, la modifica che ha interessato il server, comunicando il nuovo indirizzo IP.
Un altro problema è legato alla limitata capacità dell’utente di ricordare indirizzi numerici, e associarli correttamente alle stazioni cui corrispondono.
Se il numero di server che un utente contatta abitualmente è molto grande, la necessità di riferire ciascuno di essi tramite l’indirizzo IP diviene un compito insostenibile senza la creazione di un repository da consultare quando necessario.
In alcuni casi le associazioni indirizzo IP/nome logico del server, possono essere memorizzate localmente alla stazione richiedente.
Anche trascurando il fatto che la gestione di un simile repository locale debba essere fatta in modo da non compromettere l’integrità delle informazioni memorizzate, tale approccio diviene sempre meno convincente all’aumentare della frequenza degli spostamenti dei server e al crescere del numero di stazioni che occorre ricordare.
Per riuscire a tracciare automaticamente le variazioni di indirizzo di client e server pubblici, è stato introdotto uno schema universale, in grado di identificare univocamente tutte le stazioni in rete attraverso un identificativo alfanumerico.
Ciascuna stazione, o dispositivo di interconnessione, in possesso di uno o più indirizzi IP, può possedere anche uno o più nomi simbolici univoci.
Il termine tecnico utilizzato per indicare il nome simbolico completo di un server Internet è FQDN (Fully Qualified Domain Name). Ciascun FQDN è costituito da più parti.
Ogni componente del FQDN è una stringa alfanumerica, che identifica univocamente un nodo di una struttura gerarchica ad albero denominata “spazio dei nomi di dominio” (gerarchia DNS).
Il DNS (Domain Name System), è articolato in domini di vario livello.
I domini di massimo livello sono raggruppati in tre categorie, e discendono da una comune radice contrassegnata da un punto “.”.
Il dominio ARPA costituisce da solo una delle categorie di livello superiore. Tale dominio viene utilizzato per la traduzione dei nomi di dominio in indirizzi IP, operazione nota con il nome di inverse lookup.
Una seconda categoria è costituita da domini generici assegnati in base alla classe di appartenenza del richiedente. Al momento esistono i seguenti domini generici, ma la lista si espande velocemente:
aero, biz, com, coop, edu, gov, info, int, mil, museum, name, net, org, pro.
Esiste infine un terzo insieme (il più numeroso) che raggruppa tutti i domini nazionali. Tali domini sono composti da due caratteri: uk (regno unito), eu (unione europea), it (italia)… e via di seguito per ogni nazione.
Da ciascuno di questi domini principali discendono più sottodomini di livello gerarchico inferiore.
La gerarchia DNS non fissa un numero massimo di sottodomini. È stato definito che ciascun nodo deve essere identificato da un’etichetta di lunghezza massima pari a 63 caratteri.
Il nome simbolico completo di una stazione è risultato della concatenzione delle etichette dei domini di appartenenza, separate da punti.
La prima etichetta (procedendo da sinistra) rappresenta in genere il nome della macchina, assegnato direttamente dall’amministratore locale.
Un FQDN riporta per primi i sottodomini di livello più basso e solo in fondo il dominio di livello più elevato.
L’adozione di questo schema consente agli utenti Internet di usare e ricordare, in alternativa agli indirizzi IP, il nome simbolico completo delle stazioni.
Questo semplifica di molto l’accesso alle stazioni remote e aumenta la fruibilità dei servizi Internet. Le stazioni possono modificare il proprio indirizzo IP, senza per questo dover annunciare le modifiche a tutta l’Internet.
Perchè gli utenti continuino ad usufruire del servizio è sufficiente che venga mantenuto lo stesso hostname.
Naturalmente l’adozione di nomi simbolici comporta la necessità di introdurre un meccanismo in grado di ricavare gli indirizzi IP numerici corrispondenti ai nomi simbolici.
Il servizio responsabile di questa traduzione è noto come servizio di risoluzione DNS (Domain Name System).
Il servizio DNS prevede sostanzialmente la creazione di una base di dati distribuita, consultabile dalle applicazioni TCP/IP, attraverso l’intestazione di un client DNS e server DNS.
Una richiesta DNS (DNS query) viene prodotta dal client ogni qual volta risulti necessario mappare un nome simbolico nel corrispondente indirizzo IP. Il server DNS, in ascolto sulla porta 53/udp riservata al servizio, risponde al client restituendo le informazioni richieste (in un messaggio denominato DNS reply).
Il client DNS è il responsabile della ritrasmissione delle DNS query pendenti, in caso di mancata risposta da parte del server. Generalmente il server DNS risponde alle domande inviategli senza richiedere esplicita autenticazione del client.
Il database DNS viene descritto come distribuito, in quanto costituito da innumerevoli database parziali, ospitati da molteplici server DNS, distribuiti in tutta l’Internet pubblica. É sufficiente che l’associazione tra FQDN e indirizzo IP di una stazione sia presente in un qualsiasi server DNS per divenire valida e accessibile in tutta l’Internet.
Nessun server DNS contiene le informazioni relative a tutto lo spazio dei nomi di dominio. Il servizio pertanto prevede due distinti metodi per recuperare le informazioni dai server “autoritativi” per il dominio richiesto.
Nel caso il server locale contattato dal client DNS non sia in grado di restituire l’informazione richiesta esso può essere configurato per effettuare una ricerca iterativa e interrogare un server primario per colmare le proprie lacune.
Per minimizzare le richieste ai server primari, un server DNS locale memorizza temporaneamente (in una cache locale) le risposte relative alle proprie query.
Esiste una seconda modalità chiamata ricerca ricorsiva, secondo cui invece, la risposta del server contattato è solo parziale e contiene indicazione di un server gerarchicamente superiore a cui richiedere le informazioni mancanti.
L’intero database DNS è organizzato al momento in 13 root server che hanno il compito di indirizzare le query ricorsive ai server di primo livello responsabili per ciascun specifico dominio.
Gran parte delle stazioni che popolano internet agiscono come client DNS, usufruendo del servizio di traduzione fornito da uno o più server DNS.
L’impostazione di uno o più indirizzi IP di DNS server attivi è condizione necessaria per permettere a una stazione utente di accedere alla maggior parte dei servizi Internet.
Molto spesso gli indirizzi IP dei server DNS sono restituiti come parametro di configurazione durante la negoziazione dei parametri IP della stazione client da parte del DHCP o IPCP.
Se gli indirizzi IP dei server DNS da contattare non sono corretti o momentaneamente irraggiungibili ogni tentativo di accesso agli altri server può risultare impossibile per un utente comune.
Configurando ciascun client con più server DNS si può sperare di mettere in condizione l’utente locale di risolvere i nomi simbolici anche in presenza di un fault momentaneo del server principale.
Per le stazioni connesse a una rete locale può essere utilizzato quale server DNS, un server locale; per gli utenti connessi direttamente all’internet pubblica, i server DNS che vengono configurati sono generalmente server pubblici, ospitati presso lo stesso Internet Provider da cui si ottiene il collegamento alla rete.
Indipendentemente dalla natura delle informazioni mantenute, i server DNS sono organizzati in modo da assicurare la continuità del servizio per ogni richiesta pertinente uno specifico dominio.
Per questo esistono almeno due server DNS responsabili per ogni area locale (denominata zone), che mantengono tutte le informazioni relative alle stazioni locali.
Struttura di un messaggio DNS
Il servizio DNS stabilisce un unico formato valido tanto per le DNS query che per le DNS reply.
Essendo basato su protocollo di trasporto UDP (essenzialmente stateless), ogni messaggio DNS trasporta tanto la domanda che la risposta, in modo da permettere al ricevente di stabilire a quale domanda pendente associare le informazioni restituite.
Ciascun messaggio può trasportare molteplici domande e/o risposte. È abbastanza frequente ottenere più risposte a una singola domanda. Questo evento accade generalmente quando il database DNS possiede più informazioni alternative per la stessa DNS query.
Il campo Authority riporta invece il Record NS contenente le generalità del DNS server autoritativo per la zona cui appartiene il dominio oggetto della domanda.
Il campo Additional permette invece di restituire al richiedente informazioni aggiuntive relative alla domanda formulata. È importante notare come nell’intestazione dei messaggi DNS non esista nè un campo per inserire eventuali credenziali, nè uno per poter verificare l’integrità dei dati trasferiti.
Indipendentemente dal campo in cui sono contenute, tutte le informazioni restituite da un server DNS vengono generalmente memorizzate temporaneamente in una cache locale del soggetto richiedente.