您是否正准备搭建本身的FTP网站?您知道FTP协议的工做机制吗?您知道什么是PORT方式?什么是PASV方式吗?若是您不知道,或没有彻底掌握,请您坐下来,花一点点时间,细心读完这篇文章。所谓磨刀不误砍柴功,掌握这些基础知识,会令您事半功倍。不然,极可能折腾几天,最后一事无成。
FTP基础知识
FTP是File Transfer Protocol(文件传输协议)的缩写,用来在两台计算机之间互相传送文件。相比于HTTP,FTP协议要复杂得多。复杂的缘由,是由于FTP协议要用到两个TCP链接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另外一个是数据链路,用来上传或下载数据。
FTP协议有两种工做方式:PORT方式和PASV方式,中文意思为主动式和被动式。
PORT(主动)方式的链接过程是:客户端向服务器的FTP端口(默认是21)发送链接请求,服务器接受链接,创建一条命令链路。当须要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来链接我”。因而服务器从20端口向客户端的XXXX端口发送链接请求,创建一条数据链路来传送数据。
PASV(被动)方式的链接过程是:客户端向服务器的FTP端口(默认是21)发送链接请求,服务器接受链接,创建一条命令链路。当须要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来链接我”。因而客户端向服务器的XXXX端口发送链接请求,创建一条数据链路来传送数据。
从上面能够看出,两种方式的命令链路链接方法是同样的,而数据链路的创建方法就彻底不一样。而FTP的复杂性就在于此。
FTP服务器端的注意事项
1、FTP服务器是公网IP,用公网动态域名;或是内网IP,在网关上开端口映射或用内网专业版TrueHost
一、服务器若是安装了防火墙,请记住要在防火墙上打开FTP端口(默认是21)。
二、全部FTP服务器软件都支持PORT方式。至于PASV方式,大部分FTP服务器软件都支持。支持PASV方式的FTP服务器软件,也能够设置为只工做在PORT方式上。
三、为了PASV方式能正常工做,须要在FTP服务器软件上为PASV方式指定可用的端口范围。此外,还要在服务器的防火墙上打开这些端口。当客户端以PASV方式链接服务器的时候,服务器就会在这个端口范围里挑选一个端口出来,给客户端链接。
FTP客户端的注意事项服务器
请注意:选择用PASV方式仍是PORT方式登陆FTP服务器,选择权在FTP客户端,而不是在FTP服务器。
1、客户端只有内网IP,没有公网IP
从上面的FTP基础知识可知,若是用PORT方式,由于客户端没有公网IP,FTP将没法链接客户端创建数据链路。所以,在这种状况下,客户端必需要用PASV方式,才能链接FTP服务器。大部分FTP站长发现本身的服务器有人能登陆上,有人登陆不上,典型的错误缘由就是由于客户端没有公网IP,但用了IE做为FTP客户端来登陆(IE默认使用PORT方式)。
做为FTP站长,有必要掌握FTP的基础知识,而后指导您的朋友如何正确登陆您的FTP。
2、客户端有公网IP,但安装了防火墙
若是用PASV方式登陆FTP服务器,由于创建数据链路的时候,是由客户端向服务器发送链接请求,没有问题。反过来,若是用PORT方式登陆FTP服务器,由于创建数据链路的时候,是由服务器向客户端发送链接请求,此时链接请求会被防火墙拦截。若是要用PORT方式登陆FTP服务器,请在防火墙上打开1024以上的高端端口。
4、常见的FTP客户端软件PORT方式与PASV方式的切换方法。
大部分FTP客户端默认使用PASV方式。IE默认使用PORT方式。
在大部分FTP客户端的设置里,常见到的字眼都是“PASV”或“被动模式”,极少见到“PORT”或“主动模式”等字眼。由于FTP的登陆方式只有两种:PORT和PASV,取消PASV方式,就意味着使用PORT方式。
IE:
工具 -> Internet选项 -> 高级 -> “使用被动FTP”(须要IE6.0以上才支持)。
CuteFTP:
Edit -> Setting -> Connection -> Firewall -> “PASV Mode”
或
File -> Site Manager,在左边选中站点 -> Edit -> “Use PASV mode”工具
FlashGet:
工具 -> 选项 -> 代理服务器 -> 直接链接 -> 编辑 -> “PASV模式”
FlashFXP:
选项 -> 参数选择 -> 代理/防火墙/标识 -> “使用被动模式”
或
站点管理 -> 对应站点 -> 选项 -> “使用被动模式”
或
快速链接 -> 切换 -> “使用被动模式”测试
LeechFTP:
Option -> Firewall -> Do not Use
5、请尽可能不要用IE做为FTP客户端
IE只是个很粗糙的FTP客户端工具。首先,IE6.0如下的版本不支持PASV方式;其次,IE在登陆FTP的时候,看不到登陆信息。在登陆出错的时候,没法找到错误的缘由。在测试本身的FTP网站的时候,强烈建议不要使用IE。
高级话题
1、为何没有公网IP,也能使用PORT方式登陆FTP?
NAT网关的工做方式是在TCP/IP数据包的包头里找局域网的源地址和源端口,替换成网关的地址和端口。对数据包里的内容,是不会改变的。而使用PORT方式登陆FTP的时候,IP地址与端口信息是在数据包里面的,而不是在包头。所以,没有公网IP,使用PORT方式是没法从internet上的ftp服务器下载数据的。
可是,极少数的NAT网关也支持PORT方式。这些NAT网关连数据包里面的内容都扫描,扫描到PORT指令后会替换PORT方式的IP和端口。在这种NAT网关下面,用PORT方式就没问题了。不过,这些网关也只扫描21端口的数据包,若是FTP服务器不是用默认的21端口,也没法使用PORT方式。
内网用端口映射方式建FTP的注意事项(原创)
根据上面的FTP原理,在只映射一个端口的状况下,只能要求来访者使用PORT方式来访问你的FTP服务器,但这样的话就限制了内网用户。
而若是映射不少个端口,就可使用PASV方式了但还要从FTP服务器上做一些设置网站
好比,从网关上映射21端口和5000-5020端口到你的计算机21端口和5000-5020端口,在Serv-U的Local Server -> Settings -> Advanced -> PASV port range里,填入给PASV模式使用的端口范围5000-5020,而后在你创建的域--设置--高级-容许被动模式数据传输,使用IP 里面填入你的网关在公网的IP地址。
还有,用端口映射方式建FTP是看不到来访者的IP地址,只能看到网关在内网中的IP地址。(应该是这样,但也不必定,毕竟我没试过)这样就不能限制一个IP的链接数了。spa