本文介绍如何排查与 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 连接跟踪信息,它从 TCP 三向握手开始。 建议在开始捕获之前关闭所有应用程序(特别是 Windows 资源管理器)。 在 SMB 客户端上重启“工作站”服务,启动数据包捕获,然后重现问题。
请确保正在协商 SMBv3.x 连接,并且服务器和客户端之间的任何内容都不会影响方言协商。 SMBv2 及更低版本不支持多通道。
查找 NETWORK_INTERFACE_INFO
数据包。 SMB 客户端在这里从 SMB 服务器请求适配器列表。 如果未交换这些数据包,则多通道不起作用。
服务器通过返回有效网络接口列表进行响应。 然后,SMB 客户端将这些接口添加到多通道的可用适配器列表中。 此时,多通道应该会启动,并且至少会尝试启动连接。
有关详细信息,请参阅:
在以下方案中,无法使用适配器:
- 客户端上存在路由问题。 导致它的原因通常是路由表不正确,强制流量通过错误的接口。
- 已设置多通道约束。 有关详细信息,请参阅 New-SmbMultichannelConstraint。
- 某些内容阻止了网络接口请求和响应数据包。
- 客户端和服务器无法通过额外的网络接口进行通信。 例如,TCP 三向握手失败、连接被防火墙阻止、会话设置失败等。
如果适配器及其 IPv6 地址包含在服务器发送的列表中,则下一步是查看是否通过该接口尝试通信。 按链接-本地地址和 SMB 流量筛选跟踪,并查找连接尝试。 如果这是 NetConnection
跟踪,还可以检查 Windows 筛选平台(WFP)事件,以查看连接是否被阻止。