基本概述
SMB協定是基於TCP-NETBIOS下的,一般連線埠使用為139,445,關於NETBIOS協定這裡就不介紹了。
NetBios協定頭可以是:
typedef struct
{
unsigned char msg_type;
unsigned char flags;
unsigned short length;
}
netbios_ss_hdr_t;
SMB/CIFS協定
在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$來訪問伺服器,否則客戶無法獲得系統資源的列表。
SMB2通訊協定
l SMB是過去Windows網路中用來存取遠程檔案的通訊協定
n 無法整合新的NTFS功能
n 並不是設計用來傳輸大型的遠程檔案
l SMB2內建在Windows Vista與Windows Server 2008
n 支持 NTFS客戶端符號連結
n 所有操作可以批處理,減少 client/server之間的來回
n 支持更大的暫存大小,比以前增加 30到40倍的傳輸量
SMB3.0新特性
•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,管理員可以從命令行以端對端方式管理檔案伺服器上的檔案共享。