SMB, the Server Message Block Protocol, is the most
prevalent filesharing protocol on the planet for a very simple reason
-- it ships with every Microsoft Windows system and, like it or not,
Windows still owns the desktop. Windows is also very common as a server
platform in corporate networks. Not content with those markets, Windows
is now finding its way into all sorts of new places, including embedded
systems, palmtops, and consumer toys. As Windows moves onto new platforms,
SMB does too.
Open source operating systems like Linux have been speaking SMB for
quite a while now thanks to SAMBA, the well-known open source SMB
Server suite. SAMBA, like Windows server products, is primarily a
back-room tool. It runs on systems that are mounted in racks or stuck
onto shelves in locked server rooms where only the geeks are brave
enough to go. If Linux is going to move out of the datacenter and
onto the corporate desktop (not to mention homes, hand-helds, cars,
etc.), then Linux developers are going to need a working knowledge
of SMB -- the native language of the Microsoft Network Neighborhood.
In this article, we'll look into SMB's history and architecture,
as well as how its components work together. You'll also find a list
of open source projects that aim to make it easier to add SMB support
to Linux applications.
A Little History: NetBIOS
SMB was originally intended to run over a proprietary network system
co-developed by IBM and a company called Sytec. In a moment of obvious
inspiration, this system was dubbed "PC-Network." It had no support
for routing and could only handle a maximum of about 80 nodes. It
was truly LAN-locked.
PC-Network was a broadband LAN product consisting of network cards,
cables, and a small device driver known as NetBIOS (Network Basic
Input/Output System). The original PC-Network hardware is long gone,
having been replaced by Token Ring and then Ethernet. Unfortunately,
lots and lots of software was written for use with the NetBIOS Application
Programmer's Interface (API), so, even though the PC Network hardware
is no longer in use and the NetBIOS device driver is no longer needed,
the NetBIOS API has remained as a living artifact.
Instead of moving away from NetBIOS and letting it die an honorable
death, several vendors implemented the NetBIOS API on top of other
protocols, including DECnet, IPX/ SPX, SNA, and TCP/IP. NetBIOS over
TCP/IP is often called NBT and has become the preferred NetBIOS transport.
The workings of NBT are described in two Internet Engineering Task
Force (IETF) Request For Comment (RFC) documents, RFC1001 and RFC1002
(known collectively as Internet Standard #19). NBT is pictured in
Figure One.