簡介
伺服器訊息塊(Server Message Block,縮寫為SMB),一種
套用層網路傳輸協定,由
微軟開發,主要功能是使網路上的機器能夠
共享計算機檔案、
印表機、
串列連線埠和通訊等資源。它也提供經認證的
進程間通信機能。它主要用在裝有Microsoft Windows的機器上,在這樣的機器上被稱為Microsoft Windows Network。
經過
Unix伺服器廠商重新開發後,它可以用於連線Unix伺服器和Windows客戶機,執行
列印和檔案共享等任務。
與功能類似的
網路檔案系統(NFS)相比,NFS的訊息格式是固定長度,而CIFS的訊息格式大多數是可變長度,這增加了協定的複雜性。CIFS訊息一般使用
NetBIOS或
TCP協定傳送,分別使用不同的連線埠139或445,目前傾向於使用445連線埠。CIFS的訊息包括一個信頭(32位元組)和訊息體(1個或多個,可變長)。
特性
SMB可以以不同方式運行在會話層或者更低的網路層之上:
通過使用
NetBIOSAPI, 它可以運行在幾種不同的transports:
基於
UDPports 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客戶端程式上下文中有效。
Server Message Block version 2 (SMB2) 旨在通過將SMB signals合併為一個數據包來減輕這個性能限制。
SMB 服務是 Microsoft'sDistributed 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的同時,微軟提出將SMB改稱為Common Internet File System。此外微軟還加入了許多新的功能,比如
符號連結、
硬連結、提高檔案的大小。微軟還試圖支持直接聯繫,不依靠NetBIOS,不過這個試圖依然處於嘗試階段,並需要繼續完善。微軟向
網際網路工程工作小組提出了部分定義作為網際網路草案。不過這些提案現在均已過期。
由於SMB協定對於與占主要地位的Microsoft Windows平台通訊時的重要性,而目前該平台使用的SMB協定與初始的版本相比有巨大的改變,因此
Samba項目就是被創立來
逆向工程來提供一個與SMB軟體兼容的
自由軟體,使得非微軟作業系統也能夠使用它。
實現
客戶端-伺服器端結構
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對檔案使用一種特殊的、被稱為伺機鎖定的鎖定機構來提高速度。
安全