FTP和SFTP都是文件传输协议,我们知道FTP使用的是20和21端口,SFTP使用的是22端口。另外,SFTP前面的S应该是Secure安全的意思。其他的区别可能就不太清楚了。
本文正好能够帮你补齐短板,梳理FTP和SFTP的各方面区别,明确各自的应用场景。
FTP(File Transfer Protocol)是主流的文件传输协议,能够实现文件的上传和下载功能。
FTP有两个信道:第一信道(控制信道)和第二信道(数据信道)。第一信道主要是信令的交互,用于协商FTP数据信道的传输模式和传输端口。第二信道用于传输文件。
FTP有两种传输模式:主动模式(Active Mode)和被动模式(Passive Mode)。两种模式都是从FTP服务器侧进行考虑的,如果第二信道由FTP服务器主动发起建立,则称之为主动模式。反之称之为被动模式。
FTP两个信道的协商和建立过程如下图所示。
(1)FTP客户端主动发起TCP请求,和FTP客户端建立TCP会话。
(2)经过TCP三次握手,FTP客户端和FTP服务器建立了第一信道的TCP会话。
(3)在FTP主动模式下,FTP客户端会主动向FTP服务器发送数据,用于第二信道的信息协商;在FTP被动模式下,FTP服务器开始向FTP客户端发送数据,用于第二信道的信息协商。
(4)至此,第一信道工作结束。
(5)在FTP主动模式下,FTP服务器主动发起TCP请求,和FTP客户端建立TCP会话,用于建立第二信道;在FTP被动模式下,FTP客户端主动发起TCP请求,和FTP客户端建立TCP会话,用于建立第二信道。
(6)第二信道建立完成后,进行FTP数据的传输。
另外,FTP的难点在于FTP服务器和客户端建立第二通道时可能会有问题,这受制于两端的网络环境,特别是存在防火墙的环境。
如果同学们想详细了解FTP的传输模式和防火墙对FTP传输的影响,可查找本号的《一文讲透防火墙对FTP传输的影响》文章进行学习,这里不再赘述。
SFTP(Secure File Transfer Protocol)一种安全的文件传输协议,能够为文件传输提供安全的加密通道。
SFTP作为SSH的一部分,包含在SSH软件中。SFTP自身没有独立的守护进程,需要使用sshd守护进程来完成服务器的连接和文件传输。由于SFTP作为SSH的一个组件存在,SFTP能够直接使用SSH加密通道来传输数据。
在进行SFTP数据传输前,首先需要建立SSH加密通道,如下图所示。
(1)SSH客户端主动发起TCP请求,和SSH服务器建立TCP会话。
(2)SSH客户端和SSH服务器协商认证方式。当前SSH有两种认证方式:口令认证和秘钥认证。
(3)如果使用口令认证,则SSH秘钥协商过程如下。
SSH服务器主动发送公钥给SSH客户端。SSH客户端收到公钥后,使用公钥对登陆密码加密,并回送给SSH服务器。SSH服务器使用私钥进行数据解密,并验证SSH客户端的信息合法性,如果验证通过则建立连接,进行加密通信。
(4)如果使用秘钥认证,则SSH秘钥协商过程如下。
SSH客户端主动发送本端公钥给SSH服务器。SSH服务器收到信息后,检查本端的授权列表中是否包含SSH客户端的公钥。如果存在,则生成一个随机数,并使用SSH客户端的公钥加密,生成密文回送给SSH客户端。SSH客户单收到密文后,使用私钥解密,并将随机数发回SSH服务器。SSH服务器验证随机数,如果一致,则认证通过,连接建立。
(4)SSH加密通道建立完成后,SFTP即可进行数据传输,上传和下载文件。
以下从名称、协议、安全性、架构、通道、模式、传输效率和是否开放八个方面对FTP和SFTP进行对比,总结出了两者主要的区别,如下表所示。
FTP明文传输,可以不设置密码,任何人都能访问,适用于一些公共场合,比如用于公开信息的存放,可供使用者任意下载。同时,FTP不涉及加解密,传输效率高,适用于公司内部系统间要求的高速文件传输。
SFTP密文传输,必须进行加解密,安全性高,适用于公司机密文件的传输,以及在公网中传输私有信息。同时,SFTP只有一个通道,使用的端口22端口,信道协商简单,适用于复杂网络环境中,不容易出现协商问题。
好了,今天就讲到这里,请大家持续关注我们的后续内容哦!最后如果喜欢本章内容请不要忘了进行点赞、关注与转发哦!