Modello di risoluzione dei nomi
Uno spazio dei nomi fa riferimento ad alcune funzionalità per associare (come minimo) il protocollo e gli attributi di indirizzamento di un servizio di rete a uno o più nomi descrittivi. Molti spazi dei nomi sono attualmente in uso a livello generale, tra cui Domain Name System (DNS) di Internet, Servizi di dominio Active Directory, il bindery, NetWare Directory Services (NDS) di Novell e X.500. Questi spazi dei nomi variano notevolmente nella modalità di organizzazione e implementazione. Alcune delle relative proprietà sono particolarmente importanti da comprendere dal punto di vista della risoluzione dei nomi winsock.
Tipi di spazi dei nomi
Esistono tre diversi tipi di spazi dei nomi in cui è possibile registrare un servizio:
- Dinamico
- Statico
- Persistente
Gli spazi dei nomi dinamici consentono ai servizi di registrarsi con lo spazio dei nomi in tempo reale e per consentire ai client di individuare i servizi disponibili in fase di esecuzione. Gli spazi dei nomi dinamici si basano spesso sulle trasmissioni per indicare la disponibilità continua di un servizio di rete. Gli esempi meno recenti di spazi dei nomi dinamici includono lo spazio dei nomi SAP (Service Advertising Protocol) usato all'interno di un ambiente NetWare e lo spazio dei nomi NBP (Name Binding Protocol) usato da AppleTalk. Lo spazio dei nomi PNRP (Peer Name Resolution Protocol) usato in Windows è un esempio più recente di uno spazio dei nomi dinamico.
Gli spazi dei nomi statici richiedono che tutti i servizi vengano registrati in anticipo, ovvero quando viene creato lo spazio dei nomi. Un esempio di spazio dei nomi statico è costituito dagli host , dal protocollo e dai servizi usati dalla maggior parte delle implementazioni TCP/IP. In Windows questi file si trovano in genere nella cartella C:\windows\system32\drivers\etc.
Gli spazi dei nomi permanenti consentono ai servizi di registrarsi con lo spazio dei nomi in tempo reale. A differenza degli spazi dei nomi dinamici, tuttavia, gli spazi dei nomi permanenti mantengono le informazioni di registrazione nell'archiviazione non volatile in cui rimane fino a quando il servizio non richiede la rimozione. Gli spazi dei nomi persistenti vengono digitati da servizi directory come X.500 e NDS (Servizio directory NetWare). Questi ambienti consentono l'aggiunta, l'eliminazione e la modifica delle proprietà del servizio. Inoltre, l'oggetto servizio che rappresenta il servizio all'interno del servizio directory potrebbe avere un'ampia gamma di attributi associati al servizio. L'attributo più importante per le applicazioni client è costituito dalle informazioni di indirizzamento del servizio. DNS è un altro esempio di uno spazio dei nomi persistente. Anche se esiste un modo programmatico per risolvere i nomi DNS usando Windows Sockets, il provider di spazi dei nomi DNS in Windows non supporta la registrazione di nuovi nomi DNS usando Winsock. È necessario usare direttamente le funzioni DNS per registrare i nomi DNS. Per altre informazioni, vedere informazioni di riferimento su DNS.
Organizzazione dello spazio dei nomi
Molti spazi dei nomi sono disposti gerarchicamente. Alcuni, ad esempio X.500 e NDS, consentono l'annidamento illimitato. Altri consentono di combinare i servizi in un singolo livello di gerarchia o gruppo. Questo viene in genere definito gruppo di lavoro . Quando si costruisce una query, è spesso necessario stabilire un punto di contesto all'interno di una gerarchia di spazi dei nomi da cui inizierà la ricerca.
Architettura del provider di spazi dei nomi
Naturalmente, le interfacce a livello di codice usate per eseguire query sui vari tipi di spazi dei nomi e registrare le informazioni all'interno di uno spazio dei nomi (se supportato) differiscono notevolmente. Un provider di spazi dei nomi è un componente software residente in locale che sa come eseguire il mapping tra lo spazio dei nomi Winsock SPI e alcuni spazi dei nomi esistenti (che possono essere implementati localmente o accessibili tramite la rete). L'architettura del provider dello spazio dei nomi è illustrata nel modo seguente:
Si noti che è possibile che uno spazio dei nomi specifico, ad esempio DNS, abbia più di un provider di spazi dei nomi installato in un determinato computer.
Come accennato in precedenza, il termine generico servizio fa riferimento alla metà del server di un'applicazione client/server. In Winsock un servizio è associato a una classe di servizio e ogni istanza di un determinato servizio ha un nome di servizio che deve essere univoco all'interno della classe del servizio. Esempi di classi di servizio includono FTP Server, SQL Server, XYZ Corp. Employee Info Server e così via. Come illustrato nell'esempio, alcune classi di servizio sono note, mentre altre sono univoche e specifiche di una particolare applicazione verticale. In entrambi i casi, ogni classe di servizio è rappresentata sia da un nome di classe che da un identificatore di classe. Il nome della classe non deve necessariamente essere univoco, ma l'identificatore della classe deve essere . Gli identificatori univoci globali (GUID) vengono usati per rappresentare gli identificatori della classe del servizio. Per i servizi noti, i nomi di classe e gli identificatori di classe (GUID) sono stati preallocati e le macro sono disponibili per la conversione tra, ad esempio, i numeri di porta TCP (in ordine di byte host) e i GUID dell'identificatore di classe corrispondenti. Per altri servizi, lo sviluppatore sceglie il nome della classe e usa l'utilità Uuidgen.exe per generare un GUID per l'identificatore di classe.
Il concetto di classe di servizio esiste per consentire la definizione di un set di attributi che vengono mantenuti in comune da tutte le istanze di un determinato servizio. Questo set di attributi viene fornito al momento della definizione della classe del servizio in Winsock e viene definito informazioni sullo schema della classe del servizio. Quando un servizio viene installato e reso disponibile in un computer host, tale servizio viene considerato 'istanza die il relativo nome del servizio viene usato per distinguere una particolare istanza del servizio da altre istanze che possono essere note allo spazio dei nomi .
Si noti che l'installazione di una classe di servizio deve essere eseguita solo nei computer in cui viene eseguito il servizio, non in tutti i client che possono utilizzare il servizio. Laddove possibile, il Ws2_32.dll fornisce informazioni sullo schema della classe del servizio a un provider di spazi dei nomi al momento della registrazione di un'istanza di un servizio o all'avvio di una query del servizio. Il Ws2_32.dll non archivia naturalmente queste informazioni, ma tenta di recuperarlo da un provider di spazi dei nomi che ha indicato la possibilità di fornire questi dati. Poiché non esiste alcuna garanzia che l'Ws2_32.dll possa fornire lo schema della classe del servizio, i provider di spazi dei nomi che necessitano di queste informazioni devono avere un meccanismo di fallback per ottenerlo tramite mezzi specifici dello spazio dei nomi.
Come indicato in precedenza, Internet ha adottato ciò che può essere definito un modello di servizio incentrato sull'host. Le applicazioni che devono individuare l'indirizzo di trasporto di un servizio devono in genere risolvere l'indirizzo di un host specifico noto per ospitare il servizio. A questo indirizzo aggiungono il numero di porta noto e quindi creano un indirizzo di trasporto completo. Per facilitare la risoluzione dei nomi host, è stato preallocato un identificatore di classe del servizio speciale (SVCID_HOSTNAME). Una query che specifica SVCID_HOSTNAME come classe del servizio e specifica un nome host per il nome dell'istanza del servizio restituirà informazioni sull'indirizzo host se la query ha esito positivo.
In Windows Sockets 2, le applicazioni indipendenti dal protocollo devono evitare la necessità di comprendere i dettagli interni di un indirizzo di trasporto. Pertanto, la necessità di ottenere prima un indirizzo host e quindi aggiungere nella porta è problematica. Per evitare questo problema, le query possono includere anche il nome noto di un determinato servizio e il protocollo su cui opera il servizio, ad esempio FTP su TCP. In questo caso, una query con esito positivo restituisce un indirizzo di trasporto completo per il servizio specificato nell'host indicato e l'applicazione non è necessaria per controllare gli interni di una struttura sockaddr.
Il sistema dei nomi di dominio di Internet non dispone di mezzi ben definiti per archiviare le informazioni sullo schema della classe del servizio. Di conseguenza, i provider di spazi dei nomi DNS per Winsock possono contenere solo servizi TCP/IP noti per i quali è stato preallocato un GUID della classe di servizio.
In pratica, questa non è una limitazione grave perché i GUID della classe di servizio sono stati preallocati per l'intero set di porte TCP e UDP e le macro sono disponibili per recuperare il GUID associato a qualsiasi porta TCP o UDP con la porta espressa in ordine di byte host. Di conseguenza, tutti i servizi familiari, ad esempio HTTP, FTP, Telnet, Whois e così via, sono ben supportati.
Continuando con l'esempio della classe di servizio, i nomi di istanza del servizio FTP possono essere "alder.intel.com" o "ftp.microsoft.com" mentre un'istanza di XYZ Corp. Employee Info Server potrebbe essere denominata "XYZ Corp. Employee Info Server version 3.5".
Nei primi due casi, la combinazione del GUID della classe di servizio per FTP e il nome del computer (fornito come nome dell'istanza del servizio) identificano in modo univoco il servizio desiderato. Nel terzo caso, il nome host in cui risiede il servizio può essere individuato in fase di query del servizio, pertanto il nome dell'istanza del servizio non deve includere un nome host.
Argomenti correlati