SMB协议

关注
义项:网络文件共享协议
SMB协议

SMB协议(Server Message Block, 服务器消息块)是一种应用层的网络文件共享协议, 主要用途是让网络上的计算机共享文件、打印机和串行端口等资源, 同时提供经过认证的进程间通信机制[1]。它在 Windows 系统中被默认用作文件和打印机共享协议, 衍生出 CIFS 等方言, 并可在类 Unix、OpenVMS 等系统上实现[2]。SMB 自 20 世纪 80 年代诞生以来经历了多个版本迭代, 是局域网文件共享领域影响最广的协议之一。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

SMB协议是一种应用层的网络通信协议, 用于让网络上的节点之间共享文件、打印机和串行端口, 并进行多种形式的信息交换[3]。它采用客户端—服务器结构, 客户端提出请求, 服务器作出应答, 服务器把自己的文件系统和其他资源开放给网络上的客户端使用[3]。

在 Microsoft Windows 中实现的版本被称作 Microsoft SMB 协议, 定义某一版本协议的消息数据包集合称为方言, 通用 Internet 文件系统(CIFS)协议就是 SMB 的一种方言[2]。除文件共享外, SMB 还支持方言协商、网络浏览、网络打印、共享访问身份验证、文件与记录锁定、文件和目录变更通知以及 Unicode 等功能[2]。

原理

SMB 属于客户端—服务器模式的实现, 由一组数据包构成, 每个数据包承载客户端发出的请求或服务器给出的响应。这些数据包大致分为三类: 会话控制数据包用于建立和终止与共享服务器资源的连接, 文件访问数据包用于访问和操作远程服务器上的文件与目录, 常规消息数据包则把数据送往打印队列、邮件槽和命名管道, 并提供打印队列状态信息[2]。为降低应答延迟、提高带宽利用率, 多个消息数据包可以合并到一次传输中发送, 这种做法称为批处理[2]。

在 OSI 网络模型中, SMB 通常被归为应用层或表示层协议, 依赖较低层的传输协议承载; 最常用的传输层协议是运行在 TCP/IP 之上的 NetBIOS(NBT), 也可以不使用单独的传输协议[2]。直接承载于 TCP 的 SMB 通信使用 445 端口, 此类流量不再经过 NetBT, 报文前有 4 字节头部, 首字节固定为 0x00, 其后 3 字节表示数据长度; 经由 NetBT 会话承载的 SMB 则建立在 TCP 139 端口上[4]。SMB 的进程间通信机制提供命名管道, 使程序员能够利用客户端首次连接 SMB 服务时完成的认证, 一些服务如基于 SMB 的 MSRPC 都建立在命名管道之上[1]。

发展历程

SMB 的核心最初由 IBM 的贝瑞·费根鲍姆(Barry Feigenbaum)设计, 他起初用自己的姓名缩写将其命名为 BAF, 后来改称 SMB; 该协议最初的目的是把 DOS 系统中的本地文件接口改造成网络文件系统[5]。原始协议运行在 NetBIOS 之上, 其命令基本是 DOS 文件读写接口的翻版, 效率不高, 早期也不具备身份验证, 网络上的任何人都可以读写[5]。IBM 于 1984 年发布了最初的 SMB 规范, 1985 年至 1992 年间 IBM、3Com、Intel 与微软共同对协议进行扩展, 使其成为 DOS、OS/2 和 Windows 等系统的默认文件系统协议[6]。

1996 年, 微软对 SMB 加以扩展并改称通用 Internet 文件系统(CIFS), 同时加入了符号链接、硬链接和更大的文件尺寸等能力; 这一提议停留在互联网草案阶段, 未成为正式标准, 微软后来停用了 CIFS 这一名称[7]。Windows Vista 与 Windows Server 2008 中引入了 SMB 2.0, 协议包格式与 SMB 1.0 完全不同; 2.1 版随 Windows 7 与 Windows Server 2008 R2 出现, 3.0 版则随 Windows 8 与 Windows Server 2012 推出[8][9]。

SMB 2.0 相较 1.0 允许多个操作同时进行, 而 1.0 只能执行一个操作并等待响应后才能继续, 因此 2.0 在文件复制上速度明显更快; 2.0 还支持在网络短暂中断后维持并续传文件[10]。3.0 版则加入了 SMB Direct(基于远程直接内存访问的 SMB)、SMB 加密、SMB 多通道和透明故障转移等特性[11]。3.1.1 版开始协商加密与完整性算法, 并提供预认证完整性校验与压缩能力[12]。

应用

SMB 最常见的用途是局域网内的文件共享与远程打印, 普通用户熟悉的网络邻居和远程打印功能背后就是这一协议[5]。在 Windows 上, 网络共享由 网络组件「文件和打印机共享」提供, 其他操作系统也可以实现该协议, 例如 Samba 就是一个可运行在类 Unix 及 OpenVMS 等系统上的 SMB 服务器, 它能让 Windows 计算机访问非 Windows 系统上的共享[13]。

SMB 也是 微软 分布式文件系统实现的基础, 虚拟化平台 Hyper-V 采用 SMB 作为基于文件的存储协议, 该协议自 Windows 2000 起随系统提供[1][10]。SMB 3.0 中的 SMB Direct 可借助支持 RDMA 的网卡提升性能, SMB 多通道则允许一次 SMB 会话绑定多条网络连接, 从而聚合带宽并提高容错性[11]。近年出现了 SMB over QUIC, 它在 SMB 3.1.1 之上改用基于 UDP 的 QUIC 传输, 默认以 TLS 加密, 并使用 UDP 443 端口而非 TCP 445 端口, 客户端自 Windows 11 起提供支持[14]。

局限

SMB 传统上依赖 TCP 445 端口, 而这一端口常被防火墙、运营商或云安全组封禁, 导致共享无法建立; 排查此类问题时通常需要确认 445 端口是否开放[15][16]。同时, SMB 在广域网上的表现受限, 高延迟或丢包会明显拖慢握手和传输过程, 早期版本也不具备校验和验证机制, 在延迟较高的网络中容易出现性能问题[17]。

SMB 的早期版本存在明显安全短板。SMB 1.0 缺少加密与预认证完整性校验、对不安全来宾登录的限制以及防降级攻击等机制, 其漏洞曾被多个高危攻击利用, 微软已于 2014 年正式弃用该版本, 并从 Windows 10 1709 和 Windows Server 1709 起不再默认安装[18][19]。协议规范长期闭源, 最初只以私有形式提供, 其他厂商和项目不得不通过逆向工程来实现互通, SMB 1.0 的规范是在被逆向工程之后才发布的[20]。

不同版本之间存在兼容性约束。SMB 2.0 只在客户端与服务器双方都支持时才可使用, 若有一方不支持, 通信会退回 SMB 1.0[8]。禁用了 SMBv1 之后, 仍依赖该版本的旧计算机或旧软件可能出现兼容问题[21]。SMB over QUIC 同样只支持 SMB 3.1.1, 无法兼容旧客户端, 并且需要配置 TLS 证书与 QUIC 端点[14]。

参见

  • CIFS —— SMB 的一种方言, 是微软 1996 年为 SMB 提出的扩展版本名称。

  • Samba —— 在类 Unix 等系统上以自由软件方式重新实现 SMB 协议的服务端与客户端。

  • 网络文件系统 —— 与 SMB 面向相似场景的另一套网络文件访问协议。

  • NetBIOS —— SMB 早期所依赖的会话层接口, 其后衍生出运行在 TCP/IP 上的版本。

  • 远程直接内存访问 —— SMB Direct 借助该技术提升文件访问性能。

参考资料

  1. [科普中国]-服务器消息块协议 [引用日期2026-10-14]
  2. Microsoft SMB 协议和 CIFS 协议概述 [引用日期2026-10-14]
  3. SMB プロトコルの説明 [引用日期2026-10-14]
  4. Server Message Block and NetBIOS - INTERNET-DRAFT A [引用日期2026-10-14]
  5. The SMB/CIFS protocol [引用日期2026-10-14]
  6. CIFS_POSIX_extensions [引用日期2026-10-14]
  7. Server Message Block [引用日期2026-10-14]
  8. ms10-054 [引用日期2026-10-14]
  9. SMB3 [引用日期2026-10-14]
  10. Server Message Block [引用日期2026-10-14]
  11. smb-3-file-server-features [引用日期2026-10-14]
  12. Guidelines-for-Writing-Modules-with-SMB [引用日期2026-10-14]
  13. 共享资源 [引用日期2026-10-14]
  14. SMB over QUIC: Secure File Sharing without a VPN [引用日期2026-10-14]
  15. storage-files-networking-overview [引用日期2026-10-14]
  16. SMBJ连接超时常见原因有哪些? - 黎小葱 2025-10-03 14:25 采纳率: 98.5% [引用日期2026-10-14]
  17. Revision 381ae892-685b-44d7-bc23-ddd36b8776dc [引用日期2026-10-14]
  18. 微软承认 9 月 Win10 / Win11 更新导致 SMBv1 共享失效 [引用日期2026-10-14]
  19. Disabling SMBv1 on Windows desktops [引用日期2026-10-14]
  20. Server Message Block [引用日期2026-10-14]
词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T21:29:53Z

历史版本

本条目引用的词条
Microsoft Windows Samba 微软 CIFS 网络文件系统 NetBIOS 远程直接内存访问