前言
FTP这个简单服务竟然还区分主动和被动。我第一次接触到它,是在一次测试环境联调排查问题时,发现了网络通信异常,最后查资料才发现了FTP的主动和被动模式。
结论
先来上个简单的结论。
主动模式(PORT):客户端连FTP的默认21端口,先验证用户名密码,然后服务器会开放20端口,再去主动连客户端,连上后进行数据传输。
被动模式(PASV):客户端连FTP的默认21端口,先验证用户名密码,然后服务器会开放一个随机端口(大于1024)告诉客户端,等着客户端来连自己,连上后进行数据传输。
主动模式
FTP客户端使用随机端口N(大于1024)连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端开放N+1端口(如果端口已经被占用,则会再加1),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口。
FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据。
被动模式
FTP客户端使用随机端口N(大于1024)连接FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地开放一个端口(大于1024),然后把开放的端口告诉客户端, 客户端再通过N+1端口连接到服务器开放的端口进行数据传输。
如何选择
知道了主动模式与被动模式的原理后,我们再来总结一下二者的区别:
二者的区别主要在于建立数据传输连接的时候,主模式的连接发起方为服务器端,使用20号端口连接客户端的N+1端口建立数据连接。
被动模式连接发起方为客户端,客户端使用端口号+1去连接服务器的某一高位端口。
所以,使用哪一种模式,取决于你的防火墙是如何设置的。
我们搭建完FTP服务器后,通常会在防火墙放行21和20端口,只要客户端这边没有特殊的防火墙规则,那么使用主动模式一定没问题。
反过来,如果客户端这边有很严格的防火墙规则,而服务端防火墙规则可控(需要放行21和一个随机端口范围),那么就使用被动模式。
有一种常见问题是:服务器端只开放了21端口, 客户端机器没开放任何端口。
FTP客户端连接采用的被动模式,结果客户端能登录成功,但是无法LIST列表和读取数据。
很明显,是因为服务端没开放被动模式下的随机端口导致。
由于被动模式下,服务器端开放的端口随机,但是防火墙要不能全部开放,解决的方案是,在FTP服务器配置被动模式下开放部分随机高位端口(范围在FTP服务器软件设置,可以设置任意1024以上的端口段),然后在防火墙设置规则,开放服务器端相应的端口号即可。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !