主动和被动FTP有什么区别?
请问谁能告诉我主动和被动FTP有什么区别? 哪一个更好?
主动和被动是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客户端和服务器都必须同意使用哪些端口,但并不要求使用这些端口。 我见过使用不同端口来隐藏客户端的实现(在我看来,这是徒劳的)。
我最近在我的工作场所遇到这个问题,所以我想我应该在这里再说点什么。 我将使用图像来解释FTP如何作为以前答案的附加源。
主动模式:
被动模式:
在主动模式configuration中,服务器将尝试连接到随机的客户端端口。 所以很可能,那个端口不会是那些预定义的端口之一。 因此,连接到它的尝试将被防火墙阻止,并且不会build立连接。
被动configuration不会有这个问题,因为客户端将是发起连接的那个。 当然,服务器端也可以有防火墙。 但是,由于服务器与客户端相比,预计会收到更多的连接请求,所以服务器pipe理员适应这种情况并打开select的端口以满足被动模式configuration是合乎逻辑的。
因此,最好将服务器configuration为支持被动模式FTP。 但是,被动模式会使您的系统容易受到攻击,因为客户端应该连接到随机的服务器端口。 因此,要支持这种模式,不仅服务器必须有多个可用的端口,防火墙还应该允许连接到所有这些端口。
为了降低风险,一个很好的解决scheme是在服务器上指定一系列的端口,然后在防火墙上只允许这个范围的端口。
欲了解更多信息,请阅读官方文件 。
我的文章的编辑版本FTP连接模式(主动与被动) :
FTP连接模式(主动或被动)决定数据连接的build立方式。 在这两种情况下,客户端都会创build到FTP服务器命令端口21的TCP控制连接。与任何其他文件传输协议(SFTP,SCP,WebDAV)或任何其他TCP客户端应用程序(例如Web浏览器)。 所以,打开控制连接时通常没有问题。
其中FTP协议比其他文件传输协议更复杂的是文件传输。 虽然其他协议在会话控制和文件(数据)传输中使用相同的连接,但FTP协议为文件传输和目录列表使用单独的连接。
在主动模式下,客户端开始监听来自服务器的传入数据连接的随机端口(客户端发送FTP命令PORT
通知服务器PORT
在监听的端口)。 如今,客户端通常位于防火墙(如内置Windows防火墙)或NAT路由器(如ADSL调制解调器)的后面,无法接受传入的TCP连接。
出于这个原因, 被动模式被引入,并且现在主要被使用。 使用被动模式是更可取的,因为大多数复杂的configuration在服务器端由有经验的pipe理员完成一次,而不是在客户端单独由(可能)没有经验的用户完成。
在被动模式下,客户端使用控制连接向服务器发送PASV
命令,然后从服务器接收服务器IP地址和服务器端口号,然后客户端使用该端口号打开到服务器IP地址的数据连接,服务器端口号收到。
被动模式的networkingconfiguration
在被动模式下,大部分的configuration负担都在服务器端。 服务器pipe理员应按照以下说明设置服务器。
FTP服务器端的防火墙和NAT必须被configuration为不仅允许/路由在FTP端口21上的传入连接,而且传入数据连接的一系列端口。 通常,FTP服务器软件有一个configuration选项来设置一系列的端口,服务器将使用。 同样的范围必须在防火墙/ NAT上打开/路由。
当FTP服务器位于NAT后面时,需要知道它是外部IP地址,因此可以将其提供给客户端,以响应PASV
命令。
活动模式的networkingconfiguration
在主动模式下,大部分的configuration负担都在客户端。
客户端上的防火墙(例如Windows防火墙)和NAT(例如ADSL调制解调器路由规则)必须configuration为允许/路由input数据连接的一系列端口。 要在Windows中打开端口,请转至控制面板>系统和安全> Windows防火墙>高级设置>入站规则>新规则 。 为了路由NAT上的端口(如果有的话),请参阅其文档。
当networking中存在NAT时,FTP客户端需要通过PORT
命令知道WinSCP需要提供给FTP服务器的外部IP地址。 以便服务器可以正确连接回客户端以打开数据连接。 某些FTP客户端能够自动检测外部IP地址,有些则需要手动configuration。
智能防火墙/ NAT
一些防火墙/ NAT试图通过检查FTP控制连接和/或转换控制连接stream量中的数据连接IP地址来自动打开/closures数据端口。
有了这样的防火墙/ NAT,上述configuration对于普通的未encryption的FTP来说是不必要的。 但是这不能与FTPS协同工作,因为控制连接stream量是encryption的,防火墙/ NAT不能检查也不能修改。