FTP服务器主动模式与被动模式

一、FTP协议及端口

FTP只通过TCP连接,没有用于FTP的UDP组件。FTP不同于其他服务的是它使用了两个端口,一个数据端口和一个命令端口。通常21端口是命令端口,20端口是数据端口。当混入主动/被动模式的概念时,数据端口就有可能不是20了。

 

二、主动模式和被动模式

主动模式(active mode)也称为标准模式,被动模式(passive mode),两种模式主要体现在数据传输时候的发起方不一样,导致服务器需要开放的端口也不一样。

 

主动模式下,当完成认证之后准备传输数据时,客户端发送命令PORT xxxx,服务器主动连接客户端指定的端口号,客户端开放的端口是随机选择的。此时,服务器防火墙需要开放的两个TCP连接端口为21、20端口。

 

被动模式下,当完成认证之后准备传输数据时,客户端认证完成发送命令PASV,此时服务器会自动打开两个随机端口并发送PORT xxxx命令给客户端,然后客户端发起从本地端口到服务器的端口xxxx的连接用来传送数据。在被动模式下,服务器需要开放端口包括21以及1024到65535之间的端口号。

 

IIS下的FTP服务,默认开启的是主动模式,需要设置服务器防火墙开放TCP协议20、21端口供FTP使用。

 

三、客户端连接FTP模式切换

IE浏览器以及我的电脑,设置IE浏览器打开“Internet 选项”,找到高级下的“浏览”节点,将“使用被动FTP(用于防火墙和DSL调制解调器的兼容)”的勾选去掉。

设置以上完成之后,可以在我的电脑上直接浏览FTP服务器。

 

Filezilla 客户端设置主动模式:

打开filezilla 客户端,选择菜单【文件】-【站点管理】-【传输设置】,单选中间的主动模式即可。

四、防火墙NAT服务器IP问题

对于服务器使用内网IP地址,然后通过防火墙NAT出去的,需要设置服务器外网对应的IP地址。

Windows服务器IIS中,通过设置防火墙支持来完成:

在Filezilla server中,点击设置进入如下界面设置对应开放的端口号范围以及外网IP地址:

我遇到的情况是在windows 2008 服务器上,本省服务器防火墙可以开放任意端口,但是在外设防火墙下做了NAT转换,本身开放的端口也就只能是21和20端口,其他端口没有自动开启,导致外部连接只能通过主动模式。这样的方式就是在于对一般用户,他没办法选择任何工具自动连接FTP服务器,需要选择主动模式才行。