伺服器訊息區塊(Server Message Block,縮寫為SMB),又稱網路文件共享系統(Common Internet File System,縮寫為CIFS, /ˈsɪfs/),一种應用層网络传输协议,由微软开发,主要功能是使网络上的机器能夠共享计算机文件、打印机、串行端口和通讯等资源。它也提供经认证的行程間通訊机能。它主要用在装有Microsoft Windows的机器上,在这样的机器上被称为Microsoft Windows Network。
此條目需要更新。 (2017年5月14日) |
经过Unix服务器厂商重新开发后,它可以用于连接Unix服务器和Windows客户机,执行打印和文件共享等任务。
與功能類似的网络文件系统(NFS)相比,NFS的消息格式是固定长度,而CIFS的消息格式大多数是可变长度,這增加了协议的复杂性。CIFS消息一般使用NetBIOS或TCP协议傳送,分别使用不同的端口139或445,目前倾向于使用445端口。CIFS的消息包括一个信头(32字节)和消息体(1个或多个,可变长)。
特性
SMB可以以不同方式运行在会话层或者更低的网络层之上:
- 通过使用 NetBIOS API, 它可以运行在几种不同的 transports:[2]
- 基于 UDP ports 137, 138 & TCP ports 137, 139 (NetBIOS over TCP/IP);
- 基于一些传统协议,例如 NBF (incorrectly referred to as NetBEUI[原創研究?]).
SMB的 "进程间通信" (IPC) 系统提供 命名管道 机制,它使得程序员可以方便的实现继承认证(客户端第一次连接SMB服务获取认证信息后)。
一些服务的操作基于命名管道机制, 例如那些 Microsoft 内部实现的基于SMB的 DCE/RPC, 被称为基于SMB的 MSRPC, 同时允许 MSRPC 客户端程序 处理认证过程(借助SMB服务提供的认证服务实现), 但是只在MSRPC客户端程序上下文中有效。
SMB 签名: Windows NT 4.0 Service Pack 3 及后续版本提供了基于数字签名的SMB连接机制。常用的官方术语叫做“SMB 签名”。其他被同时被使用的官方术语有
Server Message Block version 2 (SMB2) 旨在通过将SMB signals合并为一个数据包来减轻这个性能限制[來源請求]。
SMB 支持 机会锁 — 一种特殊的锁机制 — 来提升性能。
SMB 服务是 Microsoft's Distributed File System 实现的基础.
历史
SMB最初是IBM的贝瑞·费根鲍姆(Barry Feigenbaum)研制的,其目的是将DOS操作系统中的本地文件接口“中断13”改造为网络文件系统。后来微软对这个发展进行了重大更改,这个更改后的版本也是最常见的版本。微软将SMB协议与它和3Com一起发展的网络管理程序结合在一起,并在Windows for Workgroups和后来的Windows版本中不断加入新的功能。
SMB一开始的设计是在NetBIOS协议上运行的(而NetBIOS本身则运行在NetBEUI、IPX/SPX或TCP/IP协议上),Windows 2000引入了SMB直接在TCP/IP上运行的功能。在这里我们必须区分SMB协议和运行在这个协议上的SMB业务,以及NetBIOS和使用SMB作为认证隧道的DCE/RPC业务。此外我们还要区分主要(但不仅仅)直接使用NetBIOS数据报的“网络邻居”协议。
1996年,约于升阳推出WebNFS的同时[7],微软提出将SMB改称为Common Internet File System[8]。此外微软还加入了许多新的功能,比如符号链接、硬链接、提高文件的大小。微软还试图支持直接联系,不依靠NetBIOS,不过这个试图依然处于尝试阶段,并需要继续完善。微软向互联网工程工作小组提出了部分定义作为互联网草案[9]。不过这些提案现在均已过期。
由于SMB协议对于与占主要地位的Microsoft Windows平台通讯时的重要性,而目前该平台使用的SMB协议与初始的版本相比有巨大的改变,因此Samba项目就是被创立来逆向工程来提供一个与SMB软件兼容的自由软件,使得非微软操作系统也能够使用它。
在Windows Vista中微软又推出了Server Message Block 2.0,后又在Windows 7中做了改进,截至2012年依次发布的主版本有 2.1 和 3.0。
2006年,Microsoft 随着 Windows Vista 的发布引入了新的SMB版本(SMB 2.0、SMB2)[10]
随 Windows 7 和 Server 2008 R2 引入,主要是通过引入新的机会锁机制来提升性能。[11]
SMB 3.0(前稱 SMB 2.2)[12]在Windows 8[12] 和 Windows Server 2012[12]中引入。它带来几项重大改变,例如 the SMB Direct Protocol(SMB over RDMA)和 SMB Multichannel(每SMB工作階段有多重連結)[13][14]
实现
SMB使用点对点的通讯方式,一个客户端向一个服务器提出请求,服务器相应地回答。SMB协议中的一部分专门用来处理对文件系统的访问,使得客户端可以访问一个文件服务器。SMB也有行程間通訊的部分。SMB协议尤其适用于局部子网,但是也可以被用来通过万维网来链接不同的子网。Microsoft Windows的文件和打印机分享主要使用这个功能。
SMB服务器向网络上的客户端提供文件系统和其它资源。客户端电脑也可能有其自己的、不共享的硬盘,但是可能也想使用服务器上分享的文件系统和打印机。这是SMB为什么这么出名和广泛地被使用的原因。SMB普及的另一个原因是它使用适合NT网域的协议,至少提供基于NT网域式的认证。NT网域协议是一个微软远程过程调用服务,几乎只能被SMB进程间通讯的命名管道使用。几乎所有SMB服务器的实现使用NT网域来认证用户是否可以访问一个资源。
一般认为SMB协议会占用很多网络带宽,因为每个客户端均在整个子网内广播其存在。但是SMB本身并不使用广播。SMB造成的广播问题实际上是NetBIOS的服务定位协议造成的。一般来说Microsoft Windows服务器使用NetBIOS来协议和定位服务。而NetBIOS则定时向一个特定的服务器广播一个服务的存在。对于一个少于20个服务器的网络来说这个方式是可行的。但是随服务器数目的增加广播造成的交通会导致问题。通过适当地实现WINS定位协议这个问题可以被缓和。WINS使用更高级的系统来确定和中央化服务需求,但是造成自己的设计和保管网络的问题。動態DNS是另一个解决方法。微软本身推荐在微软的活动目录环境下使用動態DNS。网络延迟对SMB协议的速度有非常大的冲击。在服务器之间网络延迟大的情况下通过SMB来更换档案夹非常明显地反映了这个问题。比如在通过万维网使用虛擬私人網路时网络延迟就会比较大,这时使用SMB就很恼人。
微软在实现其SMB时添加了许多功能,比如微软引入了NTLMv2,因为原来的第1版使用的DES容易被破解。此外因早年美國政府對於高等加密軟體限制出口,NT 4.0在美国以外僅使用40比特位加密,以今天的标准来说容易被解密。
SMB的行程間通訊机制值得一提。通过这个系统,它提供命名管道。这个机制是最早的、程序员可以使用的少数行程間通訊之一,它继承客户端联系SMB服务器时的认证来提供服务。命名管道继承认证是一个独特和透明的机制,因此使用Windows API的程序员和Windows的用户均将它看作是自然的。
有些服务使用命名管道,比如使用通过SMB的微软远程过程调用的程序,也允许微软远程过程调用客户端程序进行自己的认证,并且由此掩盖SMB服务器的认证。但是这个掩盖只在客户端程序的认证成功的情况下才生效。
另一个特点是SMB对文件使用一种特殊的、被称为伺机锁定的锁定机构来提高速度。
微软的分布式文件系统实现就基于SMB。
其他实现和版本
以下列出的包括SMB客户端、服务器以及不同的扩展SMB的协议。
- 自由软件Samba重新实现SMB和微软的扩展,包括服务器和命令行客户端。
- Samba-TNG是一款Samba的衍生版本。
- Linux内核包括两个SMB客户端实施,它们使用虚拟文件系统通过标准文件系统应用程序接口提供接触SMB服务器上的文件。
- ONStor公司实施了其自己的SMB,这个实施也支持NFS协议。
- Novell NetWare版本6以上提供CIFS服务器实施,使得Microsoft Network客户端可以解除NetWare的文件。
- FreeBSD、NetBSD和Mac OS X均包含使用它们自己的虚拟文件系统的SMB客户端。
- FreeNAS是一个小型的網路儲存設備服务,其目的在于使得用户可以重新使用老电脑作为文件服务器。它支持CIFS/Samba协议。
- 维尔软件公司实施过一个SMB。
- Network Appliance有一个SMB服务器的实施。
安全
多年以来,微软实现的其直接依赖的协议与组件都存在着许多安全漏洞。[15][16]其他供应商的安全漏洞主要在于缺乏对较新的身份验证协议(例如NTLMv2和Kerberos赞成如NTLMv1、LanMan或纯文本密码)的支持。实时攻击跟踪[17]表明SMB是入侵企图的主要攻击媒介之一[18],例如2014年索尼影业遭黑客攻击事件[19],以及2017年的WannaCry勒索軟體攻击。[20]
参考资料
相關條目
外部链接
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.