云存储服务常见通信协议

整理了一些云存储的通信协议。

1. FTPS & SFTP & SCP

FTP(File Transfer ProtocoL)是TCP/IP应用层中的一个基础协议,FTP的默认端口是20和21,负责将文件从一台计算机传输到另计算机,并保证文件传输的可靠性。FTP 协议的历史源远流长,最早可以追溯到 1971 年(RFC 114RFC 959)。由于FTP协议使用明文传输,存在安全问题,因此后来有人将TLS加密协议与FTP传输协议结合起来,推出了FTPS协议(RFC 4217)。FTPS支持在990端口上以全SSL加密的形式进行运行(隐式SSL模式),也兼容原始的FTP协议并在20/21端口运行(显式SSL模式)。

安全外壳协议(Secure Shell,SSH)(RFC 4253),是一种加密的网络传输协议,默认使用22端口建立会话。在SSH基础上有两种文件传输协议,分别是SFTP和SCP。二者都使用SSH进行加密,SFTP是一个完整的文件传输系统,提供了文件传输、删除、重命名、创建目录等操作,并支持断点续传,而SCP则是一个简单的文件复制命令,主要用于在服务器之间复制文件,不支持断点续传。

总结:

  • FTPS=FTP+TLS;
  • SFTP=SSH+文件传输+管理;
  • SCP=SSH+文件传输

2. webDAV

WebDAV (Web-based Distributed Authoring and Versioning)是一种基于HTTP 1.1协议的通信协议(RFC 4918)。它扩展了HTTP 1.1协议,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可对Web Server 直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。WebDAV的优点是使用方便、支持多种操作系统和应用程序、支持锁定机制和版本控制。WebDAV的缺点是安全性不高、传输效率低、需要额外的软件支持。许多云存储服务都支持WebDAV协议,包括国外的Box、Dropbox、Google Drive等,以及国内的坚果云。

3. NFS

NFS(Network File System,网络文件系统)是一种允许多个客户端访问同一服务器上的文件的网络文件系统与传输协议(RFC 7530)。NFS的优点是内核直接支持、传输效率高、运行稳定。由于NFS使用起来非常方便,因此在UNIX操作系统中被广泛使用,特别是在一些大型数据中心和计算集群中,常用于分布式存储设备的互相连接。此外,一些NAS管理系统,例如群晖系统(Synology NAS)也使用这一协议进行存储设备的组网。

4. SMB/SAMBA

SMB/CIFS(Server Message Block / Common Internet File System)通信协议是微软和英特尔在1987年制定的协议(MS-SMB),主要是作为Microsoft网络的通讯协议,可以在局域网不同计算机之间进行文件、打印机等资源共享,和 NFS 功能类似。最早SMB是微软为自己需求设计的专用协议,用来实现微软主机之间的文件共享与打印共享,并不支持在 Linux 上运行。著名程序员 Andrew Tridgell 逆向了这个协议,并开发出了一组被称为Samba的软件包,从而使Linux系统上也支持了这个传输协议。

根据微软必应AI的介绍,SMB的优点是兼容性好、支持端到端加密、支持多种用户认证模式、支持ACL权限控制,然而其缺点是传输效率稍低、速度不太稳定、会有波动。单从介绍上看,SMB/Samba是一个很优秀的传输协议/软件。不过在Linux上配置Samba的流程挺复杂的,和NFS有得一拼。(这两个协议也真的是……唉。不过,个人用户用sshfs和webDAV似乎也够用了(?))

一点补充内容

刷知乎的时候,看到一个很有趣的回答,作者比较了这几个文件传输协议并阐述了webDAV协议被许多网盘使用的原因。这个回答很切题,特此转载:

《为什么国内各大云存储服务都不支持 WebDAV?》 - LSZH的回答 - 知乎

看了一圈答案全是阴谋论。实际上就是个技术问题。

主流文件存储网盘协议一共就这么几个:ftps、nfs、smb、webdav、sftp

对于互联网盘,即「数据在云上,用数据的人在本地或另一个云上」通过互联网连接的网盘:

  • nfs 和 smb 没有无限缓冲,所以只在低延迟的局域网上才能跑满带宽,在高延迟互联网上性能非常拉胯。排除。
  • ftps 不支持流媒体,因为不完全支持随机读取,只能指定从哪开始读,不能指定读到哪,所以在线播放必须一次性缓冲到底,内存会爆。而流媒体是公共网盘的重要功能,排除。
  • sftp 底层是 ssh 而不是 tls 所以不能自动公共认证,在互联网上你不能保证你家网盘的用户连到的是你的真网盘而不是黑客给你劫持的假网盘。

所以只有自己搭建自己用的私有互联网盘才会用 sftp,而厂家搭建给消费者用的公共互联网盘只能 webdav。

对于局域网盘,即「数据和用数据人在同一个云上,或在本地同一个局域网内」直接挂载的网盘:

  • sftp 主流版本不支持文件锁。排除。
  • ftps 和 webdav 不支持随机写入。排除。

所以只能 nfs 或 smb。

所以你看那些提供 webdav 的网盘都是消费级公共互联网盘如坚果云、onedrive,或自己搭建的私有互联网盘如nextcloud、owncloud等

而那些云服务商的商用局域网盘都只支持 smb 和 nfs,如阿里云nas,亚马逊efs等

参考文献