試用我們的虛擬代理程式 - 它可協助您快速找出並修正常見的 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 中開啟。
在 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重現問題。
執行下列命令來停止追蹤:
netsh trace stop如果您使用 PowerShell,請執行下列 Cmdlet:
Stop-NetEventSession trace Remove-NetEventSession trace
Note
您應該只追蹤最少量的傳輸數據。 針對效能問題,如果情況允許,最好同時採集良好和不佳的追蹤資料。
分析流量
SMB 是應用層級通訊協定,使用 TCP/IP 作為網路傳輸通訊協定。 因此,SMB 問題也可能由 TCP/IP 問題所造成。
檢查 TCP/IP 是否遇到下列任何問題:
TCP 三向交握未完成。 這通常表示有防火牆區塊,或伺服器服務未執行。
目前正在進行重新傳輸。 由於複合 TCP 壅塞節流,這些可能會導致檔傳輸變慢。
五次重新傳輸,後面接著 TCP 重設可能表示系統之間的連線已遺失,或其中一個 SMB 服務損毀或停止回應。
TCP 接收視窗正在減少。 這可能會因為儲存速度緩慢或其他導致無法從輔助函式驅動程式 (AFD) Winsock 緩衝區擷取數據的其他問題所造成。
如果沒有明顯的 TCP/IP 問題,請尋找 SMB 錯誤。 若要這樣做,請遵循下列步驟:
一律依據 MS-SMB2 通訊協定規格檢查 SMB 錯誤。 許多SMB錯誤都是良性的(不有害)。 請參閱下列資訊,以判斷為什麼 SMB 傳回錯誤,再得出結論錯誤與下列任何問題有關:
MS-SMB2 訊息語法一文詳細說明每個SMB命令及其選項。
MS-SMB2 客戶端處理一文詳細說明 SMB 用戶端如何建立要求及回應伺服器訊息。
MS-SMB2 伺服器處理一文詳細說明SMB伺服器如何建立要求及回應用戶端要求。
檢查 TCP 重設命令是否在FSCTL_VALIDATE_NEGOTIATE_INFO (validate negotiate) 命令之後立即傳送。 如果是,請參閱下列資訊:
當驗證交涉程式在用戶端或伺服器上失敗時,SMB 工作階段必須終止 (TCP 重設)。
此程式可能會失敗,因為 WAN 優化器正在修改 SMB 交涉封包。
如果連線過早結束,請識別客戶端與伺服器之間的最後一次交換通訊。
分析通訊協定
查看網路追蹤中實際的SMB通訊協定詳細數據,以瞭解所使用的確切命令和選項。
請記住,SMB 只會執行它被告知要執行的動作。
您可以檢查 SMB 命令,深入瞭解應用程式嘗試執行的動作。
比較命令和作業與通訊協議規格,以確定所有專案都正常運作。 如果不是,請收集更接近或較低層級的數據,以尋找根本原因的詳細資訊。 若要這樣做,請遵循下列步驟:
收集標準封包擷取。
執行 netsh 命令,以追蹤並收集網路堆疊中是否有問題或 Windows 篩選平台 (WFP) 應用程式 (例如防火牆或防病毒軟體程式) 中是否有問題的詳細數據。
如果所有其他選項都失敗,請收集t.cmd檔案,特別是當您懷疑問題發生在SMB本身或其他數據不足以識別根本原因時。
例如:
您體驗到單一檔伺服器的檔案傳送速率緩慢。
雙向追蹤顯示 SRV 對讀取請求的回應緩慢。
移除防毒軟體可以解決檔案傳輸緩慢的問題。
您可以連絡防毒程式的製造商,以解決問題。
Note
或者,您也可以在疑難排解 期間暫時解除 安裝防毒程式。
事件記錄檔
SMB 用戶端和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問題進行疑難解答:
檔案伺服器需要檔案記憶體。 如果您的記憶體有 iSCSI 元件,請更新這些元件。
更新網路元件。
為了提升效能和穩定性,請更新 Windows Core。