Ti faccio subito un esempio tecnico, così magari mi dici se ti è chiaro.
Il DNS fa risoluzione nome_pc - IP, e fin qui è semplice. Ma se andiamo nel dettaglio tutti i nomi associati a identificativi o servizi relativi alla rete, il servizio di risoluzione è gestito in maniera unificata da un insieme di routine fornite con le librerie del C, detto resolver.
In sostanza i programmi hanno a disposizione un insieme di funzioni di libreria con cui chiamano il resolver, indicate con le frecce nere. Ricevuta la richiesta è quest'ultimo che, sulla base della sua configurazione, esegue le operazioni necessarie a fornire la risposta, che possono essere la lettura delle informazioni mantenute nei relativi file statici presenti sulla macchina, una interrogazione ad un DNS (che a sua volta, per il funzionamento del protocollo, può interrogarne altri) o la richiesta ad altri server per i quali sia fornito il supporto, come LDAP.
Con il tempo però è divenuto possibile fornire diversi sostituti per l'utilizzo delle associazione statiche. Oltre alla risoluzione dei nomi a dominio ci sono anche altri nomi da risolvere, come quelli che possono essere associati ad una rete (invece che ad una singola macchina) o ai gruppi di macchine definiti dal servizio NIS (Network Information Service creato da Sun), o come quelli dei protocolli e dei servizi che sono mantenuti nei file statici. Molte di queste informazioni non si trovano su un DNS, ma in una rete locale può essere molto utile centralizzare il mantenimento di alcune di esse su opportuni server. Inoltre l'uso di diversi supporti possibili per le stesse informazioni (ad esempio il nome delle macchine può essere mantenuto sia tramite /etc/hosts, che con il DNS, che con NIS) comporta il problema dell'ordine in cui questi vengono interrogati.
Per risolvere questa serie di problemi, la risoluzione dei nomi a dominio eseguita dal resolver è stata inclusa all'interno di un meccanismo generico per la risoluzione di corrispondenze fra nomi ed informazioni ad essi associate chiamato Name Service Switch. Il Name Service Switch (cui spesso si fa riferimento con l'acronimo NSS) è un sistema di librerie dinamiche che permette di definire in maniera generica sia i supporti su cui mantenere i dati di corrispondenza fra nomi e valori numerici, sia l'ordine in cui effettuare le ricerche sui vari supporti disponibili. Il sistema prevede una serie di possibili classi di corrispondenza, come ad esempio queste che ti riporto da uno dei SRV Unix Solaris che uso come DNS in un progetto:
Classe Tipo di corrispondenza
shadow corrispondenze fra username e proprietà dell'utente (uid, ecc.).
group corrispondenze fra nome del gruppo e proprietà dello stesso.
aliases alias per la posta elettronica
ethers corrispondenze fra numero IP e MAC address della scheda di rete.
hosts corrispondenze fra nome a dominio e numero IP.
netgroup corrispondenze gruppo di rete e macchine che lo compongono.
networks corrispondenze fra nome di una rete e suo indirizzo IP.
protocols corrispondenze fra nome di un protocollo e relativo numero identificativo.
rpc corrispondenze fra nome di un servizio RPC e relativo numero identificativo.
services corrispondenze fra nome di un servizio e numero di porta
Il sistema del Name Service Switch è controllato dal contenuto del file /etc/nsswitch.conf; questo contiene una riga di configurazione per ciascuna di queste classi, che viene inizia col nome di tab. seguito da un carattere “:” e prosegue con la lista dei servizi su cui le relative informazioni sono raggiungibili, scritti nell'ordine in cui si vuole siano interrogati.