分类：电脑/网络-互联网
问题：要与FTP服务器端正常连接的话，客户端那些端口必须打开？谢谢 
回答：FTP基础知识 您是否正准备搭建自己的FTP网站？您知道FTP协议的工作机制吗？您知道什么是PORT方式？什么是PASV方式吗？如果您不知道，或没有完全掌握，请您坐下来，花一点点时间，细心读完这篇文章。所谓磨刀不误砍柴功，掌握这些基础知识，会令您事半功倍。否则，很可能折腾几天，最后一事无成。 FTP基础知识 FTP是File Transfer Protocol（文件传输协议）的缩写，用来在两台计算机之间互相传送文件。相比于HTTP，FTP协议要复杂得多。复杂的原因，是因为FTP协议要用到两个TCP连接，一个是命令链路，用来在FTP客户端与服务器之间传递命令；另一个是数据链路，用来上传或下载数据。 FTP协议有两种工作方式：PORT方式和PASV方式，中文意思为主动式和被动式。 PORT（主动）方式的连接过程是：客户端向服务器的FTP端口（默认是21）发送连接请求，服务器接受连接，建立一条命令链路。 当需要传送数据时，客户端在命令链路上用 PORT命令告诉服务器：“我打开了****端口，你过来连接我”。于是服务器从20端口向客户端的****端口发送连接请求，建立一条数据链路来传送数据。 PASV（被动）方式的连接过程是：客户端向服务器的FTP端口（默认是21）发送连接请求，服务器接受连接，建立一条命令链路。 当需要传送数据时，服务器在命令链路上用 PASV命令告诉客户端：“我打开了****端口，你过来连接我”。于是客户端向服务器的****端口发送连接请求，建立一条数据链路来传送数据。 从上面可以看出，两种方式的命令链路连接方法是一样的，而数据链路的建立方法就完全不同。而FTP的复杂性就在于此。 FTP服务器端的注意事项 一、FTP服务器是公网IP，用公网动态域名；或是内网IP，用内网专业版TrueHost 1、服务器如果安装了防火墙，请记住要在防火墙上打开FTP端口（默认是21）。 2、所有FTP服务器都支持PORT方式。至于PASV方式，大部分FTP服务器软件都支持。支持PASV方式的FTP服务器软件，也可以设置为只工作在PORT方式上。 3、为了PASV方式能正常工作，需要在FTP服务器软件上为PASV方式指定可用的端口范围（设置方法）。此外，还要在服务器的防火墙上打开这些端口。当客户端以PASV方式连接服务器的时候，服务器就会在这个端口范围里挑选一个端口出来，给客户端连接。 二、FTP服务器是内网IP，用内网动态域名标准版cm*natpro*y 这种情况下，FTP服务器不需要做特殊设置，只要支持PASV方式就可以了。大部分FTP服务器软件都支持PASV方式。 FTP客户端的注意事项 请注意：选择用PASV方式还是PORT方式登录FTP服务器，选择权在FTP客户端，而不是在FTP服务器。 一、客户端只有内网IP，没有公网IP 从上面的FTP基础知识可知，如果用PORT方式，因为客户端没有公网IP，FTP将无法连接客户端建立数据链路。因此，在这种情况下，客户端必须要用PASV方式，才能连接FTP服务器。大部分FTP站长发现自己的服务器有人能登录上，有人登录不上，典型的错误原因就是因为客户端没有公网IP，但用了IE作为FTP客户端来登录（IE默认使用PORT方式）。 作为FTP站长，有必要掌握FTP的基础知识，然后指导您的朋友如何正确登录您的FTP。 二、客户端有公网IP，但安装了防火墙 如果用PASV方式登录FTP服务器，因为建立数据链路的时候，是由客户端向服务器发送连接请求，没有问题。反过来，如果用PORT方式登录FTP服务器，因为建立数据链路的时候，是由服务器向客户端发送连接请求，此时连接请求会被防火墙拦截。如果要用PORT方式登录FTP服务器，请在防火墙上打开 1024以上的高端端口。 三、连接用内网标准版cm*natpro*y搭建的FTP服务，必须要用PASV方式。连接任何公网FTP服务器、或用内网专业版TrueHost搭建的FTP服务器，PORT方式和PASV方式都可以使用。 当然，使用PORT方式的时候，还要满足上面的两个条件。 四、常见的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模式” FlashFTP： 选项 -> 参数选择 -> 代理/防火墙/标识 -> “使用被动模式” 或 站点管理 -> 对应站点 -> 选项 -> “使用被动模式” 或 快速连接 -> 切换 -> “使用被动模式” LeechFTP： Option -> Firewall -> Do not Use 五、请尽量不要用IE作为FTP客户端 IE只是个很粗糙的FTP客户端工具。首先，IE6.0以下的版本不支持PASV方式；其次，IE在登录FTP的时候，看不到登录信息。在登录出错的时候，无法找到错误的原因。在测试自己的FTP网站的时候，强烈建议不要使用IE。 FTP建站的详细配置过程 请参考这个网页的说明来配置： 使用Serv-U建立FTP网站 高级话题 一、为什么没有公网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方式。 二、内网可以用PORT访问其他FTP，为什么不能用PORT访问自己的TrueHost FTP？ 下面要讨论的问题，只是为了说明一些原理，是不影响实际使用的。如果您没有兴趣深究这些原理，不必花时间看。 内网用户通过支持PORT方式的NAT网关，访问自己本机利用TrueHost建立的FTP服务器，FTP命令链路的建立过程如下： FTP客户端   端口*** <==> ISP NAT网关   端口**** <==> TH服务器 *.*.*.* 端口21 <==> TH客户端 <==> 用户FTP服务器   端口21 FTP客户端通过ISP的NAT网关、科迈TrueHost服务器、TrueHost客户端，连接用户本机的FTP服务器的21端口。 当需要下载数据的时候，FTP客户端通过这条命令链路，向FTP服务器发送PORT命令。假设命令为： PORT 10,10,0,1,30,4 （即IP=  端口=30*256+4=7684） 当命令通过ISP的NAT网关的时候，NAT网关判断目的端口是21，并且是PORT命令，于是，修改命令里的IP和端口，替换为自己的IP和端口，比如： PORT 61,144,1,2,50,6 （即IP=  端口=50*256+6=12806） 用户的FTP服务器最终收到的是上面这个PORT命令。于是，FTP服务器向这个IP和端口发送连接请求，建立数据链路。 用户FTP服务器   端口20 <==> ISP NAT网关   端口12806 <==> FTP客户端   端口7684 但是，因为NAT网关的公网IP只能接收外来的连接请求。就是说， 只能接收其他公网IP的连接请求，对于从NAT内部（ ）发起的连接请求，是无法建立连接的。为什么？原因很简单，因为内网IP要访问外网，必须要通过NAT建立映射。于是FTP数据链路无法建立。于是，用户无法在自己的机器上通过21端口访问自己的TrueHost FTP。 我们再来看看，如果FTP端口不是21，比如是22，会发生什么情况呢？在FTP客户端发送PORT命令的时候，NAT网关检测到目标端口是22，因为支持PORT的 NAT网关只监视目的端口是21的数据包，发现目的端口是22的数据包，不做任何处理，完全放行。于是FTP服务器收到的PORT命令依然是PORT 10,10,0,1,30,4。于是FTP服务器向这个IP和端口发送连接请求。 用户FTP服务器   端口20 <==> FTP客户端   端口7684 这种情况下命令链路就可以建立起来了。而且是等于本机连接本机，速度飞快。 综上所述，内网用户无法用PORT方式通过21端口访问自己的TrueHost FTP服务器。如果FTP端口不是21，则可以访问，而且实际上是本机连接本机。 上面的文字，仅仅是为了说明一些原理，不影响实际使用。如果本机访问本机，还要通过FTP的话，就有画蛇添足之嫌了。