Andrea Beggi

Computers are useless. They can only give you answers.

TCP in pillole: DNS

A T T E N Z I O N E ! Questo post ha piu' di sei mesi. Le informazioni contenute potrebbero non essere aggiornate.

DNS è l’acronimo di Domain Name Service, è un protocollo che lavora nel livello “applicazioni” del modello a strati TCP/IP.
La sua funzione principale è la conversione di nomi di host in indirizzi IP, è stato descritto nel 1983 da Paul Mockapetris nella RFC 882; l’ultima implementazione dovrebbe essere la RFC 1035.
Consiste essenzialmente in un database distribuito tra i diversi server che accoppia ad ogni nome a dominio uno o più indirizzi IP, ed è grazie a DNS che non dovete usare un numero come 66.102.9.147, ma vi basta ricordare www.google.com per raggiungere il sito relativo.
Prima del 1983, il numero di computer connessi ad internet era talmente basso che il database consisteva in un unico file (chiamato “hosts”), residente su di un server presso l’SRI di Stanford. Ciascun computer collegato ad internet recuperava il file e lo utilizzava per risolvere da sé i nomi in numeri. Con la crescita esponenziale di internet, questo sistema si è rivelato inadeguato, da qui la nascita di DNS, che ha una natura gerarchica e distribuita, molto più efficiente di un singolo file monolitico.
Per capire meglio come funziona il processo, analizziamo la struttura di un nome a dominio; usiamo www.wordpress.org come esempio, e procediamo da destra verso sinistra. Le diverse parti del nome sono separate da punti.
Il segmento org è detto Top Level Domain (TLD) o dominio di primo livello. Ne esiste un numero limitato, e sono classificati dallo IANA.
wordpress insieme a org costituisce il dominio di secondo livello; come sapete ne esistono moltissimi, ed è possibile per chiunque registrarne uno a proprio nome.
I livelli successivi si chiamano di conseguenza di terzo, quarto, quinto livello e così via. Sono di pertinenza e responsabilità del titolare del dominio di secondo livello, che ne può creare un numero a piacere.
Una cosa che stupisce sempre quando spiego il funzionamento di DNS: in tutto il mondo ci sono solo 13 root servers (alcuni sono virtuali e “spalmati” su più macchine fisiche), responsabili della gestione di tutto il processo di risoluzione. Essi sono titolari del livello root, rappresentato da un punto a destra del TLD (non si indica mai, ma è come se ci fosse); quel piccolo punto invisibile è la sorgente dalla quale nasce il flusso di risoluzione dei nomi, per questa ragione l’elenco dei loro indirizzi IP è inserito manualmente in tutti i server DNS. I root servers sono molto preziosi, e come tali vanno protetti accuratamente. Un eventuale errore di un amministratore di un dominio molto visitato potrebbe causare seri problemi a tutta internet. E’ già successo, per colpa di Microsoft (che strano). Questo video spiega come funzionano e perchè sono così importanti (26 mega ma li vale tutti, inglese).
Per capire il funzionamento, vediamo nel dettaglio il processo di risoluzione.
Il computer che deve risolvere il nome è il client, i computer sui quali funziona il servizio DNS sono i server.
Per semplificare l’esposizione, non consideriamo la cache, nella quale i client ed i server memorizzano le query più recenti, in modo da velocizzare il processo.
Il client che debba raggiungere www.wordpress.org, ha bisogno di conoscere l’indirizzo IP relativo, quindi scatena un processo detto “query ricorsiva”.
Come prima cosa contatta il server DNS indicato nelle proprietà della propria scheda di rete, che normalmente è quello del provider che fornisce la connessione internet.
Questo server, detto recursor è quello che fa il vero lavoro; come prima cosa contatta uno dei root server, il quale risponde: “Non conosco l’indirizzo di www.wordpress.org, ma eccoti l’indirizzo del server che ne sa di .org“.
A questo punto il recursor contatta quel server, il quale a sua volta risponde “Non conosco l’indirizzo www.wordpress.org, ma eccoti il DNS responsabile per wordpress.org“.
Ulteriore salto del recursor, che ripete la domanda all’ultimo server, che finalmente gli fornisce l’IP desiderato.
A questo punto l’ultimo passo è restituire l’indirizzo IP di www.wordpress.org al client che lo aveva originariamente richiesto.
Se il sistema funzionasse davvero così è chiaro che nel giro di poche ore i root server non sarebbero in grado di reggere il carico di lavoro. In realtà ciascun server DNS mantiene in cache un certo numero di richieste, ed interroga i root server solo in mancanza del dato oppure alla “scadenza” dello stesso, specificata da un parametro detto TTL (time to live).
Ci sarebbero ancora moltissime cose da dire su DNS, per un approfondimento vi rimando alle pagine di Wikipedia, fatte veramente bene: Domain Name System e Domain Name Service.

8 Commenti

Tambu | #

bellissimo post 🙂

in particolare la frase "ma eccoti lindirizzo del server che ne sa di .org" stupenda!! 🙂 🙂

hyle | #

s, bello… e coraggioso! 😉

Andrea | #

Ciao ,
Vi espongo il mio problema , ho un dominio win2000 con un solo livello es. pippo.it il srv DNS non e’ integrato con Active directory , percio’ srv PDC e srv DNS sono separati .
Nel DNS ho solo 2 zone .
Zona Diretta e zona Inversa , la Risoluzione dei DNS esterni e’ forwardata ad un altro Dns(percio’ ho un server d’ inoltro).
Nella zona diretta tutti i record sono corretti sia quelli registrati a mano da me che quelli inseriti dal DHCP .
Mentre nella zona inversa i record sono dupplicati , percio’ ho 192.168.0.33 corrisponde a cdsds.pippo.it e192.168.0.33 corrisponde anche a dfdff.pippo.it , il problema avviene quando io faccio un ping all ‘ip 192.168.0.33 ,la risoluzione del nome corrisponde al primo record con quell ip nella zona inversa del DNS , ma in realta’ la macchina potrebbe nn essere quella.
Avete qualche idea su come possa risolvere il problema???
p.s. ancora 1 cosa nel dominio il wins e’ disabilitato

grazie !!!

nicola petrelli | #

Ciao andrea,
ho visitato il tuo sito e, nonostante nn ci capisca nulla, ho subito capito che sapresti spiegarmi il perchè un programma installato sul mo pc funziona se mi connetto ad internet con la tim e con la wind e invece non funziona se mi collego con la tre. Il programma funziona solo se alcune porte tcp sono aperte. Praticamente se mi collego con la wind e con la tim il mio indirizzo ip interno e quello esterno coincidono, se invece mi collego con la tre l’indirizzo ip interno è diverso da quello esterno. Per capire quale sia l’indirizzo ip visibile all’esterno mi collego al sito http://www.yougetsignal.com/tools/open-ports/ mentre per vedere quello interno esegui/cmd/ip config.
La domanda che vorrei sottoporti è alquanto semplice: posso fare in modo che ip interno ed ip esterno concidano???
grazie per l’attenzione.