伺服器訊息區塊 (SMB) 是一種關鍵的網路檔案共用通訊協定,可讓使用者和應用程式透過網路存取檔案、印表機和其他共用資源。SMB 常見於 Windows 環境,可實現用戶端與伺服器系統之間的無縫通訊。本文將探討 SMB 的運作方式、其組成元件、常見的疑難排解步驟,以及解決 SMB 相關問題的最佳實務。
目錄
什麼是 SMB?
伺服器訊息區塊 (SMB)是一種網路通訊協定,可讓使用者像操作本機檔案一樣讀取、寫入和管理遠端伺服器上的檔案。SMB 廣泛用於 Windows 網路,可實現檔案、印表機和序列埠的共用存取。它也受到 Linux 和 macOS 系統的支援,因此是跨平台通訊的一種通用通訊協定。
SMB 的運作方式
- 用戶端要求:SMB 用戶端(例如 Windows、Linux 或 macOS)會向 SMB 伺服器傳送要求,以存取共用資源。
- 伺服器回應:SMB 伺服器會根據驗證和權限來驗證該要求。
- 資源存取:一旦取得存取權限,用戶端就可以像操作本機磁碟機上的檔案一樣讀取、寫入或修改檔案。
關鍵 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.sysMRXSMB.sysMRXSMB10.sysMRXSMB20.sysMUP.sysSMBdirect.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/IP | UDP 137 | 名稱解析 |
| NetBIOS over TCP/IP | UDP 138 | 資料包服務 |
| NetBIOS over TCP/IP | TCP 139 | 工作階段服務 |
| 透過 TCP 的直接 SMB | TCP 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 相關的網路封包:
- 開始在 SMB 用戶端和伺服器上同時擷取流量。
- 重現該問題。
- 分析封包,尋找 SMB 錯誤或逾時。
4. 收集事件記錄
- 匯出與 SMB 相關的事件記錄以供進一步分析:
- SMB 用戶端記錄。
- SMB 伺服器記錄。

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