SMB 多通道故障排除

本文介绍如何排查与 SMB 多通道相关的问题。

检查网络接口状态

确保在 SMB 客户端 (MS_client) 和 SMB 服务器 (MS_server) 上将网络接口的绑定设置为 True 。 运行以下 cmdlet 时,输出应在两个网络接口的“已启用”下显示 True

Get-NetAdapterBinding -ComponentID ms_server,ms_msclient

之后,请确保以下 cmdlet 的输出中列出了网络接口:

Get-SmbServerNetworkInterface
Get-SmbClientNetworkInterface

还可以运行 Get-NetAdapter cmdlet 来查看接口索引以验证结果。 接口索引显示主动绑定到相应接口的所有活动 SMB 适配器。

检查防火墙

如果只有链接本地 IP 地址,并且没有可公开路由的地址,则网络配置文件可能会设置为 “公共”。 这意味着默认情况下,SMB 在防火墙处被阻止。

以下 cmdlet 显示正在使用的连接配置文件。 还可以使用网络和共享中心来检索此信息。

Get-NetConnectionProfile

“文件和打印机共享”组下,检查防火墙入站规则,以确保为正确的配置文件启用了 SMB-In

防火墙入站规则的屏幕截图,确保为正确的配置文件启用 SMB-In。

还可以在“网络和共享中心”窗口中启用文件和打印机共享。 为此,请在左侧菜单中选择“ 更改高级共享设置 ”,然后选择“ 为配置文件启用文件和打印机共享 ”。 此选项启用文件和打印机共享防火墙规则。

“网络和共享中心”窗口中的“更改高级共享设置”的屏幕截图。

捕获客户端和服务器端流量进行故障排除

需要从 TCP 三向握手开始的 SMB 连接跟踪信息。 建议在开始捕获之前关闭所有应用程序 (特别是 Windows 资源管理器) 。 在 SMB 客户端上重启 工作站 服务,启动数据包捕获,然后重现问题。

确保正在协商 SMBv3.x 连接,并且服务器和客户端之间没有任何影响方言协商。 SMBv2 和更早版本不支持多通道。

查找 NETWORK_INTERFACE_INFO 数据包。 这是 SMB 客户端从 SMB 服务器请求适配器列表的位置。 如果未交换这些数据包,则多通道不起作用。

服务器通过返回有效网络接口列表进行响应。 然后,SMB 客户端将这些适配器添加到多通道可用适配器列表中。 此时,多通道应启动,并且至少尝试启动连接。

有关更多信息,请参阅:

在以下方案中,无法使用适配器:

  • 客户端上存在路由问题。 这通常是由不正确的路由表导致的,该表强制流量通过错误的接口。
  • 已设置多通道约束。 有关详细信息,请参阅 New-SmbMultichannelConstraint
  • 某些内容阻止了网络接口请求和响应数据包。
  • 客户端和服务器无法通过额外的网络接口进行通信。 例如,TCP 三向握手失败、连接被防火墙阻止、会话设置失败等。

如果适配器及其 IPv6 地址位于服务器发送的列表中,则下一步是查看是否通过该接口尝试通信。 按链接本地地址和 SMB 流量筛选跟踪,并查找连接尝试。 如果这是跟踪 NetConnection ,还可以检查 Windows 筛选平台 (WFP) 事件,以查看连接是否被阻止。