项目里传文件常用两种方式:FTP 和 SFTP。名字像,机制和安全性差别挺大。把两者拆开记一下。
一、FTP 协议
FTP 是 TCP/IP 协议栈里的一个协议,分服务器端(存文件)和客户端(访问服务器上的资源)。它默认用两个 TCP 端口:21 传控制信息,是否用 20 传数据取决于传输模式。FTP 有两种模式:
主动模式(Port)
![图片[1]-FTP与SFTP-本站](https://blog.azhai.de/wp-content/uploads/1.jpg)
客户端先连服务器的 21 端口建控制通道,需要收数据时在这个通道发 PORT 命令,告诉服务器用哪个端口收;服务器再主动从自己的 20 端口连到客户端指定端口把数据送过来。也就是“服务器主动连客户端”。
被动模式(Passive)
![图片[2]-FTP与SFTP-本站](https://blog.azhai.de/wp-content/uploads/2f.jpg)
控制通道的建立和主动模式类似,但建好后客户端发 PASV 命令;服务器收到后随机开一个大于 1024 的高端端口并通知客户端,客户端主动连这个端口、三次握手后由服务器从这个端口传数据。也就是“客户端主动连服务器的高端端口”。
注意:很多防火墙默认不允许外部发起连接。所以处于防火墙/内网后的 FTP 服务器常常不支持 PASV(客户端穿不过防火墙去开服务器高端端口),而内网客户端也常常没法用 PORT 模式登录(服务器 20 端口连不进内网客户端),两边都可能卡住。
二、SFTP 协议
![图片[3]-FTP与SFTP-本站](https://blog.azhai.de/wp-content/uploads/3.jpg)
SFTP 全称 SSH File Transfer Protocol,安全文件传输协议,语法和功能跟 FTP 很像,但它是 SSH 的一部分。SSH 软件包里自带 SFTP 子系统,它本身没有独立守护进程,靠 sshd(默认端口 22)完成连接和应答,所以某种程度上它更像一个客户端程序而非独立服务器。
三、两者的主要区别
![图片[4]-FTP与SFTP-本站](https://blog.azhai.de/wp-content/uploads/4.jpg)
连接方式:FTP 通过 21 端口的控制连接建立;SFTP 走 SSH 协议、在 22 端口上建立加密连接来传文件。安全性:SFTP 对认证信息和数据都加密,比明文传输的 FTP 安全得多。效率:正因为加了加解密,SFTP 的传输开销比 FTP 高、效率相对低一些。要安全就 SFTP,纯图快且不敏感的场景才考虑 FTP。
















暂无评论内容