连接FTP服务器时。若没有指定连接模式,FTP将根据操作系统使用默认的连接模式。
基础知识:
FTP只通过TCP连接,没有用于FTP的UDP组件.FTP不同于其他服务的是它使用了两个端口, 一个数据端口和一个命令端口(或称为控制端口)。通常21端口是命令端口,20端口是数据端口。当混入主动/被动模式的概念时,数据端口就有可能不是20了。
主动模式:
图示:
在真实连接过程中,1026与1027端口是随机的,并不一定是这两个。
N = 1026
1、 客户端N(N>1023)端口 向 服务器 21端口 发出一个请求。
2、服务器 21端口 向 客户端 N 端口 响应请求:完成控制端口的连接。(在这个过程中服务器得到了客户端请求的端口号)。
3、服务端20端口 向 客户端N+1端口 发送请求。
4、客户端N+1端口 向 服务端20端口 响应请求。完成数据端口连接。
在第1步中,客户端的命令端口与FTP服务器的命令端口建立连接,并发送命令“PORT 1027”。然后在第2步中,FTP服务器给客户端的命令端口返回一个"ACK"。在第3步中,FTP服务器发起一个从它自己的数据端口(20)到客户端先前指定的数据端口(1027)的连接,最后客户端在第4步中给服务器端返回一个"ACK"。
主动方式FTP的主要问题实际上在于客户端。FTP的客户端并没有实际建立一个到服务器数据端口的连接,它只是简单的告诉服务器自己监听的端口号,服务器再回来连接客户端这个指定的端口。对于客户端的防火墙来说,这是从外部系统建立到内部客户端的连接,这是通常会被阻塞的。
被动模式:
图示:
2024端口在实际过程中也是随机的。
N = 1026,F=2024
1、 客户端N(N>1023)端口 向 服务器 21端口 发出一个请求。
2、服务器 21端口 向 客户端 N 端口 响应请求:完成控制端口的连接。(此时客户端请求服务端监听F(F>1023)端口)。
3、客户端N+1端口 向 服务端F端口 发送请求。
4、服务端F端口 向 客户端N+1端口 响应请求。完成数据端口连接。
在第1步中,客户端的命令端口与服务器的命令端口建立连接,并发送命令“PASV”。然后在第2步中,服务器返回命令"PORT 2024",告诉客户端(服务器)用哪个端口侦听数据连接。在第3步中,客户端初始化一个从自己的数据端口到服务器端指定的数据端口的数据连接。最后服务器在第4 步中给客户端的数据端口返回一个"ACK"响应。
总结
主动FTP:
命令连接:客户端 >1023端口 -> 服务器 21端口
数据连接:客户端 >1023端口 <- 服务器 20端口
被动FTP:
命令连接:客户端 >1023端口 -> 服务器 21端口
数据连接:客户端 >1023端口 -> 服务器 >1023端口
下面是主动与被动FTP优缺点的简要总结:
主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。
使用主动模式就得打开客户端 >1023 的所有端口防火墙。
使用被动模式就得打开服务器端 >1023 的所有端口防火墙。