# Server Message Block

Server Message Block (SMB) è un protocollo, usato soprattutto dai sistemi Microsoft Windows, principalmente per condividere file, stampanti, porte seriali e comunicazioni di varia natura tra diversi nodi di una rete. Esso include anche un meccanismo di comunicazione tra processi autenticata.

## Storia

SMB è stato inventato da Barry Feigenbaum presso la IBM, ma la versione più largamente usata è stata pesantemente modificata da Microsoft.
Originariamente, il protocollo venne studiato per operare al di sopra di NetBIOS, sebbene possa agire anche direttamente su TCP/IP a partire dall'implementazione in Windows 2000.
Nel momento in cui Sun Microsystems annunciò il WebNFS, Microsoft lanciò l'iniziativa, nel 1998, di chiamare SMB Common Internet File System (CIFS) ed incluse diverse migliorie, compreso il supporto ai link simbolici, la gestione di file di grosse dimensioni e la possibilità di operare senza alcun supporto di NetBIOS.
A causa dell'importanza del protocollo SMB, necessario all'interoperabilità con la piattaforma Microsoft Windows, nacque il progetto Samba, che rappresenta un'implementazione free usata per garantire compatibilità SMB con sistemi operativi non Microsoft.

## Implementazione
### Approccio Client-Server

SMB agisce con un approccio client-server, per cui un client avanza le sue richieste ed il server risponde opportunamente. Una sezione del protocollo è dedicata specificatamente all'accesso al file system, in modo che i client possano fare richieste al file server, ma ci sono altre sezioni specializzate per le comunicazioni tra processi. SMB è stato ottimizzato per l'uso in rete locale, ma può essere usato anche attraverso Internet.
I server SMB rendono il loro file system e le altre risorse disponibili ai client sulla rete. I client possono avere i loro propri dischi che non sono pubblicamente accessibili ed accedere comunque al file system condiviso e alle stampanti del server, e questa è la modalità primaria di utilizzo del protocollo.

### Prestazioni

Spesso SMB viene considerato un protocollo che richiede un pesante utilizzo di banda in quanto ogni client notifica la sua presenza con un broadcast all'intera rete. In realtà SMB non usa broadcast, esso viene usato da NetBIOS per localizzare i server disponibili ad intervalli periodici. Ciò è accettabile in reti con meno di 20 hosts, ma il traffico dovuto ai broadcast può creare problemi con l'aumentare del numero di macchine connesse. Tale problema può essere mitigato sfruttando WINS, un protocollo di localizzazione dei servizi: usa un sistema di registrazione e centralizzazione delle richieste di servizi più avanzato, ma implica una crescita nella complessità di manutenzione della rete.

### Modifiche di Microsoft

Con l'obiettivo di semplificare l'interfaccia di utilizzo del protocollo, Microsoft ha aggiunto diverse caratteristiche alla sua implementazione di SMB rispetto alla concezione originaria: ad esempio, la seconda versione di NTLM venne sviluppata perché la prima (derivata dalla originaria specifica di SMB) utilizzava la cifratura Data Encryption Standard (DES) in maniera troppo complessa.

### Punti di Interesse

Il meccanismo di comunicazione tra processi incluso in SMB merita una menzione speciale. Grazie ad esso sono fornite le named pipes, con cui è implementato il meccanismo di autenticazione e l'implementazione Microsoft del DCE/RPC (conosciuta come MSRPC).
SMB è anche usato come fondamento del Microsoft Distributed File System.

## Versioni ed implementazioni alternative

* Samba, è una implementazione libera del protocollo SMB e dell'estensione Microsoft; include un server e un client a riga di comando
* Samba TNG è un fork di Samba
* Linux include due implementazioni di client SMB che agiscono per mezzo del VFS, fornendo accesso al server SMB attraverso la API standard
* FreeBSD, NetBSD e MacOS includono implementazioni di client SMB per i rispettivi VFS
* Advanced Server for Unix (AS/U) è il port del codice del server SMB incluso in Windows NT 3.51 per Unix, venduto da AT&T ai maggiori distributori di Unix
* Cascade (meglio noto come PC-Netlink), di Sun Microsystem, è il port di AS/U: Sun impiego' due anni per rendere il codice usabile, a causa della scarsa qualità del porting originario
* Veritas Software ha implementato SMB
* Santa Cruz Operation ha a sua volta portato lo AS/U e sviluppato VisionFS, una implementazione di SMB non dipendente da quella Microsoft e sviluppata facendo riferimento a Samba
* Network Appliance ha la sua implementazione di server SMB
* Sharity, di Objective Development, è un client SMB per Unix
* JCIFS è una implementazione SMB in Java
* RTSMB è una implementazione SMB in ANSI C completamente scritta da zero, indipendente dall'implementazione Microsoft e Samba, e destinata ai sistemi embedded
* CIFS9000, di HP, è una implementazione SMB basata su Samba 2.2 prodotta per il proprio sistema operativo HP-UX