Ciao a tutti!

Un pò di tempo fa avevamo parlato di DNS client in questo post, approfondendo i vari meccanismi di gestione della client cache e dei vari meccanismi di risoluzione record tramite suffissi quando era necessario andare ad interrogare un server DNS. Le cose però come sempre nel mondo reale sono un pò più complesse :)

Sicuramente infatti vi sarete trovati almeno una volta a configurare due o più server DNS da far utilizzare al vostro client dalle proprietà della scheda di rete o da uno scope DHCP:

image

Ma vi siete mai chiesti come funziona il meccanismo con cui i diversi server vengono utilizzati? è importante sapere che più server aggiungiamo alla lista, più aumentiamo le probabilità che la nostra query sia risolta. Ma dobbiamo tenere presente anche che se aggiungiamo più server, cambierà anche la modalità con la quale effettuiamo le query. Ma andiamo subito a vedere in dettaglio i vari scenari.

Qual è il comportamento di default di un client DNS quando è configurato un solo DNS server ?

Il comportamento è il seguente (testato su Windows XP, Windows 7 e Windows 8 con una sola scheda di rete)

Tempo (secondi dall’inizio della query)

Azione eseguita

0 Client effettua una query verso il server DNS
1 Se nessuna risposta è stata ricevuta dopo 1 secondo, il client effettua una nuova query verso il server DNS
2 Se nessuna risposta è stata ricevuta dopo 1 ulteriore secondo, il client effettua una nuova query verso il server DNS
4 Se nessuna risposta è stata ricevuta dopo 2 ulteriori secondi, il client effettua una nuova query verso il server DNS
8 Se nessuna risposta è stata ricevuta dopo 4 ulteriori secondi, il client effettua una nuova query verso il server DNS
10 Se nessuna risposta è stata ricevuta dopo 2 ulteriori secondi, il client smette di effettuare query


Nota bene: ogni risposta di “Name Error” o “Server Failure” ricevuta da parte del server determinerà lo stop del processo: il client non riproverà a fare la query se ha ricevuto una risposta negativa ma solo se non ha ottenuto alcuna risposta.

In questo semplice scenario, il client esegue 5 query verso il singolo DNS server prima di stopparsi.

Esempio:

Ipconfig sul client

IPv4 Address. . . . . . . . . . . : 10.0.0.31(Preferred)

DNS Servers . . . . . . . . . . . :  10.0.0.1

 

Estratto di una trace di rete (Network Monitor)

image 

Qual è il comportamento di default di un client DNS Windows XP quando sono configurati 2 DNS server ?

Il comportamento è il seguente (testato su client Windows XP con una sola scheda di rete)

Tempo (secondi dall’inizio della query) Azione eseguita
0 Client effettua una query verso il primo server della lista
1 Se nessuna risposta è stata ricevuta dopo 1 secondo, il client effettua una nuova query verso il secondo server DNS e in contemporanea ritenta una query verso il server primario
3 Se nessuna risposta è stata ricevuta dopo 2 ulteriori secondi, il client effettua una nuova query verso il server DNS primario
7 Se nessuna risposta è stata ricevuta dopo 4 ulteriori secondi, il client effettua una nuova query verso il server DNS primario
9 Se nessuna risposta è stata ricevuta dopo 2 ulteriori secondi, il client smette di effettuare query

 
Nota bene: ogni risposta di “Name Error” o “Server Failure” ricevuta da parte del server determinerà lo stop del processo: il client non riproverà a fare la query se ha ricevuto una risposta negativa ma solo se non ha ottenuto alcuna risposta.

In questo scenario, il client cerca di contattare prevalentemente il server primario, mentre utilizza il secondario una sola volta.

Esempio:

Ipconfig sul client

IPv4 Address. . . . . . . . . . . : 10.0.0.31(Preferred)

DNS Servers . . . . . . . . . . . :  10.0.0.1
                                            10.0.0.2

 

Estratto di una trace di rete (Network Monitor)

image

 

Qual è il comportamento di default di un client DNS Windows 7 o Windows 8 quando sono configurati 2 DNS server ?

Il comportamento è il seguente (testato su client Windows 7 e Windows 8 con una sola scheda di rete)

Tempo (secondi dall’inizio della query) Azione eseguita
0 Client effettua una query verso il primo server della lista
1 Se nessuna risposta è stata ricevuta dopo 1 secondo, il client effettua una nuova query verso il secondo server DNS
2 Se nessuna risposta è stata ricevuta dopo 1 ulteriore secondo, il client effettua una nuova query verso il secondo server DNS
4 Se nessuna risposta è stata ricevuta dopo 2 ulteriori secondi, il client effettua una nuova query verso tutti i server della lista in contemporanea
8 Se nessuna risposta è stata ricevuta dopo 4 ulteriori secondi, il client effettua una nuova query verso tutti i server della lista in contemporanea
10 Se nessuna risposta è stata ricevuta dopo 2 ulteriori secondi, il client smette di effettuare query


Nota bene: ogni risposta di “Name Error” o “Server Failure” ricevuta da parte del server determinerà lo stop del processo: il client non riproverà a fare la query se ha ricevuto una risposta negativa ma solo se non ha ottenuto alcuna risposta.

Il client tenta di utilizzare nuovi server solo se gli altri sono irraggiungibili.

Esempio:

Ipconfig sul client

IPv4 Address. . . . . . . . . . . : 10.0.0.31(Preferred)

DNS Servers . . . . . . . . . . . :  10.0.0.1
                                            10.0.0.2

 

Estratto di una trace di rete (Network Monitor)

image

 

Qual è il comportamento di default di un client DNS quando sono configurati 3 o più DNS server ?

Quanti e quali di loro sono utilizzati?

Il comportamento è il seguente (testato su client Windows XP, Windows 7 e Windows 8 con una sola scheda di rete)

Tempo (secondi dall’inizio della query) Azione eseguita
0 Client effettua una query verso il primo server della lista
1 Se nessuna risposta è stata ricevuta dopo 1 secondo, il client effettua una nuova query verso il secondo server DNS
2 Se nessuna risposta è stata ricevuta dopo 1 secondo, il client effettua una nuova query verso il terzo server DNS
4 Se nessuna risposta è stata ricevuta dopo 2 ulteriori secondi, il client effettua una nuova query verso tutti i server della lista in contemporanea
8 Se nessuna risposta è stata ricevuta dopo 4 ulteriori secondi, il client effettua una nuova query verso tutti i server della lista in contemporanea
10 Se nessuna risposta è stata ricevuta dopo 2 ulteriori secondi, il client smette di effettuare query

Nota bene: ogni risposta di “Name Error” o “Server Failure” ricevuta da parte del server determinerà lo stop del processo: il client non riproverà a fare la query se ha ricevuto una risposta negativa ma solo se non ha ottenuto alcuna risposta.

Il client tenta di utilizzare nuovi server solo se gli altri sono irraggiungibili.

Se quindi ci aspettiamo di ottenere la risposta da un server in quarta posizione, abbiamo un ritardo annunciato di almeno 4 secondi dopo la query originale. Questo può causare problemi nel caso in cui l’applicazione che ha invocato la query abbia un timeout inferiore a questo valore. L’unico modo per risolvere il problema è impostare il server DNS corretto in una delle prime 3 posizioni.

Esempio:

Windows 8 Client configurato con cinque server DNS, che effettua una query per Microsoft.com


Ipconfig sul client

IPv4 Address. . . . . . . . . . . : 10.0.0.31(Preferred)

DNS Servers . . . . . . . . . . . :  10.0.0.1
                                            10.0.0.2
                                            10.0.0.3
                                            10.0.0.4
                                            10.0.0.5

Estratto di una trace di rete (Network Monitor)

image

 

Info aggiuntive:

Se sul client ci sono due schede di rete, entrambe configurate con DNs server differenti il meccanismo è leggermente diverso ed è descritto in questo blog post:

http://blogs.technet.com/b/networking/archive/2009/06/26/dns-client-resolver-behavior.aspx

Grazie a tutti e alla prossima!

Stefano Gagliardi
Sr. Support Engineer
Microsoft Enterprise Platform Support