SMB協議

沈萬三gz發表於2015-06-03

注:linux支援SMP協議,安裝協議後可以直接與windows通訊

Samba 的工作原理是,讓NETBIOS(Windows95網路鄰居的通訊協議)和SMA Server Message Block)
這兩個協議執行於TCP/IP通訊協議之上,並且使用Windows 95的NETBEUI協議讓LINUX 可以在網路鄰居上被
Windows 95看到。 其中最重要的就是SMB協議(Server Message Block),這是一個用於不同計算機之間共享印表機、
序列口和通訊抽象(如命名管道、郵件插槽等)的協議。SMB協議是一個非常重要的協議,在所有的
Microsoft Windows系列作業系統中廣為應用。 Samba是SMB伺服器在類UNIX系統上的實現。
它是開放原始碼的GPL自由軟體。目前Samba可以在幾乎所有的UNIX變種上執行。

一、SMB/CIFS協議的區別     

     在NetBIOS出現之後,Microsoft就使用NetBIOS實現了一個網路檔案/列印服務系統,這個系統基於NetBIOS設定了一套檔案共享協議,Microsoft稱之為SMB(Server Message Block)協議。這個協議被Microsoft用於它們LanManager和WindowsNT伺服器系統中,而Windows系統均包括這個協議的客戶軟體,因而這個協議在區域網系統中影響很大。
  隨著Internet的流行,Microsoft希望將這個協議擴充套件到Internet上去,成為Internet上計算機之間相互共享資料的一種標準。因此它將原有的幾乎沒有多少技術文件的SMB協議進行整理,重新命名為CIFS(Common Internet FileSystem),並打算將它與NetBIOS相脫離,試圖使它成為Internet上的一個標準協議。

      SMB(Server Message Block)協議在NT/2000中用來作檔案共享,在NT中,SMB執行於NBT(NetBIOSover TCP/IP)上,使用137,139(UDP),139(TCP)埠。在2000中,SMB可以直接執行在tcp/ip上,而沒有額外的NBT層,使用TCP445埠。因此在2000上應該比NT稍微變化多一些。可以在“網路連線/屬性/TCPIP協議/屬性/高階/WINS中設定啟用或者禁用NBT(NetBIOS over TCP/IP)。當2000使用網路共享的時候,就面臨著選擇139或者445埠了。下面的情況確定會話使用的埠:

1、如果客戶端啟用了NBT,那麼連線的時候將同時訪問139和445埠,如果從445埠得到回應,那麼客戶端將傳送RST到139埠,終止這個埠的連線,接著就從445埠進行SMB的會話了;如果沒有從445埠而是從139得到回應,那麼就從139埠進行會話;如果沒有得到任何回應,那麼SMB會話失敗。

2、如果客戶端禁用了NBT,他就將只從445埠進行連線。當然如果伺服器(開共享端)沒有445埠進行SMB會話的話,那麼就會訪問失敗了,所以禁用445埠後,對訪問NT機器的共享會失敗。

3、如果伺服器端啟用NBT,那麼就同時監聽UDP137、138埠和TCP139,445。如果禁用NBT,那麼就只監聽445埠了。所以對於2000來說,共享問題就不僅僅是139埠,445埠同樣能夠完成。

二、SMB包頭部分:

SMB/CIFS協議解析(一)

其中SMB Header的長度為32個byte,NETBIOS Header的長度為4個byte,TCPHeader為20個byte,SMB Command Header的長度不是固定的,不同的命令有不同的長度。



相關文章