ftp的主动和被动模式

过两天我们游戏就准备在韩国封测了,由于历史原因(我的锅,当时还没做GM工具)游戏里的公告是通过FTP上传到服务器的,之前已经在韩国服上部署好FTP了,今早把账号提交给对方的运营,可是对方一直获取不到目录,在解决问题的同时对FTP的工作方式做了进一步的了解。

 

其实在部署好韩国服的FTP后,已经产生了一个问题,不过之前没深究,那就是FTP客户端只有在主动模式才能正常工作,而之前我们一直使用默认的设置就能正常访问FTP上的数据。运营那边使用主动模式也无法工作,于是觉得解决问题的关键应该在FTP的工作模式上。

之前一直知道FTP工作需要的端口是20 和 21,21是控制端口,比如登陆什么的是通过21端口传输指令的。20是数据端口,以为FTP服务器会监听20端口给客户端下发数据,然后只让对方的运维帮忙打开了20和21端口,这是产生问题的关键。

 

FTP工作方式分为主动模式和被动模式,我个人的理解这个“主动”和“被动”是指FTP服务器是“主动”连接客户端,或者“被动”地被客户端连接。

 

前面提到这次部署的韩国FTP只有在主动模式下才能正常使用,而韩国的运营在主动模式下也无法使用。现在先来说说主动模式的工作方式。在主动模式下,客户端会通过21端口告诉服务器我们在本地监听了哪个端口,让服务器主动的通过20端口来连接本地的客户端,然后传输数据。在这种模式下,服务器的防火墙只要打开20和21端口就行,但是对客户端比较苛刻,需要我们本地的机器直接使用公网IP来工作,这样服务器才能连接上我们的客户端监听的端口。我们使用的机器在公司内网,是没有公网IP的,那为什么也能使用主动模式呢,经过查询资料得知,现在的路由器会对向21端口传输的内容进行扫描,当发现内容是告知远端FTP服务器本地监听的端口时,就换自动建立那个端口对发包的内网IP的映射,这样当服务器访问我们内网监听的端口时,数据包到达路由器,会被转发到我们的内网机器上。但是并不是所有的路由器都有这种功能,所以韩国运营在主动模式下也不能工作,原因应该是路由器或网关没有这种功能。

 

为什么这次的部署不能再被动模式下工作呢,被动模式的工作方式是这样的:当要传输数据时,服务器会开启一个大于1024的端口(端口范围可配置)监听,通过21端口告诉客户端监听了哪个端口,客户端发起对目标端口的连接,在这种模式下不需要客户端监听端口,所以正常情况下都能正常工作。了解这些后就能知道这次的部署为什么不能用被动模式传输数据了,因为FTP服务器打开监听数据传输的端口被防火墙拦住了!后来联系了对方的运维给防火墙开了一个小范围的端口,终于工作正常了!

 

最后记录一下被动模式下的配置:

pasv_address=***.***.***.***( 外网ip)
pasv_enable=YES
pasv_min_port=1024
pasv_max_port=2048

 

posted @ 2018-04-24 14:22  doublerain  阅读(414)  评论(0编辑  收藏  举报