我们在上传文件或图片到主机的时候,都不可避免的用到FTP软件这个上传工具。在上传的时候,有两种传输方式大家一定不会不熟悉,那就是主动模式和被动模式,他们的英文简写是Port和Pasv。常常有客户无法上传的时候,我们都会告诉他们,把FTP软件被动模式前面的钩去掉再试试。这说明,FTP软件默认是使用被动模式的,这种传输模式较先进一些。而有些客户无法在这种模式下上传的原因,往往是由于他们电脑中安装了防火墙、杀毒软件或者他们电脑所在的局域网做了特殊限制造成。
首先我们要知道,我们在使用FTP上传、删除、修改文件的时候其实要经过两个过程。一个是命令连接,一个是数据传输。命令连接的过程是我们电脑->服务器,通常是我们电脑中一个随机的大于1024的端口->服务器的21端口。我们熟知的FTP的21端口就是建议命令连接时所必需的。对于这主动和被动这两种上传模式而言,命令连接的过程是完全相同的,其区别就在数据传输过程中。主动模式下,当需要传送数据时,客户端在命令连接上用PORT命令告诉服务器:“我打开了XXXX端口(通常是一个随机的大于1024的端口),你过来连接我”。于是服务器从20端口向客户端的这个端口发送连接请求,建立一条数据连接来传送数据,这就是服务器->客户电脑的过程。而在被动模式下,服务器在命令连接上用PASV命令告诉客户端:“我打开了XXXX端口(通常是在FTP服务端设置的一个高位端口范围),你过来连接我”。于是客户端向服务器的这个端口范围发送连接请求,建立一条数据连接来传送数据。
一句话,主动模式的FTP是指服务器主动连接客户端的数据端口,被动模式的FTP是指服务器被动地等待客户端连接自己的数据端口。故通过防火墙对高位端口的阻塞,会造成主动模式受限,被动模式比较先进。另外通过设置被动模式的端口范围,只开放一定的端口对外传输数据,也大大减少了服务器安全性暴露的风险。
那么,在哪里设置被动模式的端口范围呢。Windows环境下的IIS FTP的设置方法是:打开C:\WINDOWS\system32\inetsrv\MetaBase.xml,当然首先要停止IIS Admin Service服务。然后编辑这个文件里面<IIsFtpService>区块下的PassivePortRange,比如设置成PassivePortRange="50030-50039",这就指定了10个端口来传输数据。而Linux环境下的ProFTP的设置方法是:打开proftp的配置文件,命令是vi /etc/proftpd.conf,然后在<Global>区块里面添加PassivePorts 50030 50039这样的一段文字,也和上面IIS中的端口设置是一样的功能。
最后在说下这两种模式的优缺点。主动模式对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动模式对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。比较明智的方法是,同时做好服务器和客户电脑的安全设置,尽量不要开防火墙,就能比较顺利的通过FTP上传和管理我们的文件。