首页/系统与基础设施/存储速查/SMB 协议版本演进与协商机制
NAS 与文件共享50 条

SMB 协议版本演进与协商机制

SMB 客户端与服务端各报自己支持的最低与最高版本,协商后取双方都支持的最高值。版本决定了加密、多通道、连续可用等能力是否可用,也是兼容老设备的主要矛盾点。

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​​‌‌‌​‌‌​​‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​‌‌​‌‌​‌​‌‌​​​‌​​​‌​‌‌​‌​‌‌‌​‌‌​​‌‌​​‌​‌​‌‌‌​​‌​​‌‌‌​​‌‌​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌​‌​‌‌​‌‌‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​‌‌‌‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

协商是怎么发生的

连接建立时,客户端发送它支持的最低与最高协议版本,服务端在两个区间里挑自己能支持的最高版本回给对方。因此实际使用的版本由较弱一方决定:一台只支持 SMB1 的老设备接入新服务器,会让这条连接落到 SMB1,即使服务端本身支持 SMB3。企业环境因此通常做法是「服务端禁用 SMB1,老设备单独隔离或替换」,而不是为个别设备把全局版本调低。

基本信息

适用平台Windows Server/Windows 客户端、Samba 与 Linux cifs 客户端
Windows 查看Get-SmbConnection、Get-SmbServerConfiguration
Linux 挂载mount -t cifs -o vers=3.1.1 指定版本
Samba 侧server min protocol / client min protocol
影响范围加密、签名、多通道、连续可用等能力是否可用

主要版本与代表能力

版本代表能力现状
SMB1早期文件共享基础协议已被主流系统弃用,建议禁用
SMB2.0请求流水线、更大读写块仅用于兼容很老的系统
SMB2.1租约机制、大 MTU仍有老系统使用
SMB3.0端到端加密、多通道、连续可用共享现阶段常见基线
SMB3.1.1预认证完整性校验、更强的加密算法套件新环境优先目标

查看与指定版本

查看与指定版本
# Windows:查看当前连接实际协商到的版本与加密状态
Get-SmbConnection | Select-Object ServerName,Dialect,Encrypted,Signing
# Windows:查看服务端协议开关(改动前先确认老设备依赖)
Get-SmbServerConfiguration | Select-Object EnableSMB1Protocol,EnableSMB2Protocol
# Linux 客户端:显式指定版本,便于定位协商问题
mount -t cifs -o vers=3.1.1,username=svc,uid=1001 //10.0.0.20/share /mnt/share
禁用 SMB1 前必须清点依赖它的设备:老旧网络存储、部分打印机与扫描仪的扫描到共享功能常年只用 SMB1。贸然全局关闭会直接中断这些设备,且它们往往无法升级。正确顺序是先盘点与隔离,再关闭。

排查协商问题

排查协商问题
Get-SmbConnection | Format-Table ServerName,Dialect,NumOpens -AutoSize   # 逐连接看版本
Get-SmbServerConfiguration | Format-List EnableSMB*                     # 服务端开关全貌
smbclient -L //10.0.0.20 -m SMB3                                        # Linux 侧按版本探测
smbstatus --version                                                     # 确认客户端工具版本是否支持目标协议

版本协商与安全能力的关系

加密、签名、多通道这些能力都不是开关式存在,而是依赖协商结果:连接落到 SMB2.1 就无法使用 SMB3 才提供的端到端加密。因此「为什么抓包看不到加密」这类问题,第一件事是确认这条连接实际协商到了哪个版本,而不是检查加密开关。

易错点

  • 为兼容一台老设备把服务端最低版本下调:全网连接的安全性随之下滑,应改为隔离老设备
  • 只看服务端开关就断定客户端会用什么版本:实际版本由协商决定,必须用连接视图确认
  • 禁用 SMB1 前没有盘点依赖设备:打印机与老存储中断,且多数无法通过升级恢复
  • 用版本号推断加密是否生效:低版本协商成功时加密选项可能静默不可用
  • 在 Linux 客户端省略 vers 依赖默认值:不同发行版的默认最低版本不一致,排查时先显式指定

数据来源与参考

  • 微软 MS-SMB2《Server Message Block (SMB) Protocol Versions 2 and 3》方言协商章节
  • 微软 Learn《SMB protocol dialects》官方文档
  • Samba 官方文档《SMB 协议方言支持》

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/storage/smb-version-negotiation.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​​‌‌‌​‌‌​​‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​‌‌​‌‌​‌​‌‌​​​‌​​​‌​‌‌​‌​‌‌‌​‌‌​​‌‌​​‌​‌​‌‌‌​​‌​​‌‌‌​​‌‌​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌​‌​‌‌​‌‌‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​‌‌‌‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​