FTP主动模式(PORT)和被动模式(PASV)有什么区别?(2018-12-06)

1. 什么是PASV和PORT方式


(1)PORT:主动模式,又称Active模式或Standard模式

(2)PASV:被动模式,是Passive的简写。   

2. 主动模式下(服务器向客户端敲门,然后客户端开门)


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

命令连接:客户端 N 端口 ---> 服务器 21端口

数据连接:客户端 N+1端口 <--- 服务器 20端口

客户端需要打开N和N+1端口,N为大于1024的随机端口。

服务器需要打开21和20端口。

3. 被动模式下(客户端向服务器敲门,然后服务器开门)


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

命令连接:客户端 N 端口 ---> 服务器 21端口

数据连接:客户端 N+1 端口 ---> 服务器 P端口

客户端:需要开启N和N+1端口,N为大于1024的随机端口

服务器:需要开启21和P端口,P为大于1024的随机端口

4. 实际操作


主动模式下: FTP服务器便于管理,因为开放的端口为20和21,而客户端不便于管理,因为FTP服务器的20端口要主动与客户端的N+1端口建立连接,这个端口很有可能被客户端的防火墙拦截。

被动模式下: 客户端便于管理,因为客户端开启N和N+1两个端口,主动与服务器的21和P端口建立连接,客户端N和N+1两个端口是能够穿过其本机的防火墙。而服务器端则不便于管理,因为客户端要与服务器端建立两个连接,一个为端口21, 另一个为随机端口P,而这个端口P很有可能被服务器端的防火墙阻塞掉。

为了保障FTP的顺利连接,一般采用被动模式,可以考虑2个方案:

  方案1:FTP软件中指定随机端口P的范围为[x, y],并在服务器防火墙中开放[x, y]端口。

  方案2:服务器上将FTP服务端程序(如FileZilla Server.exe)允许通过防火墙即可。

5. 参考文献


https://www.ibm.com/developerworks/cn/linux/l-cn-socketftp/

https://www.cnblogs.com/xiaohh/p/4789813.html