FTP连接时出现“227 Entering Passive Mode” 的解决方法

今天从公网的服务器连接本地内网的FTP server copy文件时,系统老是提示227 Entering Passive Mode (xxx,xxx,,xxx,xxx,x),很是奇怪,于是上网找资料仔细研究了一下,原来FTP有两种工作模式,PORT模式和PASV模式.

    在主动模式下,FTP客户端随机开启一个大于1024的本地端口(比如N号端口)向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令。
    服务器接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端的N+1号端口进行数据传输。


    在被动模式下,FTP库户端随机开启一个大于1024的本地端口(比如N号端口)向服务器的21号端口发起连接,同时会开启N+1号端口,
    然后向服务器发送PASV命令通知服务器自己处于被动模式。服务器收到该命令后,会开放一个大于1024的端口(比如P号端口)进行监听,
    然后用PORT P命令通知客户端,而自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的P号端口,
    最后在客户端N+1号端口和服务器的P号端口之间进行数据传输。


    用下面的图例会更清晰说明两者之间的区别:


    *主动模式


    命令连接:客户端 大于1024 端口 → 服务器 21 端口
    数据连接:客户端 大于1024 端口 ← 服务器 20 端口

    *被动模式

    命令连接:客户端 大于1024 端口 → 服务器 21 端口
    数据连接:客户端 大于1024 端口 ← 服务器 大于1024 端口

    总的来说,主动模式是服务器主动连接客户端的数据端口,被动模式是服务器被动地等待客户端连接自己的数据端口。

    被动模式通常用在处于防火墙之后的FTP客户端需要访问外界FTP服务器的场景,因为在这种场景下,防火墙通常被配置为不允许外界访问防火墙之后主机,而只允许防火墙之后的计算机发起的连接请求。因此在这种场景下不能使用主动模式,而被动模式可以良好的工作。

    由于我的本地FTP服务器在内网,只是从外网映射了两个端口(20,21),即FTP服务器处于防火墙之后,所以应该使用主动模式。 

ftp> passive
Passive mode off.

ftp> passive (再次运行命令可打开)

Passive mode on. 

你可能感兴趣的:(linux,ftp)