Ftp即文件传输协议,说白了就是处理文件操作的。可能你还听说过Ftps、SFtp,简单说一下他们的区别吧
Ftps:可以理解为Ftp+Ssl,Ftp与Ftps的关系就类似Http和Https的关系
SFtp:可以理解为Ftp+SSH
总之,可以理解为Ftp就是明文传输,Ftps、SFtp采用了加密传输。
好了,本文继续说说主动模式和被动模式,首先,我们先要知道Ftp的两个端口:
命令控制端口:用于发送FTP命令信息,默认是21
数据传输端口:用于上传、下载文件数据,默认是20
主动模式
1、客户端首先打开随机端口A,连接到Ftp的命令控制端口(默认是21)
2、客户端再次打开一个不同于A的随机端口B
3、客户端使用PORT命令将打开的随机端口B发送给Ftp
4、Ftp使用20端口连接到客户端打开的随机端口B
5、Ftp和客户端使用20、B两个端口传输数据
被动模式
被动模式的数据发送流程大概是这个样子的
1、客户端首先打开随机端口A,连接到Ftp的命令控制端口(默认是21)
2、然后客户端发送PASV命令到Ftp服务端,然后Ftp将会打开一个随机端口B(端口号大于1023小于65535)
3、Ftp将打开的随机端口B发送给客户端
4、客户端再次打开一个不用于A的随机端口C,连接到Ftp打开的随机端口B
5、Ftp和客户端使用B、C两个端口传输数据
优缺点
主动模式:方便服务端管理,Ftp服务端只开启了一个20端口用来传输数据,但是不方便客户端的管理。
因为数据传输连接由Ftp服务端发起,如果Ftp服务端开启了防火墙,只需要放行21端口,
如果客户端开启了防火墙,需要放行一段端口,否则可能导致连接失败
被动模式:方便客户端管理,因为数据传输连接由客户端发起,
如果Ftp服务端开启了防火墙,那么需要在Ftp上放行一段接口,这个相对容易实现。
客户端是否开启了防火墙,对被动模式没什么影响。
现实中,我们一般是只有一个服务端多个客户端,而且往往客户端是个人电脑,那么多数时候是开启了防火墙的,隐藏往往被动模式更适合大多数人。
验证
最后再说一个问题,我们怎么验证一个Ftp服务端是支持主动模式还是被动模式?
经过验证,如果不使用代码的情况下和安装第三方软件的情况下,一般有两个办法:
1、使用资源管理器验证,但是这个情况下只能验证是否支持被动模式,如果资源管理器能打开,那么表示支持被动模式
2、使用Telnet来验证,比如有个ftp地址:10.255.0.162,
验证是否支持被动模式:
# 打开cmd,使用telnet连接到21端口
telnet 10.255.0.162 21
# 使用USER、PASS命令登录
USER ftp_user
PASS 123456
# 发送PASV命令,告诉Ftp表示一个被动连接
PASV
如果最后的结果显示下面的结果,则表示支持被动模式,同时可以从下面的结果中看到,服务端开启了一个端口16523(64*256+139):
否则表示不支持被动模式:
验证是否支持主动模式:
# 打开cmd,使用telnet连接到21端口
telnet 10.255.0.162 21
# 使用USER、PASS命令登录
USER ftp_user
PASS 123456
# 使用PORT命令随便发送一个端口,告诉Ftp表示一个主动连接
PORT 58899
如果显示的结果是类似下面的样子,说明支持主动模式。
你可能会说,这不是报错了么,其实这个是因为我们发给Ftp服务端的端口未打开导致的,如果不支持主动模式的话,会返回550代码,而不是500代码:
总结
Ftp的主动模式和被动模式其实就是区分数据传输连接的发起方,如果是由Ftp服务端发起,那么就是主动模式,如果是由客户端发起,那么就是被动模式。
如果你对主动模式和被动模式犹豫不决,那么可以优先选择被动模式,或者两个一起用。
标签:Ftp,被动模式,端口,21,主动,服务端,客户端 From: https://www.cnblogs.com/shanfeng1000/p/17609372.html