Processo di risoluzione dei nomi

Uno degli aspetti che molto spesso scatena dubbi è qual’è l’esatta sequenza di passaggio che porta i client Windows 2000 e successivi a risolvere i nomi NetBIOS o DNS.

Di seguito cercherò di sintsetizzare il processo che vale sia per un nome NetBios che per un nome DNS.

La risoluzione sia che si tratti di un nome NetBios che di un nome FQDN inizia coi i passaggi per la risoluzione di un nome DNS e nel caso si tratti di un nome NetBIOS verrà costruito un nome FQDN costituto dal nome NetBIOS da risolvere seguito dal suffisso dns primario del client che deve eseguire la risoluzione. Il suffisso dns primario si definisca nell’applet di Sistema (sysdm.cpl) e precisamente nella scheda Nome computer selezionando Cambia e quindi Altro.

I passaggi per la risoluzione di un nome DNS sono i seguenti:

  1. Controllo che il nome DNS ricercato non sia quello del computer locale.
  2. Ricerca nella cache del client (DNS client resolver cache).
    Per vederne il contenuto è possibile usare il comando ipconfig /displaydns.
    Per cancellarne il contenuto è possibile usare il comando ipconfig /flushdns.
    Si noti che tutto quello che viene scritto nel file %SystemRoot%\System32\Drivers\etc\hosts viene inserito nella DNS client resolver cache quindi controllare la cache del client significa di fatto controllare anche eventuali voci nel file hosts.
  3. Query al serve DNS.

Nel caso i passaggi precedenti non abbiano prodotto una risoluzione se il NetBIOS over TCP/IP è abilitato viene tentata la risoluzione NetBIOS, nel caso si stava risolvendo un nome DNS viene creato un nome NetBios corrispondente alla parte parte più a sinistra del primo punto di separazione del FQDN e ne caso questa parte superi i 15 caratteri verrà troncata.

I passaggi per la risoluzione di un nome NetBios nel caso che il client sia impostato come nodo H (Hybrid 0x8) sono i seguenti:

  1. Controllo che il nome NetBIOS ricercato non sia quello del computer locale.
  2. Ricerca nella cache del client (NetBIOS name cache).
    Per vederne il contenuto è possibile usare il comando nbtstat -c.
    Per cancellarne il contenuto è possibile usare il comando nbtstat -R.
  3. Query al server WINS.
  4. Viene tentata la risoluzione via broadcast.
  5. Ricerca nel file %SystemRoot%\System32\Drivers\etc\lmhosts.

Nel caso in cui il client sia configurato come un nodo B (Broadcast 0x1) i passaggi sono:

  1. Controllo che il nome NetBIOS ricercato non sia quello del computer locale.
  2. Viene tentata la risoluzione via broadcast.
  3. Ricerca nel file %SystemRoot%\System32\Drivers\etc\lmhosts.

Nel caso in cui il client sia configurato come un nodo P (Peer-Peer 0x2) i passaggi sono:

  1. Controllo che il nome NetBIOS ricercato non sia quello del computer locale.
  2. Ricerca nella cache del client (NetBIOS name cache).
  3. Query al server WINS.

Nel caso in cui il client sia configurato come un nodo M (Mixed 0x4) i passaggi sono:

  1. Controllo che il nome NetBIOS ricercato non sia quello del computer locale.
  2. Ricerca nella cache del client (NetBIOS name cache).
  3. Viene tentata la risoluzione via broadcast.
  4. Query al server WINS.

Per impostazione predefinita i client sono nodi B e diventano nodi H quando sono configurati con server WINS.

Per ulteriori informazioni si vedano:

[Update 001]

Una precisazione importante è che questo processo di risoluzione viene usato dal sistema operativo (quindi da comandi come ping, net use, ect.. oppure da applicativi del sistema quali ad esempio esplora risorse) per quanto riguarda le appliccazioni va precisato che la maggior parte utilizza ancora le api NetBIOS tramite NetBIOS over TCP/IP.

image 

Un modo per sapere se un’applicazione utilizza NetBIOS per è quello di provare a disabilltare NetBIOS su TCP/IP e vedere se tutto funziona correttamente, infatti disabilitando NetBIOS non verrà più eseguita la parte di risoluzione relativa ovvero ricerca nella cache, utilizzo di WINS, Broadcast e ricerca nel file LMHOSTS e inoltre non verranno generati i broadcast di annuncio.

Va anche detto che fino a XP e Windows 2003 Server nel sistema operativo esiste una funzionalità che utilizza NetBIOS ed è il browsing di rete (a partire da Windows Vista questa funzionalità è stata completamente riscritta e non fa più uso di NetBIOS, anche se è ancora compatibile con il browsing via NetBIOS e poù ancora utilizzarlo tramite il comandi net view o con il tool browstat.exe a riguardo si veda NetBIOS browsing across subnets may fail after upgrading to Windows Server 2008).

Queste considerazioni ci permettono di dare anche una risposta ad un’altra domanda ovvero se sia ancora necessario avere un server WINS nella nostra infrastruttura e la risposa è che ovviamente e utile averlo (perchè in caso contrario verrebbero usati broadcast) in queste situazioni:

  • Esistenza nell’infrastruttura di client Windows NT e/o Windows 9x
  • Per aumentare le performance del browsing di rete se utilizzato di frequente.
  • Per supportare applicazioni che utilizzano NetBIOS
  • Per supportare la risoluzione su reti separate (VLAN, router)

Nel caso si decida che NetBIOS sia poco usato o si verifiche che l’impatto dei broadcast nella rete è irrisorio è possibile non istallare un server WINS.

Nel caso in cui s verifica che NetBIOS non è necessario converrà allora disabilitare NetBIOS ove TCP/IP per evitare anche i broadcast di annuncio.

Tra l’altro l’impostazione predefinita potrebbe dare adito a dubbi:
image 
parrebbe infatti che a meno che non venga passata tramite DHCP l’apposita opzione NetBIOS è disabilitato, invece anche senza passare l’opzione NetBIOS over TCP/IP è abilitato. Per sincerarsene è possibile utilizzare il comando ipconfig /all che visualizza lo stato nel caso non sia abilitato:
image

Ovviamente il WINS è un servizio proprietario Microsoft è quindi utilizzabile solo da client Microsoft o da client che siano eplicitamente compatibili con questa tecnologia. Inoltre va detto che WINS non significa usa NetBIOS, ma usare un servizio di risoluzione dei nomi NetBIOS che evita l’utilizzo di broadcast.

A titolo di informazione l’opzione a cui si fa riferimento è la 001 Microsoft Disable Netbios Option impostata a 0x2

image

A riguardo si veda How to disable NetBIOS over TCP/IP by using DHCP server options.

Per ulteriori informazioni si vedano anche: