伺服器訊息區塊
伺服器訊息區塊(Server Message Block,縮寫為SMB),又稱網路文件共享系統(Common Internet File System,縮寫為CIFS, /ˈsɪfs/),一种應用層网络传输协议,由微软开发,主要功能是使网络上的机器能夠共享计算机文件、打印机、串行端口和通讯等资源。它也提供经认证的行程間通訊机能。它主要用在装有Microsoft Windows的机器上,在这样的机器上被称为Microsoft Windows Network。
经过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) 系统提供 命名管道s 机制,它使得程序员可以方便的实现继承认证(客户端第一次连接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 实现的基础.
历史
最初是的贝瑞·费根鲍姆()研制的,其目的是将DOS操作系统中的本地文件接口“中断13”改造为网络文件系统。后来微软对这个发展进行了重大更改,这个更改后的版本也是最常见的版本。微软将协议与它和一起发展的网络管理程序结合在一起,并在和后来的版本中不断加入新的功能。
一开始的设计是在协议上运行的(而本身则运行在、或协议上),引入了直接在上运行的功能。在这里我们必须区分协议和运行在这个协议上的业务,以及和使用作为认证隧道的业务。此外我们还要区分主要(但不仅仅)直接使用数据报的“网络邻居”协议。
1996年,约于升阳推出的同时[7],微软提出将改称为[8]。此外微软还加入了许多新的功能,比如符号链接、硬链接、提高文件的大小。微软还试图支持直接联系,不依靠,不过这个试图依然处于尝试阶段,并需要继续完善。微软向互联网工程工作小组提出了部分定义作为互联网草案[9]。不过这些提案现在均已过期。
由于协议对于与占主要地位的平台通讯时的重要性,而目前该平台使用的协议与初始的版本相比有巨大的改变,因此项目就是被创立来逆向工程来提供一个与软件兼容的自由软件,使得非微软操作系统也能够使用它。
在中微软又推出了,后又在中做了改进,截至2012年依次发布的主版本有 2.1 和 3.0。
SMB 2.0
2006年,Microsoft 随着 Windows Vista 的发布 引入了新的SMB版本 (SMB 2.0 or SMB2) [10] ...
SMB 2.1
SMB 2.1, 随 Windows 7 和 Server 2008 R2 引入, 主要是通过引入新的机会锁机制来提升性能。[11]
实现
客户端-服务器端结构
使用点对点的通讯方式,一个客户端向一个服务器提出请求,服务器相应地回答。协议中的一部分专门用来处理对文件系统的访问,使得客户端可以访问一个文件服务器。也有行程間通訊的部分。协议尤其适用于局部子网,但是也可以被用来通过万维网来链接不同的子网。的文件和打印机分享主要使用这个功能。
服务器向网络上的客户端提供文件系统和其它资源。客户端电脑也可能有其自己的、不共享的硬盘,但是可能也想使用服务器上分享的文件系统和打印机。这是为什么这么出名和广泛地被使用的原因。普及的另一个原因是它使用适合网域的协议,至少提供基于网域式的认证。网域协议是一个微软远程过程调用服务,几乎只能被的管道使用。几乎所有服务器的实现使用网域来认证用户是否可以访问一个资源。
性能问题
一般认为协议会占用很多网络带宽,因为每个客户端均在整个子网内广播其存在。但是本身并不使用广播。造成的广播问题实际上是的服务定位协议造成的。一般来说服务器使用来协议和定位服务。而则定时向一个特定的服务器广播一个服务的存在。对于一个少于20个服务器的网络来说这个方式是可行的。但是随服务器数目的增加广播造成的交通会导致问题。通过适当地实现WINS定位协议这个问题可以被缓和。使用更高级的系统来确定和中央化服务需求,但是造成自己的设计和保管网络的问题。動態是另一个解决方法。微软本身推荐在微软的活动目录环境下使用動態。网络延迟对协议的速度有非常大的冲击。在服务器之间网络延迟大的情况下通过来更换档案夹非常明显地反映了这个问题。比如在通过万维网使用虛擬私人網路时网络延迟就会比较大,这时使用就很恼人。
其他实现和版本
以下列出的包括客户端、服务器以及不同的扩展的协议。
安全
多年以来,微软实现的其直接依赖的协议与组件都存在着许多安全漏洞。[15][16]其他供应商的安全漏洞主要在于缺乏对较新的身份验证协议(例如NTLMv2和Kerberos赞成如NTLMv1、LanMan或纯文本密码)的支持。实时攻击跟踪[17]表明SMB是入侵企图的主要攻击媒介之一[18],例如2014年索尼影业遭黑客攻击事件[19],以及2017年的WannaCry勒索軟體攻击。[20]
参考资料
- . Microsoft. 2007-10-11 [2009-11-01]. (原始内容存档于2011-03-26).
- Richard Sharpe. . 8 October 2002 [18 July 2011]. (原始内容存档于2009-12-02).
- . Microsoft Corporation. 2007-11-30 [2012-10-24]. (原始内容存档于2010-11-20).
Security Signatures (SMB sequence numbers)
- Jesper M. Johansson. . Microsoft Corporation. 2005-09-08 [2012-10-24]. (原始内容存档于2010-11-20).
This article addresses [...] Server Message Block (SMB) message signing.
- . Microsoft Corporation. 2007-11-30 [2012-10-24]. (原始内容存档于2010-11-20).
By default, SMB signing is required for incoming SMB sessions on Windows Server 2003-based domain controllers.
- Jose Barreto. . Microsoft TechNet Server & Management Blogs. 2010-12-01 [2012-10-24]. (原始内容存档于2012-12-02).
This security mechanism in the SMB protocol helps avoid issues like tampering of packets and "man in the middle" attacks. [...] SMB signing is available in all currently supported versions of Windows, but it’s only enabled by default on Domain Controllers. This is recommended for Domain Controllers because SMB is the protocol used by clients to download Group Policy information. SMB signing provides a way to ensure that the client is receiving genuine Group Policy.
- . [2007-07-03]. (原始内容存档于2007-05-18).
- CIFS: A Common Internet File System (页面存档备份,存于),Paul Leach和Dan Perry。
- Navjot Virk and Prashanth Prahalad. . Chk Your Dsks. MSDN. March 10, 2006 [2006-05-01]. (原始内容存档于2006-05-05).
- . Microsoft: 10–11. 2009-10-21 [2009-11-02]. (原始内容存档于2010-09-06).
- Jeffrey Snover. . Microsoft. 19 April 2012 [14 June 2012]. (原始内容存档于2012-09-24).
- Jose Barreto. (PDF). Storage Networking Industry Association. 19 October 2012 [28 November 2012]. (原始内容存档 (PDF)于2013-06-03).
- Thomas Pfenning. (PDF). [2016-02-14]. (原始内容 (PDF)存档于2012-07-20).
- . 微软. December 1, 2007 [November 1, 2009]. (原始内容存档于2009-10-08).
- . 微软. January 13, 2009 [November 1, 2009]. (原始内容存档于2009-10-05).,
- . 德国电信. March 7, 2013 [March 7, 2013]. (原始内容存档于2013-03-08).
- . US-CERT. [2017-05-14]. (原始内容存档于2014-12-20).
- . [2017-05-14]. (原始内容存档于2014-12-20).
- . eWeek. [13 May 2017].
外部链接
- SMB/CIFS技术说明(页面存档备份,存于)
- Common Internet File System (CIFS) File Access Protocol(页面存档备份,存于)—微软技术说明
- Samba研制信息(页面存档备份,存于)
- SMB 指令描述