apache ftpserver 是主动还是被动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了apache ftpserver 是主动还是被动相关的知识,希望对你有一定的参考价值。

在做项目的时候我才发现,FTP竟然有主动FTP和被动FTP之分。FTP的设置主要是由FTP服务器设置的。同样的一段代码,在本地测试的时候一切正常,但是访问局方的FTP服务器时却不能传输数据。
下面我先简要地自己说一下,我对主被动FTP的理解。
众所周知,FTP是一个比较特殊的服务,它占用了20和21两个端口,21是命令端口,20是数据端口。顾名思义,21端口是用来接发命令,20端口用来传递数据。但是并不是所有的时候都用20端口来实现数据交换。
主动FTP过程大致如下:
1、客户端启用端口N(N>1024,因为1024之前为特殊端口,不能手动占用,把N当作客户端的命令端口)和端口N+1(客户端的数据端口),从端口N向服务器的21端口发送PORT命令,其中PORT命令包含客户端IP和数据端口
2、服务器接收到客户端的PORT命令后,并得知客户端用N+1端口监听数据。接着,服务器向客户端发送ACK应答(ACK与TCP通信中的连接握手一样)
3、服务器用20端口再向客户端的N+1端口发送数据请求
4、客户端向服务器端发送数据ACK应答
以上就是主动FTP的大致过程,但是数据请求的发起方是服务器,如果此时客户端的防火墙启用了高端端口的屏蔽的话,有可能会发生阻塞,所以主动FTP的情况下,客户端最好把防火墙关闭了。

被动FTP过程大致如下:
1、客户端启用端口N(同样的N>1024)和N+1,N用作命令端口,N+1用作数据端口。然后客户端向服务器端发送PASV请求,告诉服务器端,这是被动FTP请求
2、服务器端接收到PASV请求后,启动一个M(同样>1024)端口当作数据端,并发送PORT M到客户端
3、客户端得到服务器端的数据端口后,再由端口N+1向服务器的M端口发起数据请求
4、服务器端通过N端口向客户端的N+1端口发送ACK应答
以上是被动FTP的大致过程,与主动FTP请求不同,请求的发起方是客户端,这样客户端就不会为防火墙的问题感到烦恼,但是同样道理,服务器端的端口就会有了限制。

所以,一般情况下。服务器端为了方便管理,一般采用被动FTP方式连接。当然客户端可以通过ftp -d host port命令向服务器发送请求,可以看出到底用的是主动FTP还是被动FTP。

这次我就遇到了这样的问题,写FTP上传下载代码时,把网上的东西copy过来,很顺利地在本地测试通过了。但是链接到局方的服务器的时候,怎么也不能上传和下载,而且不会抛出异常。后来我也是试着添了一行代码,结果测通了,代码如下:
FtpDefine.ftpServer.enterLocalPassiveMode();
怎么样,看起来很简单吧。因为写代码默认情况下是主动FTP,必须通过enterLocalPassiveMode()方法设置成被动FTP才能顺利上传下载。

另外还有很多问题需要考虑,比方说代码的可扩展性、可移植性等等。就拿这次的代码来说,我测试的时候客户端和服务器端都是Windows Xp系统,而且FTP服务器设置的是主动FTP。但是真正用的时候,客户端是Linux系统,服务器虽然是Windows的,但是他们没有用Windows自带的FTP,而是用的软件,用法与Linux系统的相似,所以因为这个问题,我配错了配置文件,结果在代码中切换服务器目录时,总是报错。所以再此,我提醒大家,万事小心谨慎!希望我写的这些会对大家有点帮助。如果觉得看不懂的话,请参考我下面列出的链接地址,那里有更详细的说明。
参考技术A 被动

主动吸收和被动吸收各自的含义

被动吸收是通过滤过、渗透、简单扩散和易化扩散(需要载体)等几种形式,将消化了的营养物质吸收进入血液和淋巴系统;这种吸收形式不需要消耗机体能量;一些分子量低的物质,如简单多肽、各种离子、电解质和水等的吸收即为被动吸收.
主动吸收(flash)与被动吸收相反,必须通过机体消耗能量,是依靠细胞壁“泵蛋白”来完成的一种逆电化学梯度的物质转运形式;这种吸收形式是高等动物吸收营养物质的主要方式.
主动吸收就是主动运输主要区别有两点:主动运输需要能量和载体,可以跨浓度梯度运输。被动吸收有滤过、渗透、简单扩散和易化扩散,除易化扩散外都不需要载体,但都是顺浓度梯度运输,即靠渗透压来运输,但都不消耗能量。
要验证是不是主动运输只要看在运输过程中要不要能量就行了
参考技术A 被动吸收是通过滤过、渗透、简单扩散和易化扩散(需要载体)等几种形式,将消化了的营养物质吸收进入血液和淋巴系统;这种吸收形式不需要消耗机体能量;一些分子量低的物质,如简单多肽、各种离子、电解质和水等的吸收即为被动吸收。

主动吸收(flash)与被动吸收相反,必须通过机体消耗能量,是依靠细胞壁“泵蛋白”来完成的一种逆电化学梯度的物质转运形式;这种吸收形式是高等动物吸收营养物质的主要方式。

以上是关于apache ftpserver 是主动还是被动的主要内容,如果未能解决你的问题,请参考以下文章

如何设置IIS FTP的设置主动模式还是被动模式

主动吸收和被动吸收各自的含义

ftp实现普通账号和vip账号限速

服务器phpstudy ftpserver 配置好了但是本地无法连接

sftp是主动式还是被动式ftp? 使用的端口是22还是115?

zabbix-主动与被动监控模式