SMB(Server Message Block)优化时,可以考虑以下几个方面的设置和配置
如何在 Windows 中检测、启用和禁用 SMBv1、SMBv2 和 SMBv3 | Microsoft Learn
Get-SmbClientConfiguration (SmbShare) | Microsoft Learn
SMB 文件服务器的性能优化 | Microsoft Learn
在 Windows 中将 SMB 客户端配置为要求进行加密 | Microsoft Learn
SMB3.0优化
进行 SMB(Server Message Block)优化时,可以考虑以下几个方面的设置和配置:进行 SMB(Server Message Block)优化时,可以考虑以下几个方面的设置和配置:
启用最新版本的 SMB:确保使用的是最新版本的 SMB 协议,如 SMB 3.1.1 或更高版本,以获得更好的性能和安全性。
启用加密:启用 SMB 加密功能可增强数据的安全性和保密性。
启用压缩:启用 SMB 压缩功能可以减小数据传输量,提高传输效率。但请注意,压缩会增加 CPU 使用量,因此需要根据实际情况进行权衡。
启用本地缓存:启用 SMB 文件和目录的本地缓存可以提高访问速度,并减少对网络的依赖。
启用多通道支持:启用 SMB 多通道可以在客户端与服务器之间建立多个网络连接并行传输数据,提高文件传输的速度和效率。
调整 MTU 大小:将 MTU(Maximum Transmission Unit)大小设置为适当的值,可以提高传输性能。较大的 MTU 值通常可以提高效率,但需要确保网络基础设施和设备都支持相应的 MTU 大小。
配置缓冲区大小:根据系统和网络状况,调整 SMB 缓冲区的大小,以平衡对内存和网络的利用。
请注意,以上只是一些建议的 SMB 优化项,具体的优化策略会因环境和需求而有所差异。在进行任何更改之前,请确保详细了解相关设置的影响,并在测试和评估后再进行实际应用。
要查看 Windows 操作系统上使用的 SMB 版本,您可以按照以下步骤操作要查看 Windows 操作系统上使用的 SMB 版本,您可以按照以下步骤操作:
打开 PowerShell 命令提示符或 PowerShell ISE(以管理员权限运行)。
在 PowerShell 中输入以下命令:
Get-SmbServerConfiguration | Select EnableSMB2Protocol, EnableSMB3Protocol
按 Enter 键执行该命令。
这将显示当前启用的 SMB 协议版本。在输出中,如果 "EnableSMB2Protocol" 的值为 True,则表示启用了 SMB 2.0 版本;如果 "EnableSMB3Protocol" 的值为 True,则表示启用了 SMB 3.x 版本。
请注意,以上命令适用于 Windows Server 2012 及更高版本、Windows 8 及更高版本。确保以管理员权限运行 PowerShell,并且您理解及了解对系统进行此类操作的影响和风险。
PS C:\Users\Administrator> Get-SmbServerConfiguration | Select EnableSMB1Protocol,EnableSMB2Protocol,EnableSMB3Protocol,EnableSMB4Protocol
EnableSMB1Protocol EnableSMB2Protocol EnableSMB3Protocol EnableSMB4Protocol
------------------ ------------------ ------------------ ------------------
False True
PowerShell 输出内容的中文和英文表格化:
| 配置项 (中文) | 配置项 (英文) | 值 |
|---|---|---|
| 启用 SMB1 协议 | EnableSMB1Protocol | 否 (False) |
| 启用 SMB2 协议 | EnableSMB2Protocol | 是 (True) |
| 启用 SMB3 协议 | EnableSMB3Protocol | 空 (无值) |
| 启用 SMB4 协议 | EnableSMB4Protocol | 空 (无值) |
这个表格列出了每个配置项的中文和英文名称,并对应显示了其值。
Get-SmbServerConfiguration | Select EnableSMB1Protocol,EnableSMB2Protocol,EnableSMB3Protocol,EnableSMB4Protocol,EnableSMB5Protocol,EnableSMB6Protocol,EnableSMB7Protocol,EnableSMB8Protocol,EnableSMB9Protocol
EnableSMB1Protocol : False
EnableSMB2Protocol : True
EnableSMB3Protocol :
EnableSMB4Protocol :
EnableSMB5Protocol :
EnableSMB6Protocol :
EnableSMB7Protocol :
EnableSMB8Protocol :
EnableSMB9Protocol :
Get-SmbServerConfiguration 命令输出的表格化结果:
| 配置项 (中文) | 配置项 (英文) | 值 |
|---|---|---|
| 启用 SMB1 协议 | EnableSMB1Protocol | 否 (False) |
| 启用 SMB2 协议 | EnableSMB2Protocol | 是 (True) |
| 启用 SMB3 协议 | EnableSMB3Protocol | 空 |
| 启用 SMB4 协议 | EnableSMB4Protocol | 空 |
| 启用 SMB5 协议 | EnableSMB5Protocol | 空 |
| 启用 SMB6 协议 | EnableSMB6Protocol | 空 |
| 启用 SMB7 协议 | EnableSMB7Protocol | 空 |
| 启用 SMB8 协议 | EnableSMB8Protocol | 空 |
| 启用 SMB9 协议 | EnableSMB9Protocol | 空 |
这个表格列出了每个配置项的中文和英文名称,以及它们对应的值。
如果您使用的是较旧的 Windows 操作系统版本,可能无法直接使用 PowerShell 命令来查看 SMB 版本。在这种情况下,您可以尝试通过其他方法,如注册表编辑器或第三方工具来查看 SMB 版本。
要查看客户端主机上的 SMB(Server Message Block)版本,可以使用以下命令:要查看客户端主机上的 SMB(Server Message Block)版本,可以使用以下命令:
在 Windows 主机上,打开命令提示符或 PowerShell,并执行以下命令:
wmic.exe /namespace:\root\microsoftdfs path msft_smbclient | findstr Dialect
这将显示客户端主机与 SMB 服务器之间使用的 SMB 版本信息。
请注意,此命令仅适用于 Windows 主机,并需要以管理员权限运行。如果您使用的是其他操作系统,请参考相应平台的文档或支持资源以获取相应的命令。
查看服务端主机上SMB版本
Get-SmbServerConfiguration | Select ServerName, @{Name="CurrentSmbVersion"; Expression={$_.MaxSupportedSmbVersion}}
要查看客户端主机上的 SMB(Server Message Block)版本,可以使用以下命令:
在 Windows 客户端主机上,打开命令提示符或 PowerShell,并执行以下命令:
Get-SmbConnection | Select ServerName, Dialect
这将显示客户端主机与 SMB 服务器之间的连接信息,包括服务器名称和使用的 SMB 版本。
请注意,此命令仅适用于 Windows 客户端主机,并需要以管理员权限运行。如果您使用的是其他操作系统,请参考相应平台的文档或支持资源以获取相应的命令。
要在 Windows 平台上开启 SMB(Server Message Block)的大型 MTU(Maximum Transmission Unit)支持,可以使用以下命令:
在管理员权限的命令提示符或 PowerShell 中执行以下命令:
Set-NetOffloadGlobalSetting -NetworkDirectAcrossIPSubnets 1
这将启用 SMB 的大型 MTU 支持,提升文件传输效率。
请注意,此命令仅适用于 Windows 平台,并需要以管理员权限运行。确保您理解及了解对系统进行此类更改的影响和风险。同时,请参考操作系统文档或支持资源以获取更多信息。
要在 Windows 平台上启用 SMB(Server Message Block) 3.0 的多通道支持,可以使用以下命令:
在管理员权限的命令提示符或 PowerShell 中执行以下命令:
Set-SmbClientConfiguration -EnableMultiChannel $true
这将启用 SMB 3.0 的多通道支持,允许客户端在与服务器建立多个网络连接时并行传输数据,提高文件传输的速度和效率。
请注意,此命令适用于 Windows 8 / Windows Server 2012 及更高版本,并需要以管理员权限运行。确保您理解及了解对系统进行此类更改的影响和风险。同时,请参考操作系统文档或支持资源以获取更多信息。
SMB直通(SMB Direct)是一种通过网络适配器直接进行高速数据传输的功能。要在 Windows 平台上启用 SMB 直通,可以使用以下命令:
在管理员权限的命令提示符或 PowerShell 中执行以下命令:
Enable-NetAdapterRdma -Name "NetworkAdapterName"
将 "NetworkAdapterName" 替换为实际的网络适配器名称。
这将启用指定的网络适配器上的 SMB 直通功能,使其能够以低延迟和高带宽的方式传输数据。
请注意,此命令适用于 Windows Server 2012 及更高版本,并且需要具有管理员权限。确保您理解对系统进行此类更改的影响和风险,并参考操作系统文档或支持资源以获取更多信息。
要在 Windows 平台上启用 SMB 的本地缓存功能,可以使用以下命令:
在管理员权限的命令提示符或 PowerShell 中执行以下命令:
Set-SmbClientConfiguration -EnableBandwidthThrottling $false
这将禁用 SMB 客户端的带宽限制,允许客户端在本地缓存文件和目录,从而提高访问速度并减少对网络的依赖。
请注意,此命令适用于 Windows 8 / Windows Server 2012 及更高版本,并需要以管理员权限运行。确保您理解及了解对系统进行此类更改的影响和风险。同时,请参考操作系统文档或支持资源以获取更多信息。
要调整 SMB(Server Message Block)协议的最大传输单元(MTU),可以使用以下命令:
在管理员权限的命令提示符或 PowerShell 中执行以下命令:
Set-NetAdapterAdvancedProperty -Name <适配器名称> -RegistryKeyword "SmbMessageSigningRequired" -RegistryValue 0
请将 <适配器名称> 替换为实际适配器的名称,您可以使用 Get-NetAdapter 命令来查看可用适配器的列表。该命令将禁用 SMB 消息签名要求,以允许更大的 MTU。
请注意,这只是调整 SMB 协议的相关设置之一,并不能直接调整 MTU 的大小。要更改网络适配器的 MTU,可以使用以下命令:
在管理员权限的命令提示符或 PowerShell 中执行以下命令:
Set-NetAdapterAdvancedProperty -Name <适配器名称> -RegistryKeyword "MTU" -RegistryValue <MTU值>
请将 <适配器名称> 替换为实际适配器的名称,并将 <MTU值> 替换为所需的最大传输单元大小。例如,常见的 MTU 值为 1500。MTU(Maximum Transmission Unit)的最大值通常是根据网络技术和协议来确定的。对于以太网(Ethernet),常见的 MTU 最大值为 1500 字节。这是因为以太网帧的数据部分最大为 1500 字节。
然而,对于其他类型的网络,MTU 的最大值可能会有所不同。例如,在某些广域网(WAN)连接中,MTU 的最大值可能会降低到 1492 字节,这是因为在传输过程中可能会添加额外的头部信息。
总体而言,当您需要调整 MTU 值时,应该首先查看所使用网络技术或协议的规范,并遵循其建议的最大值。
确保您理解和了解对系统进行此类更改的影响和风险。同时,请参考操作系统文档或支持资源以获取更多信息。
在 PowerShell 中输入以下命令:
Get-SmbServerConfiguration
配置项的中文和英文翻译,以及对应的值列表:
| 配置项 (中文) | 配置项 (英文) | 值 |
|---|---|---|
| 审计不安全的来宾登录 | AuditInsecureGuestLogon | 否 (False) |
| 审计服务器不支持加密 | AuditServerDoesNotSupportEncryption | 否 (False) |
| 审计服务器不支持签名 | AuditServerDoesNotSupportSigning | 否 (False) |
| 阻止 NTLM | BlockNTLM | 否 (False) |
| NTLM 服务器异常列表 | BlockNTLMServerExceptionList | 空 |
| 压缩性采样大小 | CompressibilitySamplingSize | 524288000 (字节) |
| 可压缩阈值 | CompressibleThreshold | 104857600 (字节) |
| 每个 RSS 网络接口的连接数 | ConnectionCountPerRssNetworkInterface | 4 |
| 目录缓存最大条目数 | DirectoryCacheEntriesMax | 16 |
| 目录缓存条目最大大小 | DirectoryCacheEntrySizeMax | 65536 (字节) |
| 目录缓存生命周期 | DirectoryCacheLifetime | 600 秒 |
| 禁用压缩 | DisableCompression | 是 (True) |
| 禁用 SMB QUIC 服务器异常列表 | DisabledSMBQUICServerExceptionList | 空 |
| 持久文件限制 | DormantFileLimit | 1023 |
| 启用带宽限速 | EnableBandwidthThrottling | 否 (False) |
| 启用只读文件的字节范围锁定 | EnableByteRangeLockingOnReadOnlyFiles | 是 (True) |
| 启用压缩性采样 | EnableCompressibilitySampling | 否 (False) |
| 启用不安全的来宾登录 | EnableInsecureGuestLogons | 否 (False) |
| 启用大 MTU | EnableLargeMtu | 是 (True) |
| 启用负载均衡扩展 | EnableLoadBalanceScaleOut | 是 (True) |
| 启用邮件槽 | EnableMailslots | 否 (False) |
| 启用多通道 | EnableMultiChannel | 是 (True) |
| 启用安全签名 | EnableSecuritySignature | 否 (False) |
| 启用 SMB QUIC | EnableSMBQUIC | 是 (True) |
| 加密算法 | EncryptionCiphers | AES_128_GCM, AES_128_CCM, AES_256_GCM, AES_256_CCM |
| 扩展会话超时 | ExtendedSessionTimeout | 1000 毫秒 |
| 文件信息缓存最大条目数 | FileInfoCacheEntriesMax | 64 |
| 文件信息缓存生命周期 | FileInfoCacheLifetime | 600 秒 |
| 文件未找到缓存最大条目数 | FileNotFoundCacheEntriesMax | 128 |
| 文件未找到缓存生命周期 | FileNotFoundCacheLifetime | 600 秒 |
| 强制 SMB 加密通过 QUIC | ForceSMBEncryptionOverQuic | 否 (False) |
| 无效认证缓存生命周期 | InvalidAuthenticationCacheLifetime | 30 秒 |
| 保持连接超时 | KeepConn | 3600 秒 |
| 最大命令数 | MaxCmds | 30 |
| 每个服务器的最大连接数 | MaximumConnectionCountPerServer | 32 |
| 禁用操作锁 (Oplocks) | OplocksDisabled | 否 (False) |
| 请求压缩 | RequestCompression | 否 (False) |
| 需要加密 | RequireEncryption | 否 (False) |
| 需要安全签名 | RequireSecuritySignature | 否 (False) |
| 会话超时 | SessionTimeout | 768 秒 |
| 跳过证书检查 | SkipCertificateCheck | 否 (False) |
| SMB2 最大方言 | Smb2DialectMax | SMB311 |
| SMB2 最小方言 | Smb2DialectMin | SMB311 |
| 使用机会性锁定 | UseOpportunisticLocking | 是 (True) |
| 窗口大小阈值 | WindowSizeThreshold | 2 |
这个表格列出了每个配置项的中文、英文名称和对应的值。
PowerShell 输出内容的翻译和表格化格式:
| 配置项 | 值 |
|---|---|
| 审计不安全的来宾登录 | 否 (False) |
| 审计服务器不支持加密 | 否 (False) |
| 审计服务器不支持签名 | 否 (False) |
| 阻止 NTLM | 否 (False) |
| NTLM 服务器异常列表 | 空 |
| 压缩性采样大小 | 524288000 (字节) |
| 可压缩阈值 | 104857600 (字节) |
| 每个 RSS 网络接口的连接数 | 4 |
| 目录缓存最大条目数 | 16 |
| 目录缓存条目最大大小 | 65536 (字节) |
| 目录缓存生命周期 | 600 秒 |
| 禁用压缩 | 是 (True) |
| 禁用 SMB QUIC 服务器异常列表 | 空 |
| 持久文件限制 | 1023 |
| 启用带宽限速 | 否 (False) |
| 启用只读文件的字节范围锁定 | 是 (True) |
| 启用压缩性采样 | 否 (False) |
| 启用不安全的来宾登录 | 否 (False) |
| 启用大 MTU | 是 (True) |
| 启用负载均衡扩展 | 是 (True) |
| 启用邮件槽 | 否 (False) |
| 启用多通道 | 是 (True) |
| 启用安全签名 | 否 (False) |
| 启用 SMB QUIC | 是 (True) |
| 加密算法 | AES_128_GCM, AES_128_CCM, AES_256_GCM, AES_256_CCM |
| 扩展会话超时 | 1000 毫秒 |
| 文件信息缓存最大条目数 | 64 |
| 文件信息缓存生命周期 | 600 秒 |
| 文件未找到缓存最大条目数 | 128 |
| 文件未找到缓存生命周期 | 600 秒 |
| 强制 SMB 加密通过 QUIC | 否 (False) |
| 无效认证缓存生命周期 | 30 秒 |
| 保持连接超时 | 3600 秒 |
| 最大命令数 | 30 |
| 每个服务器的最大连接数 | 32 |
| 禁用操作锁 (Oplocks) | 否 (False) |
| 请求压缩 | 否 (False) |
| 需要加密 | 否 (False) |
| 需要安全签名 | 否 (False) |
| 会话超时 | 768 秒 |
| 跳过证书检查 | 否 (False) |
| SMB2 最大方言 | SMB311 |
| SMB2 最小方言 | SMB311 |
| 使用机会性锁定 | 是 (True) |
| 窗口大小阈值 | 2 |
这张表格将原始配置项和对应的值清晰地展示出来,方便查看。
Get-SmbShare 命令输出的表格化翻译:
| 名称 (中文) | 范围名称 (中文) | 路径 (中文) | 描述 (中文) |
|---|---|---|---|
| IPC$ | * | 远程 IPC | Remote IPC |
SMB 优化(分解 / 诊断 / 开发 / 交付)
总体目标(优化方向)
- 提高吞吐与并发、降低延迟、保证可靠性与安全、兼顾互操作性与可维护性。
- 优先使用 SMB2/SMB3 的现代特性(多通道、RDMA、加密/签名、leases/durable handles)。
- 协议与架构分解(关键组件与影响点)
- 版本:禁用 SMBv1,优先 SMB3.1.1 → 支持 AES‑GCM、preauth。
- 连接层:SMB Multichannel(多 NIC 聚合)、SMB Direct(RDMA)用于高带宽/低延迟环境。
- 会话/认证:Negotiate → SessionSetup(Kerberos 优先,NTLMv2 次之)。
- 流量控制:credits 机制控制并发 IO;正确处理 lease/oplocks 可减少往返。
- 文件操作:异步/并发读写、oplock/byte-range locking、durable handles 支持断线恢复。
- 存储后端:文件系统性能(IOPS、延迟、队列深度、写缓存、alignment)直接决定 SMB 表现。
- 关键优化项(配置与策略)
- 启用 SMB3、SMB Multichannel、SMB Direct(有硬件支持)并测试互通。
- 优化 credits/并发:使用客户端/服务器默认机制,但在高并发场景关注 Credits 消耗与增加并发会话。
- 客户端缓存:合理使用 leases/oplocks 减少远程读;但对共享写高争用场景禁用过 aggressive 的缓存。
- 网络优化:启用 RSS/RCv/Tx checksum offload、RSC(慎重)、Jumbo frames(MTU 一致)、QoS。
- 存储层:减小延迟(NVMe/SSD、RAID 策略),调整队列深度与 I/O 调度,启用 writeback 缓存(按安全策略)。
- 加密/签名:按需求启用 SMB 加密(加密会影响吞吐),在受信网络关闭强制加密以取性能平衡。
- 操作系统参数:调整 TCP 窗口、并发 socket 限制、文件句柄上限、内核 aio 参数等(按平台)。
- Samba 特殊:启用 aio (aio read/write = yes / aio_pthread), use sendfile, vfs_fruit/fruit for macOS clients 如需。
- 连接粘性与负载均衡:确保多路径与 LB 不破坏 source IP 或 SMB Multichannel 的需求。
- 诊断要点与工具(快速定位瓶颈)
- 网络层:iperf3、ping(延迟、丢包)、tcpdump/Wireshark(tcp.port==445)分析 MSS、重传、窗口、SMB协商包。
- Windows:Perfmon(SMB Server/Client counters)、Get-SmbSession/Get-SmbConnection/Get-SmbOpenFiles、Event Viewer(SMB/SMBClient/ANR)、netstat。
- Linux/Samba:smbstatus、iotop/iostat/blktrace、sar、strace、journalctl、tcpdump。
- 存储层:fio/bonnie++(模拟负载),smartctl 检查硬盘健康,查看队列深度与延迟分布。
- 专项检查:检查是否使用 Kerberos(klist / Event logs)、是否启用多通道(Get-SmbMultichannelConnectionState)、是否有 credits 用尽/拒绝。
- 流程:确认瓶颈(CPU/网络/磁盘)→ 捕获抓包与 Perf 数据 → 定位为协议参数/存储/网络 → 调优并回测。
- 开发注意事项(客户端/服务端实现)
- 使用平台原生认证框架:Windows SSPI、GSSAPI/Kerberos;优先 Kerberos。
- 使用成熟库:SMBJ(Java)、go‑smb2、libsmbclient(C)、pysmb;避免直接实现低层协议。
- 支持协商与回退:实现 Negotiate/SPNEGO,优先 SMB3,能正确处理不同 dialects。
- 并发与异步:支持异步 IO、正确管理 credits、处理 cancellations、重试与超时策略。
- 锁与缓存:正确实现 lease/oplocks 与 byte-range locking,处理缓存一致性边界。
- 安全:默认禁用 SMB1,强制 NTLMv2 或 Kerberos,正确处理证书/加密标志,避免日志泄露凭据。
- 测试:编写互操作测试(Windows↔Samba↔NAS)、压力测试、加密启用/禁用对比测试、断连恢复测试(durable handles)。
- 交付 / 部署建议(上线检核与监控)
- 上线检查表:禁用 SMBv1、验证 Kerberos/SPN/DNS、确保 445 仅限信任网络、开启审计与性能 counters。
- 逐步发布:先在测试/灰度环境验证多通道、RDMA、加密影响,再滚动到生产。
- 监控:收集 SMB 会话数、连接数、读写吞吐/延迟、credits 使用、错误率(NT STATUS),并设置告警。
- 回滚与回退:有回滚计划(配置备份、策略回退)、性能回归基线与 KPI。
- 文档与培训:记录网络/存储要求(MTU、NIC offload、supported drivers)、维护步骤、常见故障排查流程。
- 安全合规:定期扫描、补丁管理、审计访问、对外网服务用 VPN/SMB over QUIC(如需要)或 TLS 隧道替代直接暴露 445。
- 快速优化清单(可直接实施)
- 确保 OS/firmware/driver 更新,禁用 SMB1。
- 在有多网卡/高速网络时开启 SMB Multichannel / SMB Direct。
- 对延迟敏感场景用 RDMA;无法用则优化 NIC Offloads、Jumbo Frames。
- 对大量小文件读取优化:启用客户端缓存 leases/oplocks;增加目录缓存大小。
- 对大文件吞吐优化:增加并发 IO(credits)、调整 TCP 窗口与队列深度。
- 测量前后差异:用 fio + smb 或内置 perf counters 比对。

浙公网安备 33010602011771号