有人能告诉我主动和被动FTP的区别吗? 哪一个更好?


当前回答

FTP可以在Active和passive两种模式下运行。

在后台,FTP实际上在客户端和服务器之间使用两个通道,命令通道和数据通道,它们实际上是分开的TCP连接。

命令通道用于命令和响应,而数据通道用于实际传输文件。

将命令信息和数据分离到单独的通道是一种向服务器发送命令而不必等待当前数据传输完成的好方法。根据RFC,这只对命令的一个子集是强制的,比如退出、中止当前传输和获取状态。


在主动模式下,客户端建立命令通道,而服务器负责建立数据通道。这实际上是一个问题,例如,如果客户端机器受到防火墙的保护,不允许来自外部的未经授权的会话请求。

在被动模式下,客户端建立两个通道。我们已经知道它在活动模式下建立命令通道,在这里它也做同样的事情。

但是,它随后请求服务器(在命令通道上)开始侦听端口(由服务器决定),而不是试图建立回客户机的连接。

作为此操作的一部分,服务器还将它选择用于侦听的端口号返回给客户机,以便客户机知道如何连接到它。

一旦客户端知道了这一点,它就可以成功地创建数据通道并继续。

更多详细信息请参见RFC: https://www.ietf.org/rfc/rfc959.txt

其他回答

FTP可以在Active和passive两种模式下运行。

在后台,FTP实际上在客户端和服务器之间使用两个通道,命令通道和数据通道,它们实际上是分开的TCP连接。

命令通道用于命令和响应,而数据通道用于实际传输文件。

将命令信息和数据分离到单独的通道是一种向服务器发送命令而不必等待当前数据传输完成的好方法。根据RFC,这只对命令的一个子集是强制的,比如退出、中止当前传输和获取状态。


在主动模式下,客户端建立命令通道,而服务器负责建立数据通道。这实际上是一个问题,例如,如果客户端机器受到防火墙的保护,不允许来自外部的未经授权的会话请求。

在被动模式下,客户端建立两个通道。我们已经知道它在活动模式下建立命令通道,在这里它也做同样的事情。

但是,它随后请求服务器(在命令通道上)开始侦听端口(由服务器决定),而不是试图建立回客户机的连接。

作为此操作的一部分,服务器还将它选择用于侦听的端口号返回给客户机,以便客户机知道如何连接到它。

一旦客户端知道了这一点,它就可以成功地创建数据通道并继续。

更多详细信息请参见RFC: https://www.ietf.org/rfc/rfc959.txt

我的文章FTP连接模式(主动与被动)的修订版本:

FTP连接模式(主动或被动),决定如何建立数据连接。在这两种情况下,客户端都会创建到FTP服务器命令端口21的TCP控制连接。这是一个标准的外向连接,与任何其他文件传输协议(SFTP, SCP, WebDAV)或任何其他TCP客户端应用程序(例如web浏览器)一样。因此,在打开控制连接时通常没有问题。

与其他文件传输协议相比,FTP协议更复杂的地方是文件传输。当其他协议使用相同的连接进行会话控制和文件(数据)传输时,FTP协议使用单独的连接进行文件传输和目录列表。

在主动模式下,客户端开始在一个随机端口上监听来自服务器的传入数据连接(客户端发送FTP命令port来通知服务器它正在侦听哪个端口)。如今,典型的情况是客户端位于防火墙(例如内置Windows防火墙)或NAT路由器(例如ADSL调制解调器)之后,无法接受传入的TCP连接。

出于这个原因,被动模式被引入,并被广泛使用。使用被动模式是可取的,因为大多数复杂的配置只由有经验的管理员在服务器端完成一次,而不是由(可能)没有经验的用户在客户端单独完成。

在被动模式下,客户端使用控制连接向服务器发送PASV命令,然后从服务器接收服务器IP地址和服务器端口号,然后客户端使用服务器IP地址和服务器端口号打开到服务器IP地址和服务器端口号的数据连接。

被动模式的网络配置

使用被动模式,大部分配置负担都在服务器端。服务器管理员应该按照下面的描述设置服务器。

FTP服务器端的防火墙和NAT必须配置,不仅允许/路由FTP端口21上的传入连接,而且还必须为传入的数据连接配置一系列端口。通常,FTP服务器软件有一个配置选项来设置服务器将使用的端口范围。并且必须在防火墙/NAT上打开/路由相同的范围。

当FTP服务器位于NAT之后时,它需要知道自己的外部IP地址,以便在对PASV命令的响应中将其提供给客户端。

主用模式网络配置

使用活动模式,大部分配置负担都在客户端。

客户端的防火墙(例如Windows防火墙)和NAT(例如ADSL调制解调器路由规则)必须配置为允许/路由传入数据连接的端口范围。Windows系统下的端口打开路径:“控制面板>系统和安全> Windows防火墙>高级设置>入站规则>新规则”。关于NAT上的端口路由(如果有),请参考其文档。

当您的网络中存在NAT时,FTP客户端需要知道自己的外部IP地址,该IP地址是WinSCP通过PORT命令提供给FTP服务器的。这样服务器才能正确地连接回客户端以打开数据连接。有些FTP客户端能够自动检测外部IP地址,有些则需要手动配置。

智能防火墙/ NATs

一些防火墙/ nat试图通过检查FTP控制连接和/或转换控制连接流量中的数据连接IP地址来自动打开/关闭数据端口。

使用这样的防火墙/NAT,上面的配置对于普通的未加密FTP是不必要的。但这不能用于FTPS,因为控制连接流量是加密的,防火墙/NAT不能检查或修改它。

主动模式——客户端向服务器发出一个PORT命令,表示它将“主动”提供一个IP和端口号,以便向客户端打开数据连接。

被动模式——客户端发出PASV命令,表示它将“被动地”等待服务器提供IP和端口号,之后客户端将创建到服务器的数据连接。

上面有很多很好的答案,但这篇博客文章包括一些有用的图表,并给出了一个相当可靠的解释:https://titanftp.com/2018/08/23/what-is-the-difference-between-active-and-passive-ftp/

我最近在工作中遇到了这个问题,所以我想我应该在这里多说一些。我将使用image来解释FTP是如何工作的,作为前面答案的额外来源。

活跃的模式:


被动模式:

在活动模式配置中,服务器将尝试连接到一个随机的客户端端口。因此,该端口可能不是这些预定义端口之一。因此,试图连接到它的尝试将被防火墙阻止,并且不会建立任何连接。

被动配置不会有这个问题,因为客户端将是发起连接的一方。当然,服务器端也有可能有防火墙。但是,由于与客户机相比,服务器预计会接收更多的连接请求,因此服务器管理员适应这种情况并打开端口选择以满足被动模式配置是合乎逻辑的。

所以你最好配置服务器来支持被动模式FTP。然而,被动模式会使您的系统容易受到攻击,因为客户端应该连接到随机的服务器端口。因此,要支持这种模式,不仅您的服务器必须有多个可用端口,您的防火墙还应该允许到所有这些端口的连接通过!

为了降低风险,一个好的解决方案是在服务器上指定一个端口范围,然后在防火墙上只允许该范围的端口。

更多信息,请阅读官方文件。

活跃的模式: -server发起连接。

被动模式: -client发起连接。