I protocolli NetBEUI, NETBIOS e SMB


Introduzione

SMB

CIFS

NetBIOS e NetBEUI

I limiti

NetBIOS over TCP/IP

Cenni sulla sicurezza

Esempio di comunicazione NBT via Internet

INTRODUZIONE

Come per il TCP/IP iniziamo subito con un pò di chiarimenti per quel che riguarda i nomi e i ruoli di questa famiglia di protocolli. 
NetBEUI è l'acronimo di "NetBios Extended User Interface", cioè, interfaccia utente estesa di NetBIOS. 
NetBIOS a sua volta significa "Network Basic Input Output System", ossia, sistema input/output di base di rete.
Infine SMB sta per "Server Message Block", blocco messaggio server. Ora guardiamo in modo più chiaro il ruolo di ognuno di questi protocolli aiutandoci con la figura seguente.  Con l'aiuto della figura chiariamo subito la differenza tra NetBIOS e NetBEUI.

Modello OSI NetBEUI NetBIOS over TCP/IP TCP/IP
applicazione

SMB

SMB

FTP, SMTP, TELNET, ecc.

presentazione
sessione

NetBEUI

NetBIOS

trasporto

TCP, UDP

TCP, UDP

rete IP ICMP IP ICMP
data link

indipendente dai protocolli superiori

fisico

Più che un protocollo, il NetBIOS, che lavora al livello Sessione, è un'API, cioè un'interfaccia di programmazione che, attraverso un set di comandi standard, unisce l'SMB con i protocolli di trasporto ed instradamento sottostanti, come TCP/IP o IPX/SPX.

NetBEUI è invece un protocollo, ed ingloba in modo nativo sia l'interfaccia NetBIOS, sia una semplice funzionalità di trasporto, il livello di trasporto del NetBEUI implementa il protocollo OSI LLC2. Quindi, mentre il NetBIOS può lavorare solo se è abbinato ad un protocollo di trasporto, NetBEUI non ha bisogno ne di protocolli di trasporto ne di interfacce verso SMB.

SMB

Partiamo dall'SMB. Creato dall'IBM a metà dagli anni 80 e successivamente adottato e modificato dalla Microsoft, si tratta di un importante protocollo, la cui implementazione è presente in quasi tutti i sistemi Windows.

Come si vede dalla figura precedente, si tratta del protocollo di più alto livello, al di sotto del quale si può trovare il NetBEUI oppure il NetBIOS (quest'ultimo a sua volta su un protocollo di trasporto quale il TCP/IP o l'IPX/SPX).

Il suo funzionamento è client-server, del tipo richiesta-risposta, dove il server è quel sistema che rende disponibili le proprie risorse condivise al client. I messaggi di richiesta e di risposta tra il client e il server sono detti (guardacaso) SMB.

Essenzialmente il lavoro di questo protocollo è quello di rendere possibile la condivisione di file e stampanti, incluse tutte le operazioni che comunemente vengono fatte su queste risorse (per es: aprire, chiudere, leggere, scrivere, creare, cancellare...). Come dicevamo, ad ognuna di queste operazioni corrisponde un certo messaggio SMB (open, read, write, close...). SMB è anche il responsabile del tanto comodo quanto problematico "browsing" delle risorse di rete.

Fa anche parte del protocollo SMB quel particolare elemento che permette di disporre delle risorse remote come se fossero locali. Il nome di questo componente è "redirector". Tramite il redirector ad esempio, è possibile vedere un disco di un altro computer come se fosse un disco sul proprio computer.

Per adattare meglio l'SMB ai vari ambienti sotto cui può lavorare, sono state create diverse varianti di questo protocollo. Per questo, quando due computer iniziano una connessione SMB, la prima cosa che viene fatta è decidere quale variante usare. Il modo per mettersi d'accordo è di inviare come primo messaggio, un SMB particolare chiamato "negprot" (negozia protocollo), che contiene le varianti conosciute dal mittente. Il ricevente risponderà indicando una certa variante oppure, se non ne conosce nessuna tra quelle elencate dal mittente, risponderà con un numero speciale che indica l'errore. Successivamente ha luogo l'autenticazione, che avviene spedendo al server un nome utente e una password. In questo caso l'SMB usato è "sesssetupX". Se il login ha successo, viene inviato come risposta al richiedente un numero, l'UID, che dovrà essere reinviato al server in tutte le successive connessioni con esso. Infine, per accedere ad una risorsa condivisa, si fa uso dell'SMB "tconX" a cui segue in risposta un altro numero, il TID da usare in modo analogo all'UID nei successivi accessi a quella risorsa.

Il protocollo SMB è in grado di gestire due livelli di sicurezza: share e user. In modalità share viene associata una password ad ogni risorsa condivisa. Viene permesso l'accesso anche a tutti i file presenti all'interno della risorsa. In modalità user, il client deve essere innanzi tutto autenticato dal server tramite una coppia utente-password indipendenti dalle risorse che l'utente vorrà usare. L'accesso alla risorsa è deciso in base ai privilegi che il client possiede. Si definisce dominio, un insieme di computer, in cui la gestione della sicurezza è affidata ad un'entità centrale, chiamata PDC, primary domain controller, controllore primario del dominio, al cui fianco possono esserci controller secondari di backup. Il PDC contiene ad esempio i nomi dei client, le relative password, il gruppo di appartenenza ecc. .

Le comunicazioni con il livello inferiore (NetBEUI o NetBIOS) avvengono tramite particolari strutture dati di 64 byte, chiamate NCB, cioè "Network Control Block", blocco di controllo di rete. Attraverso le NCB passano le richieste e le risposte SMB. Il metodo consiste nel caricare opportunamente queste strutture dati con tutte le informazioni necessarie (codice del comando, nomi NetBIOS, puntatori e parametri vari). L'accesso alle NCB può essere asincrono, se il controllo ritorna subito al programma, o sincrono, se invece il programma attende il completamento dell'operazione specificata.

CIFS

CIFS, o Common Internet File System, è una novità su cui sta lavorando Microsoft insieme ad altre società. Si tratta di un protocollo basato su SMB, ma orientato verso Internet e mira ad aggiungersi ai sistemi classici di accesso ai file (FTP, HTTP, NFS). Le specifiche sono aperte: l'intento è che diventino un RFC e vengano implementate su tutte le piattaforme, incluse quelle Microsoft e Unix. I vantaggi dichiarati consisterebbero in un accesso multiplo in scrittura ai file senza perdita di integrità, robustezza, buona velocità, sicurezza negli accessi, supporto dei caratteri in formato Unicode, uso di nomi con significatività globale per i file.

NETBIOS e NETBEUI

Il NetBIOS ed il NetBEUI sono stati sviluppati rispettivamente nel 1983, dalla Sytek per IBM, e nel 1985 da IBM. Ancora oggi restano molto diffusi nei sistemi Microsoft, in virtù dei loro pregi nell'ambito delle reti locali.

Per essere più precisi, l'implementazione del NetBEUI nei sistemi Microsoft differisce dalle ultime versioni del NetBEUI standard (NetBEUI 3.0) per alcuni aspetti, pur preservandone la compatibilità. Ad esempio, il NetBEUI di Microsoft, chiamato NBF (NetBIOS Frame), presenta alcune migliorie rispetto al protocollo standard, ed invece di interfacciarsi con i livelli superiori tramite il consueto NetBIOS, utilizza un'altra interfaccia più flessibile, chiamata TDI, Transport Driver Interface, cioè interfaccia del dispositivo di trasporto.

All'epoca, l'obiettivo era infatti quello di creare un protocollo su misura per le LAN di dimensioni contenute (fino a circa 200 nodi), quindi doveva essere piccolo, semplice, veloce e doveva permettere di assegnare nomi "umani" alle risorse, invece dei "complessi" indirizzi usati dal TCP/IP. Inoltre NetBIOS è stato progettato perchè usasse intensamente i broadcast (messaggi uno a tutti), piuttosto che interrogare un'entità centralizzata. In questa logica, un computer che in seguito all'accensione voglia registrarsi con il proprio nome NetBIOS come nuovo nodo, deve inviare appositi messaggi broadcast per farsi accettare come nuovo nodo attivo. Se il nome è già usato, il precedente possessore di quel nome deve inviare un messaggio di risposta per respingere la scelta. Se invece un computer vuole localizzare un nodo preesistente, invierà ancora altri broadcast nel tentativo di contattare quello specifico nodo. Il computer remoto è sempre tenuto a rispondere ai broadcast con un messaggio unicast (uno a uno). Solo successivamente i due computer potranno comunicare senza usare broadcast.

I nomi usati da NetBIOS sono fatti di 16 caratteri alfanumerici e possono essere di due tipi: ci sono i nomi unici, che come dice il nome, possono essere usati per identificare al più una sola risorsa in rete, ed i nomi di gruppo che invece si associano a più nomi unici. In ambiente Windows, un nome unico può individuare sia un computer della rete, sia anche un servizio offerto da un computer (una certa applicazione o una funzionalità particolare), ma dato che NetBIOS non dispone dei numeri di porte, come quelle del TCP/IP, per poter identificare queste funzionalità viene riservato il 16esimo carattere, che diventa un suffisso e quindi limita il nome a soli 15 caratteri. Ecco una lista dei suffissi usati da Microsoft.

Name_______________Number______Type_______Service
=======================================================================
<computername>________00________U_________Workstation Service
<computername>________01________U_________Messenger Service
<__MSBROWSE_> _______01________G_________Master Browser
<computername>________03________U_________Messenger Service
<computername>________06________U_________RAS Server Service
<computername>________1F________U_________NetDDE Service
<computername>________20________U_________File Server Service
<computername>________21________U_________RAS Client Service
<computername>________22________U_________Exchange Interchange
<computername>________23________U_________Exchange Store
<computername>________24________U_________Exchange Directory
<computername>________30________U_________Modem Sharing Server Service
<computername>________31________U_________Modem Sharing Client Service
<computername>________43________U_________SMS Client Remote Control
<computername>________44________U_________SMS Admin Remote Control Tool
<computername>________45________U_________SMS Client Remote Chat
<computername>________46________U_________SMS Client Remote Transfer
<computername>________4C________U_________DEC Pathworks TCPIP Service
<computername>________52________U_________DEC Pathworks TCPIP Service
<computername>________87________U_________Exchange MTA
<computername>________6A________U_________Exchange IMC
<computername>________BE________U_________Network Monitor Agent
<computername>________BF________U_________Network Monitor Apps
<username> ___________03________U_________Messenger Service
<domain> _____________00________G_________Domain Name
<domain> _____________1B________U_________Domain Master Browser
<domain> _____________1C________G_________Domain Controllers
<domain> _____________1D________U_________Master Browser
<domain> _____________1E________G_________Browser Service Elections
<INet~Services> _______1C________G_________Internet Information Server
<IS~Computer_name>___00________U_________Internet Information Server
<computername>_______[2B]_______U_________Lotus Notes Server
IRISMULTICAST ________[2F]_______G_________Lotus Notes
IRISNAMESERVER ______ [33]_______G_________Lotus Notes
Forte_$ND800ZA _______[20]_______U_________DCA Irmalan Gateway Service

Numero = suffisso, in esadecimale
U = nome unico
G = nome gruppo
Se volete vedere la tabella dei servizi NetBIOS presenti in un computer, lanciate da una shell Dos il comando
nbtstat -a <nome del computer>
oppure
nbtstat -A <indirizzo IP del computer>

il perché si possa usare un IP in ambiente NetBIOS sarà più chiaro dopo aver letto la sezione 'NetBIOS over TCP/IP'.

Per evitare che ogni nodo debba contenere una copia completa della lista dei nomi registrati e delle relative risorse condivise, viene eletto tra i computer un Browse Master, a cui verrà affidata una unica lista. In generale l'elezione del browse master viene vinta dai sistemi di classe "superiore", come sistemi NT o macchine Linux su cui gira Samba (un server smb). Se c'è un Primary Domain Controller, sarà questo il browse master del dominio controllato. Tra sistemi Win9x, si può decidere manualmente chi sarà il browse master andando nel computer prescelto e selezionando: Pannello di Controllo->Rete->Condivisione file e stampanti-> Browse Master->attivato.

Le comunicazioni sono di tre tipi: sessioni, datagrammi, broadcast. Le sessioni si usano per scambiare con un altro nodo rilevanti quantità di dati con rilevamento e correzione d'errore. I datagrammi per inviare ad uno o più nodi (quando il destinatario è un gruppo) messaggi di dimensioni modeste ma senza dover stabilire una sessione. I broadcast infine, si usano per comunicare messaggi di dimensioni modeste a tutti i nodi in ascolto. In sessione è possibile inviare fino a 64Kb di dati per messaggio. Con i datagrammi si è limitati a 512byte per messaggio ed inoltre non si ha la garanzia che i dati arrivino. Tuttavia, negli ambiti in cui queste limitazioni non costituiscono un problema insormontabile, lavorare con i datagrammi rimane molto semplice e veloce.

Per separare il traffico in una stessa rete è stata sviluppata un'apposita funzionalità, chiamata "NetBIOS Scope ID". Si tratta di una stringa di caratteri aggiunta alla fine del nome. Due computer devono avere lo stesso scope ID per comunicare. Usando questa funzione è possibile ad esempio assegnare lo stesso nome a due nodi, se questi possiedono uno scope ID differente. In Windows9x per configurare lo scope ID, se avete un server WINS, bisogna andare in Pannello di Controllo->Rete->Tcp/Ip->Proprietà->Wins->area di validità ID. In mancanza di un server WINS si può modificare il registro di Windows con il programma regedit.exe. Fate attenzione a non usare regedit con troppa leggerezza, perchè se non si sta attenti è facile creare seri problemi. La chiave da trovare è: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VXD\MSTCP. Lo scope ID si aggiunge cliccando su modifica, poi nuovo, stringa e scrivere "ScopeID" (senza apici). Poi fare doppio click su questo nome e aggiungere come valore lo ScopeID prescelto.

I limiti

La diffusione di Internet ha messo subito in luce quali sono i limiti di NetBIOS e del suo socio NetBEUI quando la rete cresce di dimensioni.

Tralasciando problemi seri ma non insormontabili come il degrado prestazionale sulle WAN legato all'uso dei broadcast, rimangono tuttavia altri problemi di non facile soluzione: innanzitutto c'è il problema dell'unicità nomi. Dato che due computer non possono usare due nomi uguali nella stessa rete, bisognerebbe trovare un nome diverso per ogni computer connesso, cosa non banale in una rete geografica. In secondo luogo, sempre a causa dei nomi, NetBEUI non permette il routing. Cioè, dato un nome NetBIOS, è impossibile sapere quale sia la strada per raggiungerlo. Così, non possiamo sapere se il computer a cui vogliamo collegarci sia nel palazzo accanto o in un altro continente. Il problema in questo caso risiede nel fatto che i nomi NetBIOS non contengono alcuna informazione gerarchica. Per portare un esempio di nomi gerarchici basta prendere il TCP/IP, i cui nomi sono gerarchici da sinistra a destra: indirizzi del tipo xxx.yyy.zzz.www, si possono pensare come indirizzi postali del tipo: stato.città.strada.casa. Quando la rete diventa Internet, è immediato rendersi conto che un indirizzo IP sia molto più comodo e molto più versatile di un nome normale (nb: i nomi dei siti Internet corrispondono ad indirizzi IP e non sono nomi NetBIOS. Grazie ai server DNS infatti, collegandosi con ftp.microsoft.com è esattamente come collegarsi a 198.105.232.1). Un ultimo problema, forse il più importante, è che i router di Internet non permettono il propagarsi dei broadcast, tanto cari al NetBIOS quando cerca di localizzare un nodo.

Per dire tutto in tre parole: NetBIOS non scala.

Per evitare che il NetBIOS affondasse, invece di navigare in Internet, tornò molto comodo a Microsoft il fatto di poter abbinare l'interfaccia NetBIOS ad un protocollo molto più flessibile del NetBEUI, come il TCP/IP, e limitando l'impiego del NetBEUI nell'ambito delle reti locali tra sistemi Microsoft. In questo modo ogni messaggio elaborato da NetBIOS viene incapsulato in un messaggio TCP/IP, che non soffre delle limitazioni di cui parlavamo prima. Chiaramente i problemi non spariscono in modo indolore, anzi sorgono nuove complicazioni, e quello che la Microsoft ne tirò fuori fu una versione distorta di Internet, dove il DNS diventa WINS, e HOSTS diventa LMHOSTS. Vediamo un pò cosa è successo.

NetBIOS over TCP/IP

Per rendere possibile l'interfacciamento tra NetBIOS e TCP/IP è necessario che NetBIOS legga nomi, mentre TCP/IP deve leggere numeri. Ecco che nasce il "NetBIOS over TCP/IP", chiamato anche NBT, descritto negli RFC 1001 e 1002. Esso è in grado di lavorare su reti geografiche, basandosi su associazioni tra nomi NetBIOS e indirizzi IP fornitegli dall'esterno.

Iniziamo col dire che i nodi, in ambiente NBT, possono operare seguendo quattro modalità standard:

Una volta ricavati gli indirizzi IP al posto dei nomi, si possono aggirare i limiti descritti in precedenza ed è così possibile contattare nodi remoti.

I client Microsoft usano un sistema leggermente più complicato. Consultano in ordine: una cache interna, il server WINS se presente, poi fanno broadcast, e per finire leggono file LMHOSTS.

LMHOSTS è simile al file HOSTS delle macchine UNIX. E' un file da editare manualmente contenente, come una specie di server WINS statico, coppie di nomi_NetBIOS-indirizzi_IP. Torna utile se non non si dispone di nessun server WINS e non si riesce a risolvere un nome remoto tramite broadcast perchè il nodo è al di la di uno o più router. In realtà LMHOSTS può tornare utile anche se il destinatario risiede nella stessa rete locale. Infatti, per non essere obbligati a subire una marea di broadcast sulla propria rete, è possibile precaricare le associazioni del file LMHOSTS più usate nella cache, semplicemente mettendo alla fine di ogni linea un tag: "#PRE" (senza apici). Il file LMHOSTS si trova in genere in C:\Windows. Se non l'avete mai usato avrà estensione .sam (cioè sample ossia esempio), per renderlo attivo dovete togliere il .sam. Nel file d'esempio, c'è anche una lista di tutti gli altri tag utilizzabili, con la relativa spiegazione.

Cenni sulla sicurezza

Nel protocollo TCP/IP, per stabilire una comunicazione, è necessario definire le porte a cui inviare le richieste. NBT usa perlopiù le seguenti porte:

137: risoluzione dei nomi NetBIOS (UDP)
138, 139: datagrammi (UDP)
139: sessioni (TCP)

Ricordo che per evitare che le proprie cartelle siano accessibili dall'esterno è bene togliere il binding tra TCP/IP di Accesso Remoto e Condivisione file e stampanti. Nella tabella di qualche pagina fa questo corrisponde al servizio con codice n.20 (File Server Service). Per restare in tema di sicurezza, tra le varie opzioni del TCP/IP di Accesso Remoto, c'è un'opzione chiamata "attiva NetBIOS su TCP/IP" che però nelle ultime versioni di Win95 e in Win98 non è deselezionabile. Questo non è comunque un grande rischio se avete tolto il binding di cui parlavo prima. L'unica cosa visibile dall'esterno sarà al massimo il nome del computer ed il vostro gruppo di lavoro, che in genere non rappresentano un grande problema di sicurezza (specialmente se il nome è qualcosa del tipo MIOPC1 e il gruppo è MIOGRUPPO!). Se invece avete la necessità di rendere accessibili le vostre cartelle a qualcun'altro su Internet, ricordatevi che non c'è nulla come una buona password! Per non attrarre i lamer di passaggio potete anche nasconderle mettendo il carattere "$" (senza apici) in fondo al nome della risorsa condivisa, tuttavia questa soluzione non è sicura se usata come unica difesa.

Se però avete serie esigenze di sicurezza e volete togliere le 3 porte NetBIOS 137, 138, 139, vi consiglio caldamente di tagliare la testa al toro installando un buon firewall.

Esempio di comunicazione NBT via Internet

Ricapitoliamo ciò che è stato detto finora portando un esempio di comunicazione NBT via Internet. Supponiamo di conoscere un computer che permetta l'accesso alle sue risorse condivise via Internet (cioè con la porta 139 aperta e con il TCP/IP di Internet in binding al servizio di condivisione). Per collegarci possiamo aggiungere al file LMHOSTS la linea
xxx.yyy.zzz.www <...un pò di spazi...> NOMECOMPUTER <...un pò di spazi...> #PRE

dove xxx.yyy.zzz.www è l'IP di quel computer e NOMECOMPUTER è il suo nome NetBIOS (scopribile con nbtstat -A <indirizzo IP>). Nota: in qualche caso avrete bisogno di collegarvi, non tanto al nodo bensì ad un suo servizio. La linea da aggiungere è simile, ma il nome finisce con uno dei caratteri esadecimali visti in precedenza e specificabile con il tag \0x e tutto racchiuso tra virgolette, per esempio:
xxx.yyy.zzz.www "NOMECOMPUTER \0x20" #PRE

per vedere le risorse condivise da quel nodo si può lanciare da una shell di Dos il comando
net view \\NOMECOMPUTER

e per installare una risorsa tra quelle elencate, come se fosse un drive del proprio computer
net use x: \\NOMECOMPUTER\RISORSA

dove "x:" è la lettera dell'unità che conterrà la risorsa (non mettete una lettera già in uso).

Rielaborazione a cura del prof. Giuseppe Spalierno - Ultima versione: gennaio 2003