FTP 与 SFTP:两种文件传输协议的区别

项目里传文件常用两种方式:FTP 和 SFTP。名字像,机制和安全性差别挺大。把两者拆开记一下。

一、FTP 协议

FTP 是 TCP/IP 协议栈里的一个协议,分服务器端(存文件)和客户端(访问服务器上的资源)。它默认用两个 TCP 端口:21 传控制信息,是否用 20 传数据取决于传输模式。FTP 有两种模式:

主动模式(Port)

图片[1]-FTP与SFTP-本站

客户端先连服务器的 21 端口建控制通道,需要收数据时在这个通道发 PORT 命令,告诉服务器用哪个端口收;服务器再主动从自己的 20 端口连到客户端指定端口把数据送过来。也就是“服务器主动连客户端”。

被动模式(Passive)

图片[2]-FTP与SFTP-本站

控制通道的建立和主动模式类似,但建好后客户端发 PASV 命令;服务器收到后随机开一个大于 1024 的高端端口并通知客户端,客户端主动连这个端口、三次握手后由服务器从这个端口传数据。也就是“客户端主动连服务器的高端端口”。

注意:很多防火墙默认不允许外部发起连接。所以处于防火墙/内网后的 FTP 服务器常常不支持 PASV(客户端穿不过防火墙去开服务器高端端口),而内网客户端也常常没法用 PORT 模式登录(服务器 20 端口连不进内网客户端),两边都可能卡住。

二、SFTP 协议

图片[3]-FTP与SFTP-本站

SFTP 全称 SSH File Transfer Protocol,安全文件传输协议,语法和功能跟 FTP 很像,但它是 SSH 的一部分。SSH 软件包里自带 SFTP 子系统,它本身没有独立守护进程,靠 sshd(默认端口 22)完成连接和应答,所以某种程度上它更像一个客户端程序而非独立服务器。

三、两者的主要区别

图片[4]-FTP与SFTP-本站

连接方式:FTP 通过 21 端口的控制连接建立;SFTP 走 SSH 协议、在 22 端口上建立加密连接来传文件。安全性:SFTP 对认证信息和数据都加密,比明文传输的 FTP 安全得多。效率:正因为加了加解密,SFTP 的传输开销比 FTP 高、效率相对低一些。要安全就 SFTP,纯图快且不敏感的场景才考虑 FTP。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容