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  阅读(3364)  评论(0)    收藏  举报