问题最近需要在IIS上搭建一个FTP服务器。碰到了这样的问题:按照网上基本的搭建步骤,完成搭建过程后,客户在资源管理器中访问ftp://x.x.x.x/时,出现了如下的错误:
分析过程从提示上来看,站点访问没有出现连接服务器失败的错误,说明底层TCP连接这块是没有问题的。另外,错误中提示让我们检查访问相关文件夹的权限。
好,满怀高兴的去给FTP根目录设置了一个Everyone可读可写的权限,重启IIS服务。再次测试,发现错误依旧。
解决方法经过几天的摸爬滚打,终于在一篇文章中找到了解决方法:
没想到这个问题和IE的设置还有关系。我们需要在IE的高级选项中勾选:使用被动TFP(用于防火墙和DSL调制解调器的兼容)。如下图所示:
两种模式主动模式:
在主动模式下,客户端首先选择一个大于1023的端口A,使用此端口发起对FTP服务器(默认使用21号端口)的连接请求,此21号端口为服务器的命令端口。随后客户端自身还会对A+1端口启动监听。当需要传输数据时,客户端将使用"PORT A+1"指令告诉服务器:请连接至我开放的A+1端口进行数据传输。接着,服务器会使用其20号端口(数据端口)连接到客户端的A+1端口(数据端口)进行数据传输。
被动模式:
在被动模式下,客户端也会使用到两个本地端口,A 和 A+1。客户端使用使用A端口连接至服务器的21号命令端口,需要数据传输时,客户端将发送PASV命令,服务器收到此命令后,将会开启一个任意的数据端口(通常是大于1023的),并发送PORT命令给客户端。客户端收到数据端口后,使用A+1端口连接服务器的数据端口,来进行数据传输。
问题原因IIS上客户端的防火墙未进行正确配置,导致在主动模式下FTP连接失败。开启IE的被动模式后,问题解决。
总结主动模式数据传输连接从服务器端向客户端发起;被动模式则是客户端向服务器端发起连接。