主动和被动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的通道来解决这个问题。 为了使这个希望更清楚:
主动模式:
PORT 2001 (a)发送到命令通道上的服务器和服务器确认。 被动模式:
PASV到服务器。 PORT 1234 (a)开始侦听该端口后。 此时,命令和数据通道都是打开的。
(a)请注意,客户端端口的select取决于客户端,因为被动模式下服务器数据通道端口的select取决于服务器。
(b)还注意到使用20号和21号港口只是一个惯例(虽然是强大的)。 尽pipe客户端和服务器都必须同意使用哪些端口,但并不要求使用这些端口。 我见过使用不同端口来隐藏客户端的实现(在我看来,这是徒劳的)。
从stackoverflow原始答案