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

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

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

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

答案1

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

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

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

被动模式通常用于 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 只是一种惯例(尽管是一种强惯例)。虽然客户端和服务器都必须就使用哪个端口达成一致,但并没有绝对要求使用这些端口。我见过一些实现试图通过使用不同的端口来隐藏客户端(在我看来,这是徒劳的)。

原始答案来自堆栈溢出

相关内容