文章目录
- 1、概念介绍
- 2、两种工作模式
- (1)主动模式
- (2)被动模式
- 3、被动模式出现的原因
- 4、三种认证模式
- 引申知识点:端口
- 5、FTPS和SFTP的区别
- 6、FTP相关的常见问题
1、概念介绍
File Transfer Protocol,文件传输协议,属于应用层协议,基于客户端/服务器架构,实现文件共享服务,使用TCP传输。
2、两种工作模式
FTP支持以下两种工作模式:
- 主动模式(POST):客户端向FTP服务器发送端口信息,由服务器主动连接端口。
- 被动模式(PASV):FTP服务器开启并发送端口信息给客户端,由客户端连接该端口,服务器被动接受该端口。
目前,绝大多数FTP服务器均采用被动模式,但某些场景需要使用主动模式。
(1)主动模式
主动模式的工作流程
- 客户端随机选取一个端口X,通过TCP向服务器21端口(默认端口,可以更改)发送请求,建立命令通道。命令通道一旦建立,后续无论上传、下载等其他操作指令,都会首先通过命令通道来传输。当然建立命令通道的过程中,必然少不了TCP的三次握手。
- 当涉及上传、下载等操作时,客户端会再次随机一个端口Y,通过命令通道通知服务器,请求建立数据通道。区别于只传输指令的命令通道,数据通道用于实际的数据传输。
- 服务器收到通知后,通过20端口(默认端口)主动连接客户端的端口Y,此时数据通道正式建立,客户端与服务器开始传输实际数据。
可以看到,FTP协议会用到两条链接,分别用于传输指令的命令通道和传输数据的数据通道。需要注意的是数据通道一开始并不会建立,只有在涉及数据传输时才会临时建立。
现在问题来了,看起来主动模式可以很好的工作,为什么还有一个被动模式,而且被动模式成为主流了呢? - 答案是因为实际上,客户端同服务器之间往往存在防火墙或路由器。当客户端请求建立数据通道时,服务器将会主动连接防火墙的端口Y,而不是客户端的端口Y,数据通道建立失败。此时表现为看似客户端已经连接服务器,但是无法传输数据。
要避免防火墙产生的尴尬,被动模式应运而生。
(2)被动模式
被动模式的工作流程
- 同主动模式一样,客户端随机选取一个端口X,通过TCP向服务器21端口发送请求,建立命令通道。
- 当涉及上传、下载等操作时,客户端通过命令通道通知服务器,请求建立数据通道。此时,被动模式下客户端并没有随机选择一个端口通知服务器。
- 服务器收到建立数据通道的通知后,会随机一个自身端口Z,继续通过命令通道端口Z告诉客户端。
- 客户端通过随机一个自身端口Y,主动连接服务器端口Z。此时数据通道才正式建立。
被动模式解决了客户端隐藏在防火墙背后,无法建立数据通道的弊端,因为此时数据通道的建立由客户端发起,服务器被动接受。但是,同样的当服务器隐藏在防火墙背后时,被动模式依然无法建立数据通道。 - 当然,无论是防火墙还是路由器都是有办法穿透的,这里就不赘述了。
3、被动模式出现的原因
在FTP的历史上,本来是有主动模式,但为什么又出现了被动模式呢?
很久以前还没有共享上网的技术,后来出现了也就有了下面的情况:
共享上网就是很多台电脑共享一个公网IP去使用Internet,比如:某个局域网共享210.33.25.1这个公网ip上网。当一个内网用户192.168.0.1去访问外网的FTP服务器时,如果采用主动模式的话,192.168.0.1告诉了FTP服务器我需要某个文件和我打开了x端口。由于是共享上网的原因,192.168.0.1在出网关的时候,自己的ip地址被翻译成了210.33.25.1这个公网ip。所以服务器端收到的消息是210.33.25.1需要某个文件并且打开了x端口。随后FTP服务器会往210.33.25.1的X端口传数据,这样当然不会成功,因为打开x端口的不是210.33.25.1这个地址。
在主动模式中,FTP的两个端口是相对固定的,如果命令端口是x的话,那数据端口就是x-1。在默认情况下,命令端口是21,数据端口就是20。当然两个端口号都是可以修改的。这样使用防火墙就很方便,只要开通这两个端口就可以了。但是如果客户端是共享上网的话,就不能使用正常的FTP。
所以,一定要需要被动模式。
被动模式就麻烦些,默认情况下命令端口是21,但是数据端口是随机的。
4、三种认证模式
- 匿名用户模式:任何人无需密码验证就可以直接登录FTP服务器。该模式不安全,一般只用传输不重要的公共文件,不推荐在生产环境中使用。
- 本地用户模式:通过linux系统本地用户验证登录权限,相较于匿名用户模式更加安全。
- 虚拟用户模式:通过虚拟用户验证登录权限,虚拟用户只能访问linux系统为其提供的FTP服务,而不能访问linux系统的其他资源。该模式相较于其他两种模式更加安全,如果对服务器的数据有较高的安全需求,可以在相关专业人员的指导下,自行配置该模式。
引申知识点:端口
端口,可以简单理解为,计算机与外界通讯交流的出口。
在网络技术中,端口(port)大致有两个意思:一是物理上的端口,又称接口,比如ADSL Modem、交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等;二是软件上的端口,一般是指TCP/IP协议中的端口,端口范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。
软件端口的作用:对TCP/IP体系的应用进程进行统一的标志,是使运行不同操作系统的计算机的应用进程能够相互通信。
面向连接服务的TCP协议和无服务的UDP协议使用16bits端口号(端口范围为0~65535)来表示和区别网络中不同应用程序,网络层协议IP使用特定的协议号(TCP 6,UDP 17)来表示和区别传输层协议。
端口的三大分类:
- 公认端口(Well Known Ports):从0到1023,它们紧密绑定(binding)于一些服务。通常这些端口的通讯表明了某种服务的协议。例如:实际80端口总是HTTP通讯。
- 注册端口(Registered Ports):从1024到49151。它们松散地绑定一些服务。也就是说许多服务绑定于这些端口,这些端口同样用于许多其他目的。例如:许多系统处理动态端口从1024左右开始。
- 动态和/或私有端口(Dynamic and / or Private Ports):从49152到65535。理论上,不应为这些服务分配这些端口。实际上,机器通常从1024起分配动态端口。但也有例外:SUN的RPC端口从32768开始。
5、FTPS和SFTP的区别
使用FTP传输文件时,用户需要通过向FTP服务器提供凭据来获得文件传输许可。当然某些公共FTP服务器可能不需要凭据即可访问其文件,但是无法保证数据传输的安全性。任何未加密公共网络上的数据发送都是非常危险的,所以为了保护传输数据的安全,由FTP衍生而出的就是以下两种协议:FTPS和SFTP。
FTPS分FTPS隐式SSL和FTPS显式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
Secure File Transfer Protocol,安全文件传送协议。
FTPS是在FTP协议上增加了一层SSL,SFTP是基于网络协议SSH(安全外壳)的协议,与FTPS完全不同。SFTP不使用单独的命令通道和数据通道,而是数据与命令都会通过单个连接以特殊格式的数据包进行传输。
SFTP提供了两种验证连接的方法:
- 与FTP一样,连接时只需要验证用户ID和密码。但是,与FTP不同的是,这些凭据是加密的,这是SFTP最主要的安全优势。
- 除密码外,还可以通过SSH密钥来验证并通过SFTP协议连接。
6、FTP相关的常见问题
- 对服务器而言,开放服务,提供文件的上传、下载,其行为本身就很危险。如果确实需要开启FTP服务,务必配置好用户权限。
- FTP本身是明文传输,所以协议本身并不安全。可以考虑使用SSH自带的SFTP。
- 如果遇到“可以连接FTP服务器,但是无法传输文件”的情况,可以从FTP的模式以及服务器的文件权限下手排查问题。