共用方式為


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

試用我們的虛擬代理程式 - 它可協助您快速找出並修正常見的 SMB 問題。

伺服器訊息塊 (SMB) 是檔案系統作業的網路傳輸通訊協定,可讓用戶端存取伺服器上的資源。 SMB 通訊協定的主要目的是要透過 TCP/IP 在兩個系統之間啟用遠端檔案系統存取。

SMB 疑難解答可能非常複雜。 本文並非詳盡的疑難解答指南,而是瞭解如何有效地針對SMB進行疑難解答的基本概念。

工具和數據收集

品質SMB疑難解答的其中一個重要層面是傳達正確的術語。 因此,本文介紹基本的SMB術語,以確保數據收集和分析的正確性。

Note

SMB 伺服器 (SRV) 是指裝載檔案系統的系統,也稱為檔案伺服器。 SMB 用戶端 (CLI) 是指嘗試存取檔案系統的系統,無論操作系統的版本或版本的類型為何。

例如,如果您使用 Windows Server 2016 連線到裝載在 Windows 10 上的 SMB 共用,Windows Server 2016 是 SMB 用戶端和 Windows 10 SMB 伺服器。

收集資料

在您進行 SMB 問題的疑難排解之前,建議您先同時在客戶端和伺服器端收集網絡追蹤資料。 適用下列指導方針:

  • 在 Windows 系統上,您可以使用 netshell (netsh)、網路監視器、訊息分析器或 Wireshark 來收集網路追蹤。

  • 第三方裝置通常具有內建封包擷取工具,例如 tcpdump (Linux/FreeBSD/Unix),或 pktt (NetApp)。 例如,如果 SMB 用戶端或 SMB 伺服器是 Unix 主機,您可以執行下列命令來收集資料:

    # tcpdump -s0 -n -i any -w /tmp/$(hostname)-smbtrace.pcap
    

    從鍵盤使用 Ctrl+C 停止收集資料。

若要探索問題的來源,您可以檢查兩端追蹤:CLI、SRV 或兩者之間的某個位置。

使用 netshell 收集數據

本節提供使用 netshell 收集網路追蹤的步驟。

Important

Microsoft訊息分析器工具 已淘汰 ,我們建議 Wireshark 分析 ETL 檔案。 如果您是先前已下載此工具且正在尋找更多資訊的人,請參閱 安裝和升級 Message Analyzer

Note

Netsh 追蹤會建立 ETL 檔案。 ETL 檔案可以在訊息分析器 (MA)、網路監視器 3.4 (將剖析器設定為網路監視器剖析器 > Windows) 和 Wireshark 中開啟。

  1. 在 SMB 伺服器和 SMB 用戶端上,在磁碟機 C 上建立 Temp 資料夾。然後,執行下列命令:

    netsh trace start capture=yes report=yes scenario=NetConnection level=5 maxsize=1024 tracefile=c:\Temp\netTrace.etl
    

    如果您使用 PowerShell,請執行下列 Cmdlet:

    New-NetEventSession -Name trace -LocalFilePath "C:\Temp\netTrace.etl" -MaxFileSize 1024
    
    Add-NetEventPacketCaptureProvider -SessionName trace -TruncationLength 1500
    
    Start-NetEventSession trace
    
  2. 重現問題。

  3. 執行下列命令來停止追蹤:

    netsh trace stop
    

    如果您使用 PowerShell,請執行下列 Cmdlet:

    Stop-NetEventSession trace  
    Remove-NetEventSession trace
    

Note

您應該只追蹤最少量的傳輸數據。 針對效能問題,如果情況允許,最好同時採集良好和不佳的追蹤資料。

分析流量

SMB 是應用層級通訊協定,使用 TCP/IP 作為網路傳輸通訊協定。 因此,SMB 問題也可能由 TCP/IP 問題所造成。

檢查 TCP/IP 是否遇到下列任何問題:

  1. TCP 三向交握未完成。 這通常表示有防火牆區塊,或伺服器服務未執行。

  2. 目前正在進行重新傳輸。 由於複合 TCP 壅塞節流,這些可能會導致檔傳輸變慢。

  3. 五次重新傳輸,後面接著 TCP 重設可能表示系統之間的連線已遺失,或其中一個 SMB 服務損毀或停止回應。

  4. TCP 接收視窗正在減少。 這可能會因為儲存速度緩慢或其他導致無法從輔助函式驅動程式 (AFD) Winsock 緩衝區擷取數據的其他問題所造成。

如果沒有明顯的 TCP/IP 問題,請尋找 SMB 錯誤。 若要這樣做,請遵循下列步驟:

  1. 一律依據 MS-SMB2 通訊協定規格檢查 SMB 錯誤。 許多SMB錯誤都是良性的(不有害)。 請參閱下列資訊,以判斷為什麼 SMB 傳回錯誤,再得出結論錯誤與下列任何問題有關:

  2. 檢查 TCP 重設命令是否在FSCTL_VALIDATE_NEGOTIATE_INFO (validate negotiate) 命令之後立即傳送。 如果是,請參閱下列資訊:

    • 當驗證交涉程式在用戶端或伺服器上失敗時,SMB 工作階段必須終止 (TCP 重設)。

    • 此程式可能會失敗,因為 WAN 優化器正在修改 SMB 交涉封包。

    • 如果連線過早結束,請識別客戶端與伺服器之間的最後一次交換通訊。

分析通訊協定

查看網路追蹤中實際的SMB通訊協定詳細數據,以瞭解所使用的確切命令和選項。

  • 請記住,SMB 只會執行它被告知要執行的動作。

  • 您可以檢查 SMB 命令,深入瞭解應用程式嘗試執行的動作。

比較命令和作業與通訊協議規格,以確定所有專案都正常運作。 如果不是,請收集更接近或較低層級的數據,以尋找根本原因的詳細資訊。 若要這樣做,請遵循下列步驟:

  1. 收集標準封包擷取。

  2. 執行 netsh 命令,以追蹤並收集網路堆疊中是否有問題或 Windows 篩選平台 (WFP) 應用程式 (例如防火牆或防病毒軟體程式) 中是否有問題的詳細數據。

  3. 如果所有其他選項都失敗,請收集t.cmd檔案,特別是當您懷疑問題發生在SMB本身或其他數據不足以識別根本原因時。

例如:

  • 您體驗到單一檔伺服器的檔案傳送速率緩慢。

  • 雙向追蹤顯示 SRV 對讀取請求的回應緩慢。

  • 移除防毒軟體可以解決檔案傳輸緩慢的問題。

  • 您可以連絡防毒程式的製造商,以解決問題。

Note

或者,您也可以在疑難排解 期間暫時解除 安裝防毒程式。

事件記錄檔

SMB 用戶端和SMB伺服器都有詳細的事件記錄結構,如下列螢幕快照所示。 收集事件記錄檔,以協助找出問題的根本原因。

事件記錄檔

本節列出 SMB 相關的系統檔案。 若要讓系統檔案保持更新,請確定已安裝最新的 更新匯總

列出在 %windir%\system32\Drivers 底下的 SMB 用戶端二進位檔:

  • RDBSS.sys

  • MRXSMB.sys

  • MRXSMB10.sys

  • MRXSMB20.sys

  • MUP.sys

  • SMBdirect.sys

%windir%\system32\Drivers 下列的 SMB 伺服器二進位檔:

  • SRVNET.sys

  • SRV.sys

  • SRV2.sys

  • SMBdirect.sys

  • %windir%\system32

  • srvsvc.dll

SMB 元件

更新建議

建議您先更新下列元件,再針對SMB問題進行疑難解答:

  • 檔案伺服器需要檔案記憶體。 如果您的記憶體有 iSCSI 元件,請更新這些元件。

  • 更新網路元件。

  • 為了提升效能和穩定性,請更新 Windows Core。

Reference

Microsoft SMB 通訊協定封包交換案例