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

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

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

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

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

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

被动模式通常用于FTP服务器无法build立数据通道的情况。 其中一个主要原因是networking防火墙。 虽然您可能有防火墙规则,允许您打开FTP通道到ftp.microsoft.com ,但Microsoft的服务器可能无法通过防火墙重新打开数据通道。

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

主动模式:

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

被动模式:

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

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


(a)请注意,客户端端口的select取决于客户端,因为被动模式下服务器数据通道端口的select取决于服务器。

(b)还注意到使用20号和21号港口只是一个惯例(虽然是强大的)。 尽pipe客户端和服务器都必须同意使用哪些端口,但并不要求使用这些端口。 我见过使用不同端口来隐藏客户端的实现(在我看来,这是徒劳的)。

从stackoverflow原始答案