FTP的主动传输和被动传输

1.什么是FTP协议

FTP(File TransferProtocol,文件传输协议)是TCP/IP协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。

eg:在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。

当FTP客户端需要登陆到FTP服务器上的时候,服务器与客户端需要进行一系列的身份验证过程,这个过程就叫做命令连接。如在客户端向服务器发起连接请求的时候,客户端会随即的选择某个TCP端口来跟FTP服务器的21号端口进行连接,这主要是通过TCP三次握手来实现的。当三次握手完成之后,客户端与服务器之间便建立了命令连接通道。不过这个通道的用途是非常有限的,其主要用来传输FTP的相关指令。如查看文件列表、删除文件等等,而不能够用来在客户端与服务端进行文件传输。为此这个通道就被称之为命令通道。而跟数据传输相关的为数据通道。

到客户端与服务器建立了连接之后,可能客户端暂时不需要进行数据传输。如只是需要查看目录下的文件或则其他相关的动作。此时之需要命令连接通道就可以完成了。如果此时客户端需要往FTP服务器上上传或者下载文件的话,就需要在客户端与服务器端再建立一条额外的数据传输连接。

FTP是仅基于TCP的服务,不支持UDP。默认情况下FTP协议使用TCP端口中的 20和21这两个端口,一个数据端口和一个命令端口(也可叫做控制端口),也就是20号端口用于传输数据,21号端口用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。这就是主动与被动FTP的最大不同之处。

FTP支持两种模式,一种方式叫做Standard(也就是 PORT方式,主动方式),一种是 Passive (也就是PASV,被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP服务器。Passive模式FTP的客户端发送 PASV命令到 FTP Server。

2.主动传输模式(PORT)

FTP客户端从任意的非特殊的端口(N >1024)连入到FTP服务器的命令端口——21端口。然后客户端在N+1端口监听,并且通过该N+1端口发送PORT命令给FTP服务器,接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。在主动传输模式下,FTP的数据连接和控制连接的方向是相反的,也就是说:是客户端向服务器建立控制连接,服务器向客户端建立数据连接,其中,客户端的控制连接和数据连接的端口号是大于1024的两个端口号(临时端口),而FTP服务器的数据端口为20,控制端口为21

主动方式FTP的主要问题实际上在于客户端。FTP的客户端并没有实际建立一个到服务器数据端口的连接,它只是简单地告诉服务器自己监听的端口号,服务器再回来连接客户端这个指定的端口。对于客户端的防火墙来说,这是从外部系统建立到内部客户端的连接,这是通常会被阻塞的。

对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP

①从任何大于1024的端口到服务器的21端口(客户端的初始化连接)

②服务器的21端口到任何大于1024的端口(服务器响应到客户端的控制端口的连接)

③从任何大于1024端口到服务器的大于1024端口(客户端初始化数据连接到服务器指定的任意端口)

④服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)

3.被动传输模式(PASV)

为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。在被动方式FTP中,命令连接和数据连接都由客户端发起,只要求服务器端产生一个监听相应端口的进程,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。

当开启一个FTP连接时,客户端随机打开一个大于1024的本地端口N向服务器的21号端口发起连接,同时会开启N+1号端口。然后向服务器提交 PASV命令,通知服务器自己处于被动模式。那么服务器收到命令后就会开启一个任意的非特权端口(P > 1024)监听,并发送PORT P命令给客户端通知自己的数据端口是P。然后客户端通过本地端口N+1连接到服务器的端口P的连接用来传送数据。在被动模式下,FTP的数据连接和控制连接的方向都是一致的,也就是说:是客户端向服务器发起一个用于数据传输的连接,客户端的连接端口是发起这个数据连接请求时使用的端口。客户端的控制连接和数据连接的端口号是大于1024的两个端口号(临时端口),而服务器端的数据端口是临时端口,而不一定是常规的20

 

从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。而FTP的复杂性就在于此。

 

有个总结很方便记忆:

--------------------------------------------------------------------------------

主动模式:服务器向客户端敲门,然后客户端开门

被动模式:客户端向服务器敲门,然后服务器开门

所以,如果你是如果通过代理上网的话,就不能用主动模式,因为服务器敲的是上网代理服务器的门,而不是敲客户端的门。而且有时候,客户端也不是轻易就开门的,因为有防火墙阻挡,除非客户端开放大于1024的高端端口。

--------------------------------------------------------------------------------

4.主动与被动FTP优缺点

主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。还有一点在于,主动模式是由客户端指定端口,服务器主动去连接,其对于服务器的要求较高,若客户端一方在防火墙后,从外向内的主动连接通常易被阻挡。如进行内外机器映射,则须同时映射控制端口和数据传输端口,但由于数据端口是由客户端随机指定的并不固定,这也加大建立连接的难度。

被动模式则一定程度上减轻了服务端的压力,由服务器指定端口,并等待客户端发起连接。但被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。

幸运的是,有折衷的办法。既然FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定一个有限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减少了危险。

5.两种方式该如何选择

当企业的网络环境不同,两个操作模式的应用效果是不同的。这主要是主动操作模式与被动操作模式在数据的传输通道建立上有一定的差异。从以上的分析中我们可以看出,在主动操作模式下,FTP服务器的20号端口是主动同客户端联系,建立数据传输通道的。而在被动操作模式下,则FTP服务器是被动的等待,等待客户端与其20号端口建立连接。不要小看这个细小的差异,这个差异却决定了两者应用环境的不同。一般来说,如果这个FTP服务器只对企业的内部局域网客户提供文件传输的服务,那么基本上两者的应用效果没有很大的差异。但是如果企业网络外部的用户也需要通过互联网与FTP服务器进行文件传输的话,就会有很大的不同。这主要是因为,在数据通道建立的过程中,客户端会在另一个端口上监听等待连接,并利用命令连接通道告诉服务器其监听的端口号。然后企业的边界路由器会将FTP的IP地址转换为合法的公网IP地址(假设企业由于公网IP地址有限,在边界路由器上通过NAT服务向外部用户提供FTP连接)。如果此时采用的是自动操作模式的话,则在连接这个数据通道的过程中FTP服务器会主动跟边界路由器的端口进行通信(因为FTP服务器认为这台边界路由器,其实就是NAT服务器,就是FTP客户段)。但是实际上不是,而且也有可能没有启用这个端口。为此客户端与FTP服务器之间的连接最终没有建立起来。所以说,如果采用主动操作模式的话,当FTP服务器部署在NAT等服务器后面的时候,则FTP服务器与客户端之间只能够建立命令连接通道,而无法建立起数据传输通道。如果FTP服务器与客户端之间还有防火墙的话,在连接的过程中也会出现以上类似的情况。

而如果是采用被动操作模式的话,是客户端主动跟服务器的20号端口进行连接的。为此在数据传输通道建立的过程中,即使中间有NAT服务器或者防火墙,也会准确无误的连接到FTP服务器的数据传输接口。所以说,如果在客户端与FTP服务器之间存在防火墙或者NAT服务器等类似设备的话,那么在FTP服务器部署的时候,最好采用被动操作模式。否则的话,很可能只能够建立命令连接通道,而无法进行数据传输。在FTP服务器部署的时候,其默认采用的是主动操作模式。如果企业FTP服务器的用户都是在内部网络中的,即不用像外部网络的用户提供FTP连接的需求,那么采用这个默认操作方式就可以了。但是如果一些出差在外的员工或者员工在家庭办公时也需要访问企业内部的FTP服务器,而此时出于安全的考虑或者公网IP地址数量的限制,企业往往会把FTP服务器部署在防火墙或者NAT服务器的后面,此时这个主动操作模式就不行了。如果企业中通过互联网来访问企业内部FTP服务器的员工比较多的时候,那么最好能够一劳永逸的解决这个问题,即在FTP服务器上进行设置,强制客户端在连接的时候采用被动操作模式。相反如果用户比较少的话,而且用户又具有一定的计算机知识,那么可以不在服务器上进行设置。而是在连接的过程中,通过FTP客户端来设置。如在某些FTP客户端上,会有一个Passive Transfers等类似的选项。选中这个选项就表示以被动操作方式进行传输。而没有选中这个选项的客户端则仍然采用主动操作模式来进行连接。

总之,在FTP服务器部署的时候考虑是要采用主动操作模式还是被动操作模式,只需要记住一个原则,即如果把FTP服务器部署在防火墙或者NAT服务器的背后,则采用主动操作模式的客户端只能够建立命令连接而无法进行文件传输。如果部署完FTP服务器后,系统管理员发现用户可以连接上FTP服务器,可以查看目录下的文件,但是却无法下载或者上传文件,如果排除权限方面的限制外,那么很有可能就是这个操作模式选择错误。系统管理员告诉用户选择合适的操作模式,基本上就可以解决文件传输的问题了。

 

 

 

参考来源:

http://www.tuicool.com/articles/vMze6nj

http://blog.csdn.net/basycia/article/details/52039501

http://blog.csdn.net/u010154760/article/details/45458219

http://www.cnblogs.com/xiaohh/p/4789813.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章