独家:主动模式FTP与被动模式FTP该如何选择

独家:主动模式FTP与被动模式FTP该如何选择,第1张

如果企业FTP服务器的用户都是在内部网络中的,即不用像外部网络的用户提供FTP连接的需求,那么采用这个默认 *** 作方式就可以了。但是如果一些出差在外的员工或者员工在家庭办公时也需要访问企业内部的FTP服务器,而此时出于安全的考虑或者公网IP地址数量的限制,企业往往会把FTP服务器部署在防火墙或者NAT服务器的后面,此时这个主动 *** 作模式就不行了。如果企业中通过互联网来访问企业内部FTP服务器的员工比较多的时候,那么最好能够一劳永逸的解决这个问题,即在FTP服务器上进行设置,强制客户端在连接的时候采用被动 *** 作模式。相反如果用户比较少的话,而且用户又具有一定的计算机知识,那么可以不在服务器上进行设置。而是在连接的过程中,通过FTP客户端来设置。如在某些FTP客户端上,会有一个Passive Transfers等类似的选项。选中这个选项就表示以被动 *** 作方式进行传输。而没有选中这个选项的客户端则仍然采用主动 *** 作模式来进行连接。总之,在FTP服务器部署的时候考虑是要采用主动 *** 作模式还是被动 *** 作模式,只需要记住一个原则,即如果把FTP服务器部署在防火墙或者NAT服务器的背后,则采用主动 *** 作模式的客户端只能够建立命令连接而无法进行文件传输。如果部署完FTP服务器后,系统管理员发现用户可以连接上FTP服务器,可以查看目录下的文件,但是却无法下载或者上传文件,如果排除权限方面的限制外,那么很有可能就是这个 *** 作模式选择错误。系统管理员告诉用户选择合适的 *** 作模式,基本上就可以解决文件传输的问题了。

IP层的安全协议既可以是主动的,也可以是被动的。主动的安全协议是指客户端主动发起安全连接,而被动的安全协议则是指服务器接受客户端的安全连接请求。两者的区别在于,主动的安全协议可以更好地保护客户端的数据,而被动的安全协议则可以更好地保护服务器的数据。

在做项目的时候我才发现,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过来,很顺利地在本地测试通过了。但是链接到局方的服务器的时候,怎么也不能上传和下载,而且不会抛出异常。后来我也是试着添了一行代码,结果测通了,代码如下:
FtpDefineftpServerenterLocalPassiveMode();
怎么样,看起来很简单吧。因为写代码默认情况下是主动FTP,必须通过enterLocalPassiveMode()方法设置成被动FTP才能顺利上传下载。
另外还有很多问题需要考虑,比方说代码的可扩展性、可移植性等等。就拿这次的代码来说,我测试的时候客户端和服务器端都是Windows Xp系统,而且FTP服务器设置的是主动FTP。但是真正用的时候,客户端是Linux系统,服务器虽然是Windows的,但是他们没有用Windows自带的FTP,而是用的软件,用法与Linux系统的相似,所以因为这个问题,我配错了配置文件,结果在代码中切换服务器目录时,总是报错。所以再此,我提醒大家,万事小心谨慎!希望我写的这些会对大家有点帮助。如果觉得看不懂的话,请参考我下面列出的链接地址,那里有更详细的说明。

一FTP的PORT(主动模式)和PASV(被动模式)
1
PORT(主动模式)
PORT中文称为主动模式,工作的原理:
FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送
PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据
2
PASV(被动模式)
PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器,
服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端,
客户端再连接到服务器开放的端口进行数据传输。
二两种模式的比较
从上面的运行原来看到,主动模式和被动模式的不同简单概述为:
主动模式传送数据时是“服务器”连接到“客户端”的端口;被动模式传送数据是“客户端”连接到“服务器”的端口。
主动模式需要客户端必须开放端口给服务器,很多客户端都是在防火墙内,开放端口给FTP服务器访问比较困难。
被动模式只需要服务器端开放端口给客户端连接就行了。
三不同工作模式的网络设置
实际项目中碰到的问题是,FTP的客户端和服务器分别在不同网络,两个网络之间有至少4层的防火墙,服务器端只开放了21端口,
客户端机器没开放任何端口。FTP客户端连接采用的被动模式,结果客户端能登录成功,但是无法LIST列表和读取数据。很明显,是因为服务器端没开放被动模式下的随机端口导致。
由于被动模式下,服务器端开放的端口随机,但是防火墙要不能全部开放,解决的方案是,在ftp服务器配置被动模式下开放随机端口在
50000-60000之间(范围在ftp服务器软件设置,可以设置任意1024上的端口段),然后在防火墙设置规则,开放服务器端50000-60000之间的端口端。
主动模式下,客户端的FTP软件设置主动模式开放的端口段,在客户端的防火墙开放对应的端口段。
四如何设置
工作模式
实时上FTP服务器一般都支持主动和被动模式,连接采用何种模式是有FTP客户端软件决定。

设置FTP的主动模式和被动模式,用到的工具:8uftp,步骤如下:

打开8uftp软件,点击编辑菜单--选项:

2防火墙设置,勾选被动(PASV)模式(p)就是被动模式,去掉勾选就是主动模式。

注意事项:适用于8uftp

FTP中,PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据。 PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。 从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13477452.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-14
下一篇 2023-08-14

发表评论

登录后才能评论

评论列表(0条)

保存