主动和被动 FTP 有什么区别?

zip*_*ppy 1 ftp

主动和被动 FTP 有什么区别?

注意:我认为这作为社区 wiki 问题会很有用。另外,我希望有人能想出一个清晰简洁的答案,比如这个问题:IPv4 子网是如何工作的?

Luc*_*man 5

主动和被动是 FTP 可以运行的两种模式。 FTP 在客户端和服务器之间使用两个通道,命令通道和数据通道,它们实际上是独立的 TCP 连接。命令通道用于命令和响应,数据通道用于实际传输文件。这是一种向服务器发送命令而无需等待当前数据传输完成的好方法。

在主动模式下,客户端建立命令通道(从客户端端口X到服务器端口21(b)),但服务器建立数据通道(从服务器端口20(b)到客户端端口Y,其中Y已由客户端提供)。

在被动模式下,客户端建立两个通道。在这种情况下,服务器会告诉客户端哪个端口应该用于数据通道。

被动模式一般用于FTP服务器无法建立数据通道的情况。造成这种情况的主要原因之一是网络防火墙。虽然您可能有允许您打开 FTP 通道的防火墙规则ftp.microsoft.com,但 Microsoft 的服务器可能没有能力打开通过防火墙返回的数据通道。

被动模式通过从客户端打开两种类型的通道来解决这个问题。为了使这一点更清楚:

主动模式:

  • 客户端打开从客户端端口 2000 (a)到服务器端口 21 (b) 的命令通道。
  • 客户端发送PORT 2001(a)到服务器,服务器在命令通道上确认。
  • 服务器打开从服务器端口 20 (b)到客户端端口 2001 (a) 的数据通道。
  • 客户端在数据通道上确认。

被动模式:

  • 客户端打开从客户端端口 2000 (a)到服务器端口 21 (b) 的命令通道。
  • 客户端通过PASV命令通道发送到服务器。
  • 服务器在开始侦听该端口后发回(在命令通道上)PORT 1234(a)
  • 客户端打开从客户端 2001 (a)到服务器端口 1234 (a) 的数据通道。
  • 服务器在数据通道上确认。

此时,命令和数据通道都是打开的。


(a)注意客户端端口的选择由客户端决定,因为被动模式下服务器数据通道端口的选择由服务器决定。

(b)进一步注意端口 20 和 21 的使用只是一种约定(尽管是一种强约定)。尽管客户端和服务器都必须就正在使用的端口达成一致,但并没有绝对要求使用这些端口。我见过试图通过使用不同端口来隐藏客户端的实现(在我看来是徒劳的)。

来自stackoverflow的原始答案