FTP(File Transfer Protocol)
基于TCP/IP协议,属应用层,比http复杂。客户机给服务器发命令下载、上载文件,创建或改变服务器上的目录。
要用到两个TCP连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。
FTP是基于TCP协议的,因此iptables防火墙设置中只需要放开指定端口(默认21 + PASV端口范围)的TCP协议即可。
FTP工作模式2种:
PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了一个1024+的随机端口,你过来连接我”。于是服务器从20端口向客户端的1024+随机端口发送连接请求,建立一条数据链路来传送数据。
PASV(Passive被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了一个1024+的随机端口,你过来连接我”。于是客户端向服务器的指定端口发送连接请求,建立一条数据链路来传送数据。
PORT方式,服务器会主动连接客户端的指定端口,那么如果客户端通过代理服务器链接到internet上的网络的话,服务器端可能会连接不到客户端本机指定的端口,或者被客户端、代理服务器防火墙阻塞了连接,导致连接失败。
PASV方式,服务器端防火墙除了要放开21端口外,还要放开PASV配置指定的端口范围。
SFTP(Secure File Transfer Protocol)
安全文件传送协议。可以为传输文件提供一种安全的加密方法。SFTP与 FTP有着几乎一样的语法和功能。
SFTP为SSH的一部份,是一种传输文件到服务器的安全方式。在SSH软件包中,已经包含了一个叫作SFTP(Secure File
Transfer
Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。
SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。
SCP(Secure Copy)
SCP就是Secure copy,是用来进行远程文件复制的,并且整个复制过程是加密的。
数据传输使用ssh,并且和使用和ssh相同的认证方式,提供相同的安全保证。
比较
FTP 基于TCP来传输文件,明文传输用户信息和数据,速度较高。 SFTP 基于SSH来加密传输文件,可靠性高,可断点续传。 SCP
是基于SSH来加密拷贝文件,但要知道详细目录,不可断点续传。
参考
文件传输协议FTP、SFTP和SCP https://www.cnblogs.com/xingxia/p/system_ftp.html
代码实现 https://blog.csdn.net/weixin_43407520/article/details/107594639
https://blog.csdn.net/weixin_28943045/article/details/114797361
ftp与http传输的对比
https://blog.csdn.net/u013919153/article/details/106343417
https://www.cnblogs.com/peterYong/p/10998342.html