文件网络传输协议选型

发布于 2026-05-16 10:59 更新于 2026-09-13 16:59 2668 字 14 min read

个人折腾 NAS 经历, 研究试验了各种文件网络传输协议, 记录一下选型思路和性能表现。

文件网络传输协议选型

前言

五一期间折腾 NAS 选择文件网络传输协议给我折腾坏了, 所以写篇笔记记录一下, 避免以后再踩坑。

笔者最开始使用二手白群晖, 不过随着游戏联机、服务自部署等需求逐渐壮大, 高考后立刻购入了小台式作为黑群晖, 开始折腾 NAS + HTPC + 服务器三合一家用机。

笔者硬件
笔者硬件

起初使用 Windows, 使用 VMware 运行黑群晖, 用起来处处都有问题。随后想着逃离群晖生态, 立刻安装了 Kubuntu 为二老 HTPC 需求提供类 Windows 体验, 家庭内使用 SMB 共享, 外部使用 apache2 自建 WebDAV, 不过由于个人能力不足无法进行高效的 WebDAV 账户管理。同时二老也觉得 Linux 的操作并不好用, 想要 Windows 的原生体验。最后多方查验选择使用 Proxmox PVE, 在虚拟机中运行黑群晖, 将核显直通进 Windows 虚拟机,实现电视上只能看见 Windows 的效果。中途重装不下 5 次, 网络访问也踩过不少坑, 因此写作这篇 blog。

SMB

  1. Windows 生态

SMB 是 Windows 生态的原生文件共享协议, 支持网络发现。微软从 1983 年就开始做 SMB, 迭代了好几轮, 3.x 版本基本解决了早期安全性低的问题。它主要面向企业级文件共享和协作, 在 Windows Server + Active Directory 环境里用得最多。

  1. 底层与工作方式

    • 网络层:直接运行在 TCP/IP 之上, 客户端发起 TCP 连接后, 双方先协商 SMB 版本, 再进行身份验证。
    • 会话与安全:身份验证使用 NTLM 或更安全的 Kerberos。SMB 3.0 起可以对传输数据直接加密, 无需配置复杂的 IPsec VPN。
    • 文件交互:客户端不直接读写整个文件。比如 SMB 发送 “打开文件 报告。xlsx, 读取第 100-200 字节” 这样的命令, 其会调用高效的缓存锁机制, 服务器给客户端授权一个”缓存许可”, 如果只有单个用户访问, 客户端就可以在本地缓存文件内容, 读写速度极快;同时如果有多个客户端访问同一文件, 服务器会智能地管理锁和缓存一致性, 确保数据不冲突。
  2. 性能优化

    • 多通道:客户端和服务端如果有多条网络(比如连了 WiFi + 网线), SMB 3.x 能自动发现并绑定, 同一文件的多个片段同时传, 速度可以翻好几倍。
    • SMB Direct:支持 RDMA 网卡直接把数据从 NAS 内存拉到你的内存, 绕过 CPU 和操作系统内核, CPU 占用和延迟都很低, 对高性能 NAS 很实用。

NFS

  1. Linux/Unix 生态

NFS 是 Linux/Unix 下的原生共享标准, 追求简单和高效, 在受控开发环境、渲染集群、ESXi 虚拟化后端这些场景里基本是唯一选择。

  1. 底层与工作方式

    • RPC:NFS 并非一个独立应用, 它是 Sun RPC(远程过程调用)的一个服务。它的”命令”就是一个个的远程函数, 如 NFSPROC3_READ, 参数和返回值经由 XDR 编码在网络上传输。
    • 文件定位:文件句柄:挂载时, 客户端通过 mountd 拿到一个根目录的”文件句柄”(不透明的一串字节, 服务器内部用来定位文件)。之后所有读写操作, 只需带着这个句柄发 RPC 请求, 无需每次解析路径。
    • v3 无状态 vs v4 有状态:NFS v3 是无状态的, 服务器不记忆客户端的”会话”, 每次请求都独立处理。这简化了崩溃恢复, 但引入了复杂的辅助锁协议(NLM), 且安全性薄弱(AUTH_SYS 只简单传 UID/GID)。NFSv4 则是一个有状态的全新协议, 把挂载、锁、安全都集成在一个端口(2049)内。这使其能天然集成 Kerberos(RPCSEC_GSS), 牺牲了部分无状态的简约, 换取了安全和防火墙可操作性。
  2. 性能优化

    • 读写大小:NFS v3 默认读写块大小是 4KB, v4 可以支持更大的块(比如 64KB), 减少网络往返次数。
    • 直接 I/O:NFS v4 支持直接 I/O 模式, 客户端可以绕过内核缓存直接与服务器交换数据, 适合数据库等对缓存一致性要求高的应用。
    • “Close-to-Open”缓存一致:为了性能在客户端大量缓存, 为了简单不实现 SMB 那样的锁中断。NFS 协议约定当关闭一个文件时, 所有改动才必须更新到服务器;当打开一个文件时, 必须先查询服务器文件是否被修改过, 再决定用缓存还是新数据。这种模型对程序编译、视频渲染等上下游明确的工作流非常高效。

iSCSI

iSCSI 提供的是块级存储, 不能准确算在本篇文章范围内, 因此不在此详细讨论。iSCSI 不共享文件, 而是把服务器上硬盘/分区/LVM 卷, 把 TCP 用作物理连接线直接接到电脑上。

会话建立后会多出一块”裸盘”(比如 /dev/sdc)。需要用户像新插一块硬盘一样, 自行创建分区表(gpt/mbr), 格式化为想要的文件系统(ntfs/ext4/btrfs)。小文件读写性能很好(比 SMB 快 3 倍左右), 因为完全绕过了服务器的文件系统, 直接操作底层块设备。

这块虚拟盘通常不能同时被另一台机器挂载读写(除非用集群文件系统), 否则文件系统元数据冲突会直接搞崩数据。好处是性能接近本地硬盘, 没有文件级协议的各种共享锁开销, 所以常被用来跑数据库、虚拟机虚拟磁盘——让这些应用直接管底层块, 换极致的小文件随机读写性能。

FTP & SFTP & FTPS

FTP

  1. 定位 FTP 是最古老的文件传输协议, 只是为了传文件而生。所有的内容和密码都明文传输, 目前已经被淘汰, 只有少部分学校、企业还在使用。
  2. 底层与工作方式 FTP 使用两条独立的 TCP 连接:
  • 控制连接:默认使用 21 端口。控制连接负责发送命令, 如 USER 用户名、PASS 密码、LIST 列表等, 服务器返回命令执行结果。
  • 数据连接:默认使用 20 端口。数据连接负责传输文件数据, 如 RETR 下载、STOR 上传等。每次传输都是动态建立的, 传输完成后就关闭。

FTP 这种设计带来了著名的”主动 vs 被动”模式问题:

  • 主动模式:服务器连接客户端的数据端口。由于端口极低且由服务端主动发起, 在现代网络环境中经常被 NAT 和防火墙阻止, 导致传输失败。
  • 被动模式:客户端连接服务器的数据端口。虽然解决了 NAT 问题, 但服务器需要开放大量随机端口, 增加了配置复杂度和安全风险。
  1. 性能 FTP 协议本身不支持多线程, 因此无法同时传输多个文件。此外, FTP 协议不支持断点续传, 如果传输过程中断, 需要重新开始。

FTPS

  1. 定位 FTP + SSL/TLS 加密。FTP 的安全版, 但依然存在主动被动模式的问题。
  2. 底层与工作方式
  • 显式 FTPS:客户端向服务端 21 端口发送 AUTH TLS 命令, 协商加密连接。服务器支持后立刻加密所有后续通信, 包括数据流。
  • 隐式 FTPS:客户端直接连接服务器的 990 端口, 默认使用 TLS 加密, 否则断连。服务器在这个端口上只接受加密连接, 所有通信都被保护。因为同样存在主动被动问题, 目前该协议也不太常见了。
  1. 性能 FTPS 的性能与 FTP 基本相同, 但由于加密和解密的开销, 传输大文件时可能会有明显的性能下降, 尤其是在 CPU 性能较弱的设备上。

SFTP

  1. 定位 SSH + FTP。SSH 是有端到端加密的远程通讯协议, 通常用于远程控制。SFTP 是基于 SSH 协议的文件传输协议, 其充分利用 SSH 的加密和认证机制, 保证了数据传输的安全性。
  2. 底层与工作方式 客户端和服务器之间建立 SSH 连接后, 通过 SSH 通道进行文件传输。SFTP 协议支持多线程, 可以同时传输多个文件, 并且支持断点续传。
  3. 性能 SFTP 比 FTP/FTPS 快, 因为 SSH 加密通道的网络开销更低。多线程和断点续传也有帮助。

WebDAV

  1. 我是网页!

WebDAV 是 HTTP/1.1 协议的核心扩展, 目的是把 HTTP 从单纯的”看网页”变成支持远程协作编辑。其被各大网盘作为底层, 也能在终端上提供类似网盘的体验。

  1. 底层与工作方式

    • HTTP 方法扩展:在 GET、POST 之外, 新增了 PROPFIND(获取文件详细属性)、COPY、MOVE、LOCK、UNLOCK 等。
    • TLS 安全访问:给 WebDAV 服务配上反向代理, 它就是标准的 443 端口 + TLS 加密, 可以在任何地方通过浏览器或挂载的本地盘访问, 基本不挑网络环境。
    • 锁与协作:最特别的特性是写入锁。你可以 LOCK 一个文档, 在编辑完成前, 其他人只能看不能改, 这为多人在线协同办公提供了一个很基础的底层保障。
    • 数据交互:所有操作都是标准的 HTTP 请求-响应模型, 数据可以走分块传输或范围请求, 对 CDN 和代理的穿透力是它的天生优势。不过因为是基于 XML 的属性描述和大量的请求头, 批量小文件操作的效率不及 SMB/NFS。
  2. 性能 WebDAV 比 SMB 和 NFS 慢, HTTP 协议本身有额外开销。大量小文件操作时尤其明显。大文件传输和远程协作编辑倒是完全够用。

个人推荐

  • 内网使用 SMB / NFS 传输, 家庭环境下无需考虑过多安全性。
  • 外部访问推荐使用 Openlist + WebDAV, Openlist 提供好看界面, WebDAV 提供系统文件挂载。
  • 开发可以使用 SFTP, 有公钥绝对的第一优先级。

喜欢的话,留下你的评论吧~