Share via


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

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

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

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

工具和資料收集

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

注意

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 收集網路追蹤的步驟。

重要

Microsoft Message Analyzer 工具 已淘汰 ,我們建議 Wireshark 分析 ETL 檔案。 如需先前已下載工具並正在尋找詳細資訊的人員,請參閱 安裝和升級 Message Analyzer

注意

Netsh 追蹤會建立 ETL 檔案。 ETL 檔案可以在 Message Analyzer (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
    

注意

您應該只追蹤傳輸的資料量下限。 針對效能問題,如果情況允許,請一律採用良好和不正確的追蹤。

分析流量

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 會緩慢回應 READ 要求。

  • 移除防毒軟體程式會解析檔案傳輸緩慢的問題。

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

注意

或者,您也可以 在疑難排解期間暫時卸載防毒軟體程式。

事件記錄檔

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

Event logs

本節列出 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 components

更新建議

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

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

  • 更新網路元件。

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

參考

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