server message block (smb) is an application-level network protocol mainly applied to shared access to files, printers, serial ports, and miscellaneous communications between nodes on a network. it also provides an authenticated inter-process communication mechanism. it is mainly used by microsoft windows equipped computers, where it's known simply as "microsoft windows network".
smb(server message block)通信协议是微软(microsoft)和英特尔(intel)在1987年制定的协议,主要是作为microsoft网络的通讯协议。smb是在会话层(session layer)和表示层(presentation layer)以及小部分应用层(application layer)的协议。smb使用了netbios的应用程序接口 (application program interface,简称api)。另外,它是一个开放性的协议,允许了协议扩展——使得它变得更大而且复杂;大约有65个最上层的作业,而每个作业都超过120个函数,甚至windows nt也没有全部支持到,最近微软又把 smb 改名为 cifs(common internet ile system),并且加入了许多新的特色。
smb协议是基于tcp-netbios下的,一般端口使用为139,445.
smb是server message block的简写,这个协议用于共享文件,共享打印机,共享串口等用途。我们之所以能够在windows的网络邻居下访问一个域内的其他机器,就是通过这个协议实现的。
smb协议是一个很重要的协议,目前绝大多数的pc上都在运行这一协议,windows系统都充当着smb协议的客户端和服务器,所以smb是一个遵循客户机服务器模式的协议。smb服务器负责通过网络提供可用的共享资源给smb客户机,服务器和客户机之间通过tcp/ip协议、或者ipx协议、或者是netbeui进行连接(如下图)。一旦服务器和客户机之间建立了一个连接,客户机就可以通过向服务器发送命令完成共享操作,比如读,写,检索等。

在windows nt中smb基于nbt实现。 而在windows2000/xp/2003中,smb除了基于nbt的实现,还有直接通过445端口实现。 当win2000/xp/2003(允许nbt)作为client来连接smb服务器时,它会同时尝试连接139和445端口,如果445端口有响应,那么就发送rst包给139端口断开连接,以455端口通讯来继续.当445端口无响应时,才使用139端口。当win2000/xp/2003(禁止nbt)作为client来连接smb服务器时,那么它只会尝试连接445端口,如果无响应,那么连接失败。(注意可能对方是nt4.0服务器。) 如果win2000/xp/2003服务器允许nbt, 那么udp端口137, 138, tcp 端口 139, 445将开放。 如果 nbt 被禁止, 那么只有445端口开放。