吃透FTP

649 阅读4分钟

FTP,即文件传输协议(File Transfer Protocol),作为仍然活跃的客户端--服务端之间的传输协议,其历史可以追溯到上世纪70年代。

今天老张给大家全方位的讲讲FTP,如果你之前很少接触FTP或者对FTP一知半解,老张保证大家看完本篇文章之后,可以在实际当中得心应手的应用与处理FTP相关工作。


1.FTP的工作模式


FTP有两种工作模式,分别是主动模式和被动模式,目前绝大多数FTP服务器均采用了被动模式,但是某些场景下还是需要使用主动模式的。

现在是不是一头雾水?不要急,拿出小本本,重点来了!


1.1主动模式


①客户端随机选取一个端口X,通过TCP向服务器21端口(默认端口,可以更改)发送请求,建立命令通道。命令通道一旦建立,后续无论上传、下载等其他操作指令,都会首先通过命令通道来传输。当然建立命令通道的过程中,必然少不了TCP的三次握手。

②当涉及上传、下载等操作时,客户端会再次随机一个端口Y,通过命令通道通知服务器,请求建立数据通道。区别于只传输指令的命令通道,数据通道用于实际的数据传输。

③服务器收到通知后,通过20端口(默认端口)主动连接客户端的端口Y,此时数据通道正式建立,客户端与服务器开始传输实际数据。


可以看到,FTP协议会用到两条连接,分别用于传输指令的

命令通道
和传输数据的
数据通道
。需要注意的是数据通道一开始并不会建立,只有在涉及数据传输时才会临时建立。


现在问题来了,看起来主动模式可以很好的工作的,为什么还有一个被动模式,而且被动模式成为了主流呢?



客户端隐藏在防火墙后面的模型

答案是因为现实世界中,客户端同服务器之间往往存在防火墙或者路由器。当客户端请求建立数据通道时,服务器将会主动连接防火墙的端口Y,而不是客户端的端口Y,数据通道建立失败。此时表现为看似客户端已经连接服务器,但是无法传输数据。

有没有办法避免因为防火墙产生的尴尬呢?被动模式应运而生。


1.2 被动模式


①同主动模式一样,客户端随机选取一个端口X,通过TCP向服务器21端口发送请求,建立命令通道。

②当涉及上传、下载等操作时,客户端通过命令通道通知服务器,请求建立数据通道。此时,被动模式下客户端并没有随机选择一个端口通知服务器。

③服务器收到建立数据通道的通知后,会随机一个自身端口Z,继续通过命令通道将端口Z告诉给客户端。

④客户端通过随机一个自身端口Y,主动连接服务器端口Z。此时数据通道才正式建立。


被动模式解决了客户端隐藏在防火墙背后,无法建立数据通道的弊端,因为此时数据通道的建立由客户端发起,服务器被动接收。但是,同样的当服务器隐藏在防火墙背后时,被动模式依然无法建立数据通道。


不同模式适用于不同场景

当然,无论防火墙还是路由器都是可以有办法穿透的,老张就不在这里赘述了。


2.FTP服务器的搭建


讲清楚了原理,搭建FTP服务器就显得简单了许多。

  • Linux下可以选择安装vsftpd服务。

  • Windows下可以使用系统自带的IIS中的FTP服务。

具体的搭建过程,大家可以自行搜索查阅。


3.FTP客户端的选择


这里老张强烈推荐XFTP,另外还有一款Filezilla也不错。老张提醒一句,在使用软件连接FTP服务器的时候注意区分FTP服务器的模式。


4.FTP的常见问题


  1. 对服务器而言,开放服务,提供文件的上传、下载,其行为本身就很危险。如果确实需要开启FTP服务,务必配置好用户权限。

  2. FTP是明文传输,所以协议本身并不安全。可以考虑使用SSH自带的SFTP。

  3. 如果遇到“可以连接FTP服务器,但是无法传输文件”的情况,可以从FTP的模式以及服务器的文件权限下手排查问题。