Antefatto
Quando navighiamo per il web non facciamo altro che cercare delle risorse memorizzate su qualche server, interrogare un grande ‘elenco del telefono’ e trovato riceverne la risposta.
A qualsiasi indirizzo internet è associato un indirizzo IP: quando nella barra degli indirizzi browser digitiamo www.google.it il nostro computer interroga un ‘elenco telefonico’ che non è altro che un database designato col nome DNS e fornisce l’indirizzo IP corrispondente.
Per una veloce dimostrazione pratica di quanto detto possiamo aprire il Terminale e digitare il comando seguente (mambo:~ nicola$: è un messaggio del Terminale del mio computer):
mambo:~ nicola$ ping www.google.it
… a cui il computer risponderà con un:
PING www.google.it (216.58.212.99): 56 data bytes
Nella mia configurazione di rete, in base al mio fornitore di connettività Internet, ed in base al mio posizionamento geografico, il server di Google che risponderà alle mia (prima) richiesta è contraddistinto dall’indirizzo IP 216.58.212.99. Più tardi, domani, se mi trovassi a Napoli, se usassi Telecom invece di Infostrada, potrebbe rispondermi un server con un altro indirizzo IP.
Lo stato delle cose
Ora, come noi traslochiamo, anche i servizi web si spostano nel tempo (oltre che nello spazio geografico). Non esiste UN elenco del telefono monolitico di tutti gli indirizzi IP del mondo. Esistono una serie di grandi database di indirizzi IP, a cui altri database DNS si connettono, richiedendo (o aggiungendo!) nuovi abbinamenti nomedominio.tld <–> indirizzo IP.
Ogni fornitore di connettività ha un insieme di suoi server DNS. Ci sono aziende che forniscono DNS i cui risultati sono filtrati a monte da siti malevoli, oppure da siti ritenuti scomodi politicamente, o contenenti materiale illegale. Anche il nostro computer conserva un (piccolo) database di indirizzi IP.
Quando un computer punta un sito, il nome del dominio viene prima cercato nella cache locale (cioè se ho chiesto alle 9 di trovare Google, alle 10 il mio computer avrà salvato l’abbinamento Google<–>216.58.212.99 e non effettuerà una nuova richiesta); se non viene trovato allora viene interrogato l’HOST; se neanche l’host ha informazioni sul dominio viene interrogato il server DNS.
Il sito desiderato non è raggiungibile?
Alla luce di quanto visto, se all’improvviso un sito / servizio web – che sappiamo essere attivo funzionante – smette di essere raggiungibile dal nostro computer, mentre da quello del collega sulla scrivania a fianco o un amico su Skype ci dice di star visitando, il primo tentativo da fare è quello di effettuare uno svuotamento della cache degli indirizzi DNS e quindi forzarne la creazione / aggiornamento. Questa operazione viene chiamata flush.
A seconda della versione di OS X in funzione sul nostro Mac l’operazione cambia, viste le modifiche introdotte da Apple durante gli anni in funzione delle differenti esigenze di sviluppo e integrazione di servizi di identificazione e uso delle risorse locali e di iCloud. Ecco per ogni versione i comandi da impartire:
OS X 10.10 / OS X 10.10.3
sudo discoveryutil udnsflushcaches
OS X 10.9 e OS X 10.10.4 →
dscacheutil -flushcache; sudo killall -HUP mDNSResponder
OS X 10.7 – 10.8
sudo killall -HUP mDNSResponder
OS X 10.5 – 10.6
sudo dscacheutil -flushcache
Il consiglio
Ovviamente per non doversi ricordare ogni volta la sequenza dei comandi possiamo creare un alias nel file .bash_profile del nostro Mac che eseguirà il comando semplicemente scrivendo una parola chiave di facile memorizzazione, io ad esempio ho chiamato questo comando cleanDNS (ed ho usato la sintassi propria di Yosemite):
alias cleanDNS='sudo dscacheutil -flushcache'
dscacheutil -flushcache; sudo killall -HUP mDNSResponder
AGGIORNAMENTO
Apple con la quarta versione di Yosemite 10.10.4 (rilasciata il 30 giugno 2014) ha fatto marcia indietro per alcune tecnologie in materia di networking e reintrodotto le applicazioni valide fino a Mavericks. Ho quindi modificato l’articolo.