服务器消息块 (SMB) 是一种关键的网络文件共享协议,使用户和应用程序能够通过网络访问文件、打印机和其他共享资源。SMB 常用于 Windows 环境,可实现客户端与服务器系统之间的无缝通信。本文将探讨 SMB 的工作原理、组成部分、常见的故障排除步骤,以及解决 SMB 相关问题的最佳实践。
目录
什么是 SMB?
服务器消息块 (SMB)是一种网络协议,允许用户像操作本地文件一样读取、写入和管理远程服务器上的文件。SMB 广泛用于 Windows 网络,实现对文件、打印机和串行端口的共享访问。它还受到 Linux 和 macOS 系统的支持,因此成为跨平台通信的一种通用协议。
SMB 的工作原理
- 客户端请求:SMB 客户端(例如 Windows、Linux 或 macOS)向 SMB 服务器发送请求,以访问共享资源。
- 服务器响应:SMB 服务器根据身份验证和权限验证该请求。
- 资源访问:一旦获得访问权限,客户端就可以像操作本地驱动器上的文件一样读取、写入或修改文件。
关键 SMB 术语
- SMB 服务器 (SRV):托管共享文件系统的系统。
- SMB 客户端 (CLI):访问共享文件系统的系统。
例如,如果一台 Windows Server 2016 计算机访问 SMB 共享\\MyWorkstation\Data(位于一台 Windows 10 计算机上),该服务器是SMB 客户端,而该工作站是SMB 服务器.
SMB 版本
1. SMB 1.0(旧版)
- 易受 WannaCry 和 EternalBlue 等攻击的影响。
- 缺乏现代安全功能。
2. SMB 2.0 / 2.1
- 性能和安全性均有提升。
- 支持更大的缓冲区大小,以实现更高的数据传输速率。
3. SMB 3.0+
- 引入加密以增强安全性。
- 功能包括 SMB Multichannel 和 SMB Direct,可实现高速文件传输。
SMB 组件
1. 二进制文件
- SMB 客户端二进制文件:位于
%windir%\system32\Drivers:RDBSS.sysMRXSMB.sysMRXSMB10.sysMRXSMB20.sysMUP.sysSMBdirect.sys
- SMB 服务器二进制文件:
%windir%\system32:Srvsvc.dll%windir%\system32\Drivers:SRVNET.sys,SRV.sys,SRV2.sys,SMBdirect.sys
2. 绑定
- SMB 客户端绑定:
Client for Microsoft Networks - SMB 服务器绑定:
File and Printer Sharing for Microsoft Networks

SMB 端口与通信
根据所使用的协议,SMB 可以通过不同的端口运行:
| 协议 | 端口 | 说明 |
|---|---|---|
| NetBIOS over TCP/IP | UDP 137 | 名称解析 |
| NetBIOS over TCP/IP | UDP 138 | 数据报服务 |
| NetBIOS over TCP/IP | TCP 139 | 会话服务 |
| 通过 TCP 的直接 SMB | TCP 445 | 默认 SMB 通信 |
现代网络主要使用TCP 445,而较旧的系统可能依赖 NetBIOS。
如何排查 SMB 问题
1. 验证连接
- 确保客户端能够通过TCP 445:
Test-NetConnection <server_IP_or_hostname> -Port 445
- 如果失败,请检查 Azure 防火墙、NSG 或本地防火墙是否阻止了 SMB 流量。
2. 检查名称解析
- 通过主机名和 IP 测试服务器访问:
nslookup <server_hostname>
- 如果主机名解析失败,请验证 DNS 配置。
3. 验证 SMB 服务
- 确保所需的服务正在运行:
Get-Service -Name LanmanServer, LanmanWorkstation
- 如果服务已停止,请启动服务:
Start-Service -Name LanmanServer, LanmanWorkstation

4. 检查防火墙规则
- 确认 SMB 规则已启用:
netsh advfirewall firewall show rule name="File and Printer Sharing (SMB-In)"

5. 验证权限
- 通过文件夹属性或 CMD 检查共享权限和 NTFS 权限:
net share <sharename>
icacls <folder_path>


6. 使用 UNC 路径测试访问
- 打开
Run(Win + R) 并输入:
\\<server_IP_or_hostname>\sharename
高级故障排除与数据收集
1. 检查 SMB 会话
- 显示活动的 SMB 会话:
Get-SmbSession
2. 重置 SMB 配置
- 禁用并重新启用 SMB 2 和 SMB 3:
Set-SmbServerConfiguration -EnableSMB2Protocol $true -Force
3. 网络跟踪
- 使用 Wireshark 收集与 SMB 相关的网络数据包:
- 开始在 SMB 客户端和服务器上同时捕获流量。
- 重现该问题。
- 分析数据包,查找 SMB 错误或超时。
4. 收集事件日志
- 导出与 SMB 相关的事件日志以供进一步分析:
- SMB 客户端日志。
- SMB 服务器日志。

参考文档:
服务器消息块 (SMB) 高级故障排除 | Microsoft Learn
SMB 故障排除指南 – Windows Server | Microsoft Learn
Microsoft SMB 协议和 CIFS 协议概述 – Win32 应用 | Microsoft Learn
在 Windows 中检测、启用和禁用 SMBv1、SMBv2 和 SMBv3 | Microsoft Learn
Windows Server 中使用 SMB 3 协议进行文件共享的概述 | Microsoft Learn
服务器消息块签名概述 – Windows Server | Microsoft Learn
结论
SMB 是一种功能强大的文件共享和资源访问协议,但由于配置错误、网络限制或组件过时,可能会出现问题。按照上述故障排除步骤操作,您可以有效地识别和解决 SMB 相关问题。对于复杂的问题,网络跟踪和事件日志等高级诊断方法可以提供更深入的见解。