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)。
  1. 协议与架构分解(关键组件与影响点)
  • 版本:禁用 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 表现。
  1. 关键优化项(配置与策略)
  • 启用 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 的需求。
  1. 诊断要点与工具(快速定位瓶颈)
  • 网络层: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 数据 → 定位为协议参数/存储/网络 → 调优并回测。
  1. 开发注意事项(客户端/服务端实现)
  • 使用平台原生认证框架: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)。
  1. 交付 / 部署建议(上线检核与监控)
  • 上线检查表:禁用 SMBv1、验证 Kerberos/SPN/DNS、确保 445 仅限信任网络、开启审计与性能 counters。
  • 逐步发布:先在测试/灰度环境验证多通道、RDMA、加密影响,再滚动到生产。
  • 监控:收集 SMB 会话数、连接数、读写吞吐/延迟、credits 使用、错误率(NT STATUS),并设置告警。
  • 回滚与回退:有回滚计划(配置备份、策略回退)、性能回归基线与 KPI。
  • 文档与培训:记录网络/存储要求(MTU、NIC offload、supported drivers)、维护步骤、常见故障排查流程。
  • 安全合规:定期扫描、补丁管理、审计访问、对外网服务用 VPN/SMB over QUIC(如需要)或 TLS 隧道替代直接暴露 445。
  1. 快速优化清单(可直接实施)
  • 确保 OS/firmware/driver 更新,禁用 SMB1。
  • 在有多网卡/高速网络时开启 SMB Multichannel / SMB Direct。
  • 对延迟敏感场景用 RDMA;无法用则优化 NIC Offloads、Jumbo Frames。
  • 对大量小文件读取优化:启用客户端缓存 leases/oplocks;增加目录缓存大小。
  • 对大文件吞吐优化:增加并发 IO(credits)、调整 TCP 窗口与队列深度。
  • 测量前后差异:用 fio + smb 或内置 perf counters 比对。

 

posted @ 2023-07-01 00:14  suv789  阅读(2763)  评论(0)    收藏  举报