FTP 的 PORT 主动模式和 PASV 被动模式

最近做一个项目要用到 FTP 和其它系统进行文件传输,结果在 FTP 网络连接的问题上花费了很多时间,由于太久没搞 FTP ,忘记了 FTP 不单单开放 21 号端口,客户端采用不同连接模式对网络的要求均有所不同。在此重温一下 FTP 的主动模式和被动模式的相关知识。

在使用 FTP 时,如果客户端机器和 FTP 服务器双方之间的所有端口都是开放的,那么连接不存在问题。如果客户端与服务器之间有防火墙,如果没配置好防火墙策略和采用合适的连接模式,会导致登录成功但无法 LIST 列表的问题。要避免出现这样的问题,首先要了解 FTP 的工作模式。

1 、FTP 的 PORT(主动模式)和 PASV(被动模式)

( 1 )PORT(主动模式)

PORT 中文称为主动模式,工作原理:FTP 客户端随机开启一个大于 1024 的端口 N 连接到 FTP 服务器的 21 号端口,发送用户名和密码登录,登录成功后要 LIST 列表或者读取数据时,客户端开放 N + 1 号端口进行监听,并发送 PORT N + 1 命令到 FTP 服务器;FTP 服务器收到 PORT 主动模式命令和端口号后,通过服务器的 20 号端口和客户端开放的 N + 1 号端口进行连接,然后在两个端口之间进行数据传输。原理如下图:

FTP 主动模式
FTP 主动模式

( 2 )PASV(被动模式)

PASV 是 Passive 的缩写,中文称为被动模式,工作原理:FTP 客户端随机开启一个大于 1024 的端口 N 连接到 FTP 服务器的 21 号端口,发送用户名和密码登录,登录成功后要 LIST 列表或者读取数据时,客户端开放 N + 1 号端口,然后发送 PASV 命令到 FTP 服务器,通知服务器自己处于被动模式;服务器收到命令后,会开放一个大于 1024 的端口 P 进行监听,然后用 PORT P 命令通知客户端,自己的数据端口是 P 。客户端收到命令后,会通过 N + 1 号端口连接服务器的端口 P ,然后在两个端口之间进行数据传输。原理如下图:

FTP 被动模式
FTP 被动模式

2 、两种模式的比较

主动模式和被动模式的不同,简单概述为:主动模式传送数据时是 “ 服务器 ” 连接到 “ 客户端 ” 的端口;被动模式传送数据时是 “ 客户端 ” 连接到 “ 服务器 ” 的端口。

主动模式需要客户端必须开放端口给服务器,很多客户端都是在防火墙内,还要考虑 NAT 的问题,开放端口给 FTP 服务器访问比较困难。

被动模式只需要服务器端开放端口给客户端连接就行了。

3 、不同工作模式的网络设置

我在实际项目中碰到的问题是:FTP 客户端处于办公内网(还做了 NAT ),服务器端位于互联网;服务器端只开放了 21 号端口,客户端机器没开放任何端口。FTP 客户端连接采用的是被动模式,结果客户端能登录成功,但是无法 LIST 列表和读取数据。很明显,是因为服务器端没开放被动模式下的随机端口导致的。

在被动模式下,服务器端开放的端口随机,但是防火墙不能全部开放,解决的方案是:在 FTP 服务器配置被动模式下开放随机端口在 50000 ~ 50010 之间(范围在 FTP 服务器软件设置,可以设置任意 1024 以上的端口段),然后在防火墙设置规则,开放服务器端 50000 ~ 50010 之间的端口段。

在主动模式下,客户端的 FTP 软件应设置主动模式下开放的端口段,然后在客户端的防火墙上开放对应的端口段。

4 、如何设置工作模式?

有人可能会问 FTP 服务器如何设置工作模式?事实上 FTP 服务器一般都支持主动和被动模式,连接采用何种模式是由 FTP 客户端软件决定的。

 

转自:

  • https://my.oschina.net/binny/blog/17469
  • https://my.oschina.net/liujinofhome/blog/34060

这篇文章对你有帮助吗?

相关文章

发表评论?

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据