FTP
FTP 也就是文件传输协议(英文全称 File Transfer Protocol),属于应用层协议,专门用于在网络环境中实现客户端与服务器之间的文件交换。一套完整的 FTP 体系由 FTP 服务端和 FTP 客户端共同构成,用户既能把本地文件经由 FTP 协议推送到远程服务器,也能把服务器上的文件拉取到本地。它算得上是目前仍在使用的最早期的文件传输协议之一,是一种相当高效的文件搬运手段。
FTP 的运作机制
FTP 通信需要服务端和客户端双方在网络中建立联络。连接建立后会产生两条独立的通信链路:一条叫做命令链路,负责发送和接收操作指令;另一条叫做数据链路,专门用于双方之间的数据交换。
利用 FTP 传送文件时,用户必须向 FTP 服务端提交身份凭证才能获得传输权限。当然部分公开的 FTP 服务端或许无需凭证就能访问其中的资源,但无法确保数据在传输过程中的安全。任何未经过加密的公共网络上发送数据都极其危险,因此为了保障传输过程中的数据安全,从 FTP 演变出了下面两种协议:FTPS 和 SFTP。
FTPS
接着查了一下资料,发现 FTPS 分为 FTPS 隐式 SSL 和 FTPS 显式 SSL 两种运作方式,二者均采用 SSL 进行加密处理。那它们之间有何不同呢?
FTPS 隐式 SSL: 这种方式一般在端口 990 上运作。在此模式下,所有数据交换都必须先在客户端与服务端之间搭建 SSL 会话,而且服务端会拒绝一切不采用 SSL 的连接请求。
FTPS 显式 SSL: 显式 SSL 模式下,服务端可以同时兼容 FTP 和 FTPS 会话。会话开启前,客户端需先与 FTP 服务端建立一条未加密的连接,并在提交用户凭证之前发送 AUTH TLS 或 AUTH SSL 指令,请求服务端把命令链路切换为 SSL 加密链路。加密链路搭建成功后再把用户凭证发给 FTP 服务端,这样就能确保整个会话期间的所有指令都经由 SSL 链路自动加密。
给大家做个简洁的归纳。启用隐式模式时,FTP 的默认端口会变更为 TCP/990,服务端自动建立加密连接,同时要求客户端也必须支持加密连接方式,也就是通过 SSL 来完成连接。启用显式模式时,连接方式和默认端口与普通 FTP 保持一致,但需要通过 AUTH SSL/TLS 类指令激活加密连接后才能正常传送数据。
SFTP
最后再来了解一下 SFTP。SFTP 是 Secure File Transfer Protocol 的缩写,中文名为安全文件传送协议。
如果说 FTPS 是在 FTP 协议基础上叠加了一层 SSL 加密,那么 SFTP 则是完全基于 SSH(安全外壳)网络协议的产物,与前面提到的 FTP 有本质区别。SFTP 不采用独立的命令链路和数据链路,而是把数据和指令全部通过单一连接,以特殊格式的数据包方式进行传送。
SFTP 提供了两种身份验证方式:
第一种与 FTP 类似,连接时仅需验证用户 ID 和密码即可。但与 FTP 不同的是,这些凭证是经过加密传输的,这也是 SFTP 最核心的安全优势。
第二种是除了密码之外,还能借助 SSH 密钥来完成验证并通过 SFTP 协议建立连接。
弄清楚这几种协议之后,使用 FTP 客户端工具时就更加得心应手了,可以依据实际需要切换协议和加密方式,不必再为看不懂某项设置而发愁。
不过,新的困惑又冒了出来——传输设置里还有主动和被动两种模式,这又代表什么呢?于是又打开了搜索引擎……
FTP 软件的主动模式与被动模式有何不同
主动模式
通常 FTP 的默认工作方式就是主动模式,也叫 port 模式。
它通过两个步骤来完成工作:
第一步,客户端上的随机端口与服务端的 FTP 端口 21 建立命令链路,客户端发送 PORT 指令,指定服务端连接到客户端的某个端口,并据此建立数据链路。
第二步,服务端从端口 20 连接到客户端为数据链路指定的那个端口。连接建立后,就可以通过这些端口完成文件传送。
被动模式
在传输方式选项中,也可以手动切换为被动传输模式。在该模式下,用户端进行文件传输时,会先通过随机端口 A 连接到服务端的端口 21,并发出 PASV 指令建立命令链路,通知服务端此次采用被动方式连接。随后服务端会开启一个随机端口用于数据传送,而客户端则通过与发出指令的端口不同的随机端口 B 建立数据链路,从而实现文件传输。
被动模式与主动模式的核心差异在于谁来发起数据连接。主动模式下,客户端在命令链路建立完成后,由服务端主动发起与客户端的数据连接。而被动模式下,命令链路建立之后,改由客户端主动发起与服务端的数据连接。
正因为这个差异,两者各有优劣。比如主动模式更便于管理 FTP 服务端,因为只需开放 21 端口的入站和 20 端口的出站即可。但由于服务端连接的是客户端的随机端口,客户端可能会触发防火墙规则,甚至直接被防火墙阻断。反过来,被动模式则更有利于管理客户端一侧。
没想到一个看上去很简单的文件存储工具竟然有这么多分类和差别,不同模式、不同方式都能匹配不同的使用场景。看来以后使用工具时多少了解一些背后的原理,确实能让操作更加顺畅、更加省心。
原创文章,作者:余初云,如若转载,请注明出处:https://blog.jidcy.com/jsjc/2986.html
