理解並疑難排解伺服器訊息區塊 (SMB) 通訊協定

伺服器訊息區塊 (SMB) 是一種關鍵的網路檔案共用通訊協定,可讓使用者和應用程式透過網路存取檔案、印表機和其他共用資源。SMB 常見於 Windows 環境,可實現用戶端與伺服器系統之間的無縫通訊。本文將探討 SMB 的運作方式、其組成元件、常見的疑難排解步驟,以及解決 SMB 相關問題的最佳實務。



什麼是 SMB?

伺服器訊息區塊 (SMB)是一種網路通訊協定,可讓使用者像操作本機檔案一樣讀取、寫入和管理遠端伺服器上的檔案。SMB 廣泛用於 Windows 網路,可實現檔案、印表機和序列埠的共用存取。它也受到 Linux 和 macOS 系統的支援,因此是跨平台通訊的一種通用通訊協定。


SMB 的運作方式

  1. 用戶端要求:SMB 用戶端(例如 Windows、Linux 或 macOS)會向 SMB 伺服器傳送要求,以存取共用資源。
  2. 伺服器回應:SMB 伺服器會根據驗證和權限來驗證該要求。
  3. 資源存取:一旦取得存取權限,用戶端就可以像操作本機磁碟機上的檔案一樣讀取、寫入或修改檔案。

關鍵 SMB 術語

  • SMB 伺服器 (SRV):託管共用檔案系統的系統。
  • SMB 用戶端 (CLI):存取共用檔案系統的系統。

例如,如果一台 Windows Server 2016 電腦存取 SMB 共用\\MyWorkstation\Data(位於一台 Windows 10 電腦上),該伺服器是SMB 用戶端,而該工作站是SMB 伺服器.


SMB 版本

1. SMB 1.0(舊版)

  • 容易受到 WannaCry 和 EternalBlue 等攻擊的影響。
  • 缺乏現代安全功能。

2. SMB 2.0 / 2.1

  • 效能與安全性均有所提升。
  • 支援更大的緩衝區大小,以實現更高的資料傳輸速率。

3. SMB 3.0+

  • 引入加密以增強安全性。
  • 功能包括 SMB Multichannel 和 SMB Direct,可實現高速檔案傳輸。

SMB 元件

1. 二進位檔

  • SMB 用戶端二進位檔:位於%windir%\system32\Drivers:
    • RDBSS.sys
    • MRXSMB.sys
    • MRXSMB10.sys
    • MRXSMB20.sys
    • MUP.sys
    • SMBdirect.sys
  • SMB 伺服器二進位檔:
    • %windir%\system32: Srvsvc.dll
    • %windir%\system32\Drivers: SRVNET.sys, SRV.sys, SRV2.sys, SMBdirect.sys

2. 繫結

  • SMB 用戶端繫結: Client for Microsoft Networks
  • SMB 伺服器繫結: File and Printer Sharing for Microsoft Networks

SMB 連接埠與通訊

根據所使用的通訊協定,SMB 可以透過不同的連接埠運作:

通訊協定連接埠說明
NetBIOS over TCP/IPUDP 137名稱解析
NetBIOS over TCP/IPUDP 138資料包服務
NetBIOS over TCP/IPTCP 139工作階段服務
透過 TCP 的直接 SMBTCP 445預設 SMB 通訊

現代網路主要使用TCP 445,而較舊的系統可能依賴 NetBIOS。


如何疑難排解 SMB 問題

1. 驗證連線能力

  • 確保用戶端能夠透過TCP 445:
Test-NetConnection <server_IP_or_hostname> -Port 445
  • 如果失敗,請檢查 Azure 防火牆、NSG 或本機防火牆是否阻擋了 SMB 流量。

2. 檢查名稱解析

  • 透過主機名稱和 IP 測試伺服器存取:
nslookup <server_hostname>
  • 如果主機名稱解析失敗,請驗證 DNS 設定。

3. 驗證 SMB 服務

  • 確保所需的服務正在執行:
Get-Service -Name LanmanServer, LanmanWorkstation
  • 如果服務已停止,請啟動服務:
Start-Service -Name LanmanServer, LanmanWorkstation

4. 檢查防火牆規則

  • 確認 SMB 規則已啟用:
netsh advfirewall firewall show rule name="File and Printer Sharing (SMB-In)"

5. 驗證權限

  • 透過資料夾內容或 CMD 檢查共用權限和 NTFS 權限:
net share <sharename>
icacls <folder_path>

6. 使用 UNC 路徑測試存取

  • 開啟Run (Win + R) 並輸入:
\\<server_IP_or_hostname>\sharename

進階疑難排解與資料收集

1. 檢查 SMB 工作階段

  • 顯示使用中的 SMB 工作階段:
Get-SmbSession

2. 重設 SMB 設定

  • 停用並重新啟用 SMB 2 和 SMB 3:
Set-SmbServerConfiguration -EnableSMB2Protocol $true -Force

3. 網路追蹤

  • 使用 Wireshark 收集與 SMB 相關的網路封包:
    1. 開始在 SMB 用戶端和伺服器上同時擷取流量。
    2. 重現該問題。
    3. 分析封包,尋找 SMB 錯誤或逾時。

4. 收集事件記錄

  • 匯出與 SMB 相關的事件記錄以供進一步分析:
    • SMB 用戶端記錄。
    • SMB 伺服器記錄。
SMB

參考文件:

伺服器訊息區塊 (SMB) 進階疑難排解 | Microsoft Learn

SMB 已知問題 | Microsoft Learn

SMB 疑難排解指引 – Windows Server | Microsoft Learn

Microsoft SMB 通訊協定與 CIFS 通訊協定概觀 – Win32 應用程式 | Microsoft Learn

在 Windows 中偵測、啟用和停用 SMBv1、SMBv2 和 SMBv3 | Microsoft Learn

在 Windows Server 中使用 SMB 3 通訊協定進行檔案共用的概觀 | Microsoft Learn

伺服器訊息區塊簽署概觀 – Windows Server | Microsoft Learn

SMB 安全性增強功能 | Microsoft Learn


結論

SMB 是一種功能強大的檔案共用和資源存取通訊協定,但可能因設定錯誤、網路限制或元件過時而發生問題。按照上述疑難排解步驟操作,您可以有效地找出並解決 SMB 相關問題。對於複雜的問題,網路追蹤和事件記錄等進階診斷方法可以提供更深入的見解。

發表留言