SMB協議

SMB協議

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 File System),並且加入了許多新的特色。

基本概述


SMB協議是基於TCP-NETBIOS下的,一般埠使用為139,445,關於NETBIOS協議這裡就不介紹了。
NetBios協議頭可以是:
typedef struct
{
unsigned char msg_type;
unsigned short length;
}
netbios_ss_hdr_t;

協議


在NetBIOS出現之後,Microsoft就使用NetBIOS實現了一個網路文件/列印服務系統,這個系統基於NetBIOS設定了一套文件共享協議,Microsoft稱之為SMB(Server Message Block)協議。這個協議被Microsoft用於它們Lan Manager和Windows NT伺服器系統中,而Windows系統均包括這個協議的客戶軟體,因而這個協議在區域網系統中影響很大。隨著Internet的流行,Microsoft希望將這個協議擴展到Internet上去,成為Internet上計算機之間相互共享數據的一種標準。因此它將原有的幾乎沒有多少技術文檔的SMB協議進行整理,重新命名為 CIFS(Common Internet File System),並打算將它與NetBIOS相脫離,試圖使它成為Internet上的一個標準協議。
因此,為了讓Windows和Unix計算機相集成,最好的辦法即是在Unix中安裝支持SMB/CIFS協議的軟體,這樣Windows客戶就不需要更改設置,就能如同使用Windows NT伺服器一樣,使用Unix計算機上的資源了。
與其他標準的TCP/IP協議不同,SMB協議是一種複雜的協議,因為隨著Windows計算機的開發,越來越多的功能被加入到協議中去了,很難區分哪些概念和功能應該屬於Windows操作系統本身,哪些概念應該屬於SMB 協議。其他網路協議由於是先有協議,實現相關的軟體,因此結構上就清晰簡潔一些,而SMB協議一直是與Microsoft 的操作系統混在一起進行開發的,因此協議中就包含了大量的Windows系統中的概念。

瀏覽

在SMB協議中,計算機為了訪問網路資源,就需要了解網路上存在的資源列表(例如在Windows下使用網路鄰居查看可以訪問的計算機),這個機制就被稱為瀏覽(Browsing)。雖然SMB協議中經常使用廣播的方式,但如果每次都使用廣播的方式了解當前的網路資源(包括提供服務的計算機和各個計算機上的服務資源),就需要消耗大量的網路資源和浪費較長的查找時間,因此最好在網路中維護一個網路資源的列表,以方便查找網路資源。只有必要的時候,才重新查找資源,例如使用Windows下的查找計算機功能。
但沒有必要每個計算機都維護整個資源列表,維護網路中當前資源列表的任務由網路上的幾個特殊計算機完成的,這些計算機被稱為Browser,這些Browser通過記錄廣播數據或查詢名字伺服器來記錄網路上的各種資源。
Browser並不是事先指定的計算機,而是在普通計算機之間通過自動進行的推舉產生的。不同的計算機可以按照其提供服務的能力,設置在推舉時具備的不同權重。為了保證一個Browser停機時網路瀏覽仍然正常,網路中常常存在多個Browser,一個為主Browser(Master Browser),其他的為備份Browser。

工作組和域

工作組和域這兩個概念在進行瀏覽時具備同樣的用處,都是用於區分並維護同一組瀏覽數據的多個計算機。事實上他們的不同在於認證方式上,工作組中每台計算機都基本上是獨立的,獨立對客戶訪問進行認證,而域中將存在一個(或幾個)域控制器,保存對整個域中都有效的認證信息,包括用戶的認證信息以及域內成員計算機的認證信息。瀏覽數據的時候,並不需要認證信息,Microsoft將工作組擴展為域,只是為了形成一種分級的目錄結構,將原有的瀏覽和目錄服務相結合,以擴大Mircrosoft網路服務範圍的一種策略。工作組和域都可以跨越多個子網,因此網路中就存在兩種Browser,一種為Domain Master Browser ,用於維護整個工作組或域內的瀏覽數據,另一種為Local Master Browser,用於維護本子網內的瀏覽數據,它和Domain Master Browser通信以獲得所有的可瀏覽數據。劃分這兩種Browser 主要是由於瀏覽數據依賴於本地網廣播來獲得資源列表,不同子網之間只能通過瀏覽器之間的交流能力,才能互相交換資源列表。
但是,為了瀏覽多個子網的資源,必須使用NBNS名字伺服器的解析方式,沒有NBNS的幫助,計算機將不能獲得子網外計算機的NetBIOS名字。Local Master Browser也需要查詢NetBIOS名字伺服器以獲得Domain Master Browser的名字,以相互交換網路資源信息。
由於域控制器在域內的特殊性,因此域控制器傾向於被用做Browser,主域控制器應該被用作Domain Master Browser,他們在推舉時設置的權重較大。

認證方式

在Windows 9x系統中,習慣上使用共享級認證的方式互相共享資源,主要原因是在這些Windows系統上不能提供真正的多用戶能力。一個共享級認證的資源只有一個口令與其相聯繫,而沒有用戶數據。這個想法是適合於一小組人員相互共享很少的文件資源的情況下,一旦需要共享的資源變多,需要進行的限制複雜化,那麼針對每個共享資源都設置一個口令的做法就不再合適了。
因此對於大型網路來講,更適合的方式是用戶級的認證方式,區分並認證每個訪問的用戶,並通過對不同用戶分配許可權的方式共享資源。對於工作組方式的計算機,認證用戶是通過本機完成的,而域中的計算機能通過域控制器進行認證。當 Windows計算機通過域控制器的認證時,它可以根據設置執行域控制器上的相應用戶的登錄腳本並桌面環境描述文件。共享資源 每個SMB伺服器能對外提供文件或列印服務,每個共享資源需要被給予一個共享名,這個名字將顯示在這個伺服器的資源列表中。然而,如果一個資源的名字的最後一個字母為$,則這個名字就為隱藏名字,不能直接表現在瀏覽列表中,而只能通過直接訪問這個名字來進行訪問。在SMB協議中,為了獲得伺服器提供的資源列表,必須使用一個隱藏的資源名字IPC$來訪問伺服器,否則客戶無法獲得系統資源的列表。

通訊協議

l SMB是過去Windows網路中用來存取遠程文件的通訊協議
n 無法整合新的NTFS功能
n 並不是設計用來傳輸大型的遠程文件
l SMB2內建在Windows Vista與Windows Server 2008
n 支持 NTFS客戶端符號鏈接
n 所有操作可以批處理,減少 client/server之間的來回
n 支持更大的暫存大小,比以前增加 30到40倍的傳輸量

新特性

• SMB透明故障轉移:讓管理員可執行群集文件伺服器中節點的硬體或軟體維護,且不會中斷將數據存儲在這些文件共享上的伺服器應用程序。此外,如果群集節點出現硬體或軟體故障,SMB 客戶端將以透明方式重新連接到其他群集節點,且不會中斷將數據存儲在這些文件共享上的伺服器應用程序。即客戶端能夠持續、穩定的對遠程文件伺服器進行通訊,用戶不會感受到單點伺服器故障所帶來的性能影響(不兼容SMB1.0或SMB2.x)。
• SMB橫向擴展:可構建橫向擴展文件伺服器(Scale-Out File Server),在使用群集共享卷(CSV)版本2時,管理員可以通過文件伺服器群集中所有節點,創建可供同時訪問含直接I/O的數據文件的文件共享。這可更好地利用文件伺服器客戶端的網路帶寬和負載平衡,以及優化伺服器應用程序的性能。
• SMB多通道:如果在SMB3.0客戶端及伺服器之間提供多條路徑,則支持網路帶寬和網路容錯的聚合,提升了網路可用性及文件伺服器的穩定性,並讓伺服器應用程序可以充分利用可用網路帶寬,以及在發生網路故障時快速恢復。
• SMB直接訪問(SMB over Remote Direct Memory Access[RDMA]):支持使用具有RDMA功能且可全速運行的網路適配器,其中延遲非常低且CPU利用率極少。對於Hyper-V或Microsoft SQL Server等實現工作負載,這讓遠程伺服器如同本地存儲一般。
• 用於伺服器應用程序的性能計數器:全新 SMB 性能計數器提供有關吞吐量、延遲和 I/O/秒 (IOPS) 的按共享列出的詳細信息,從而讓管理員可以分析用於存儲數據的 SMB 3.0 文件共享的性能。這些計數器專為將文件存儲在遠程文件共享上的伺服器應用程序而設計,如 Hyper-V 和 SQL Server。
• 性能優化:SMB 3.0 客戶端和 SMB 3.0 伺服器均已針對小型隨機讀/寫 I/O 優化,這種 I/O 在 SQL Server OLTP 等伺服器應用程序中很常見。此外,默認情況下打開大型最大傳輸單元 (MTU),這將大幅提高大型連續傳輸性能,如 SQL Server 數據倉庫、資料庫備份或還原、部署或複製虛擬硬碟。
• SMB加密:提供SMB數據的端對端加密並防止數據在未受信任網路中遭受竊聽。無需新部署成本,且無需Internet協議安全性(IPsec)、專用硬體或WAN加速器。它可按共享配置,也可針對整個文件伺服器配置,並且可針對數據遍歷未受信任網路的各種方案啟動。
• 為SMB文件共享所提供的VSS:
• SMB目錄租用:縮短分支機構的應用程序響應時間。使用目錄租用后,縮短了從客戶端到伺服器的往返時間,因為是從保留時間較長的目錄緩存中檢索元數據。緩存一致性得到保持,因為在伺服器上的目錄信息更改時將通知客戶端。適用於 主文件夾(讀/寫,無共享)和 發布(只讀,帶共享)。
• SMB PowerShell:藉助於全新的SMB Windows PowerShell cmdlet,管理員可以從命令行以端對端方式管理文件伺服器上的文件共享。