SMB(Server Message Block,又稱Common Internet File System(CIFS))是由微軟開發的一種軟體程式級的網路傳輸協議,主要用來使得一個網路上的機器共用電腦檔案、印表機、序列埠和通訊等資源。它也提供認證的行程間通訊機能。它主要用在裝有Microsoft Windows的機器上,在這樣的機器上被稱為Microsoft Windows Network。
經過Unix伺服器廠商重新開發後,它可以用於串連Unix伺服器和Windows客戶機,執行列印和檔案分享權限設定等任務。
CIFS 的訊息格式不同與NFS的固定長度格式, 大多數訊息體都包含可變長的資料,這帶來一定的協議複雜性。CIFS 訊息一般在netbios或Tcp協議層上,分別使用不同的連接埠 139 或445, 目前傾向於使用445連接埠。CIFS的訊息包括一個訊息頭(32位元組)和訊息體(1個或多個,可變長)。
目錄 [隱藏]
1 曆史
2 實現
2.1 用戶端-伺服器端結構
2.2 效能問題
2.3 微軟的更改
2.4 特點
3 其它實現和版本
4 參考資料
5 外部連結
[編輯] 曆史
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的同時[1],微軟提出將SMB改稱為Common Internet File System[2]。此外微軟還加入了許多新的功能,比如符號連結、永久連結、提高檔案的大小。微軟還試圖支援直接聯絡,不依靠NetBIOS,不過這個試圖依然處於嘗試階段,並需要繼續完善。微軟向互連網工程工作小組提出了部分定義作為互連網草案[3]。不過這些提案現在均已到期。
由於SMB協議對於與佔主要地位的Microsoft Windows平台通訊時的重要性,而目前該平台使用的SMB協議與初始的版本相比有巨大的改變,因此Samba項目就是被創立來逆向工程來提供一個與SMB軟體相容的自由軟體,使得非微軟作業系統也能夠使用它。
在Windows Vista中微軟又推出了Server Message Block 2.0。
[編輯] 實現
[編輯] 用戶端-伺服器端結構
SMB使用點對點的通訊方式,一個用戶端向一個伺服器提出請求,伺服器相應地回答。SMB協議中的一部分專門用來處理對檔案系統的訪問,使得用戶端可以訪問一個檔案伺服器。SMB也有行程間通訊的部分。SMB協議尤其適用於局部子網,但是也可以被用來通過全球資訊網來連結不同的子網。Microsoft Windows的檔案和印表機分享主要使用這個功能。
SMB伺服器向網路上的用戶端提供檔案系統和其它資源。用戶端電腦也可能有其自己的、不共用的硬碟,但是可能也想使用伺服器上分享的檔案系統和印表機。這是SMB為什麼這麼出名和廣泛地被使用的原因。SMB普及的另一個原因是它使用適合NT網域的協議,至少提供基於NT網域式的認證。NT網域協議是一個微軟遠端程序呼叫服務,幾乎只能被SMB進程間通訊的具名管道使用。幾乎所有SMB伺服器的實現使用NT網域來認證使用者是否可以訪問一個資源。
[編輯] 效能問題
一般認為SMB協議會佔用很多網路頻寬,因為每個用戶端均在整個子網內廣播其存在。但是SMB本身並不使用廣播。SMB造成的廣播問題實際上是NetBIOS的服務定位協議造成的。一般來說Microsoft Windows伺服器使用NetBIOS來協議和定位服務。而NetBIOS則定時向一個特定的伺服器廣播一個服務的存在。對於一個少於20個伺服器的網路來說這個方式是可行的。但是隨伺服器數目的增加廣播造成的交通會導致問題。通過適當地實現Windows Internet Name Service(WINS)定位協議這個問題可以被緩和。WINS使用更進階的系統來確定和中央化服務需求,但是造成自己的設計和保管網路的問題。動態DNS是另一個解決方案。微軟本身推薦在微軟的活動目錄環境下使用動態DNS。網路延遲對SMB協議的速度有非常大的衝擊。在伺服器之間網路延遲大的情況下通過SMB來更換檔案夾非常明顯地反映了這個問題。比如在通過全球資訊網使用虛擬私人網路時網路延遲就會比較大,這時使用SMB就很惱人。
[編輯] 微軟的更改
微軟在實現其SMB時添加許多功能,比如微軟引入了NTLM版本2,因為原來的版本1使用的DES有錯。此外NT 4.0在美國以外使用40位加密,對於今天的標準來說不可靠。
[編輯] 特點
SMB的處理序間通訊機構值得一提。通過這個系統它提供具名管道。這個機構是最早的、程式員可以使用的少數行程間通訊之一,它繼承用戶端聯絡SMB伺服器時的認證來提供服務。具名管道繼承認證是一個獨特和透明的機構,因此使用Windows API的程式員和Windows的使用者均將它看作是自然的。
奇怪的是有些服務使用具名管道,比如使用通過SMB的微軟遠端程序呼叫的程式,也允許微軟遠端程序呼叫用戶端程式進行自己的認證,並且由此掩蓋SMB伺服器的認證。但是這個掩蓋只在用戶端程式的認證成功的情況下才生效。
另一個特點是SMB對檔案使用一種特殊的、被稱為伺機鎖定的鎖定機構來提高速度。
微軟的Distributed File System實現是基於SMB上的。
[編輯] 其它實現和版本
以下列出的包括SMB用戶端、伺服器以及不同的擴充SMB的協議。
Samba是許多服務以及協議的實現,其包括TCP/IP上的NetBIOS(NBT)、SMB、CIFS(SMB的增強版本)、 DCE/RPC或者更具體來說MSRPC(近端分享協議套件)、一種 WINS伺服器(也被稱作NetBIOS Name Server(NBNS))、NT 域協議套件(包括NT Domain Logons、Secure Accounts Manager(SAM)資料庫、Local Security Authority(LSA)服務、NT-style列印服務(SPOOLSS)、NTLM以及近來出現的包括一種改進的Kerberos協議與改進的輕量型目錄存取通訊協定(LDAP)在內的Active Directory Logon服務)。以上這些服務以及協議經常被錯誤地歸類為NetBIOS或者SMB。Samba也能夠用於共用印表機。
Samba能夠為選定的Unix目錄(包括所有子目錄)建立網際網路共用。該功能使得Windows使用者可以像訪問普通Windows下的檔案夾那樣來通過網路訪問這些Unix目錄。
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伺服器的實施
from: http://zh.wikipedia.org/w/index.php?title=SMB&variant=zh-hans