FTP主动模式与被动模式
主动模式:客户端给服务端的21控制端口发命令说,我要下载什么什么,并且还会说我已经打开了自己的某个端口,你就从这里把东西给我吧,服务器知道后就会连接客户端已打开的那个数据端口把东西传给客户端,这就是主动模式,可以理解为服务端主动给客户端传输文件。
被动模式:客户端给服务器端的21端口发命令说,我要下载什么什么,服务端知道后,就打开一个空闲的端口,然后告诉客户端,我已经打开了某某端口,你自己进去拿吧。于是客户端就从那个端口进去拿文件了,这就是被动模式,可以理解为服务端被客户端拿走了东西。
主动模式与被动模式数据端口的选择
在主动模式下,客户端会打开一个端口,等待服务端的主动连接,因为端口是客户端主动打开的,并且客户端一般情况下也不会很忙,只是有需要才找服务端。所以这个端口一般默认打开20端口,并不一定是20端口。
在被动模式下,服务端会打开一个端口,等待客户端的主动连接,因为端口是服务端主动打开的,并且服务端一般情况下会很忙,因为可能要处理很多个客户端的请求,所以一般情况下服务端默认打开的这个端口不会是20,而是在某个高端口上(例如5500-6000端口)打开一个空闲的端口,然后通知客户端来连接。
在主动模式下,ftp的两个端口一般都是相对固定的,如果命令端口是x的话,那么数据端口就是x-1,也就是说默认情况下,命令端口是21,那么数据端口就是20;如果命令端口是600,那么数据端口就是599;
在被动模式下,默认情况下命令端口是21,但是数据端口是随机的。不过,因为被动模式中数据端口的范围是可以自定义的,因此也可以通过端口的范围去配置防火墙。
应用场景
一般工作中我们会选择FTP的被动模式,主动模式应用场景极少
拓展:为什么一般会选择被动模式?
在很久以前没有共享上网这种技术,也就是一个电脑一个ip。但是后来出现了,所以也就有了下面的问题:
大家都知道,共享上网就是很多台电脑共享一个公网ip去使用internet。再打个比喻吧,某个局域网共享210.33.25.1这个公网ip上网,当一个内网用户192.168.0.1去访问外网的ftp服务器时,如果采用主动模式的话,192.168.0.1告诉了ftp服务器我需要某个文件和我打开了x端口之后,由于共享上网的原因,192.168.0.1在出网关的时候自己的ip地址已经被转换成了210.33.25.1这个公网ip,所以服务器端收到的消息也就是210.33.25.1需要某个文件并打开了x端口,ftp服务器就会往210.33.25.1的x端口传数据,这样当然不会连接成功了,因为打开x端口的是192.168.0.1而不是210.33.25.1。当然,因为被动模式都是客户端主动进行端口连接,所以被动模式也就解决了这个问题。
不过可以通过配置路由,使得服务端可以连上192.168.0.1
比如说配置这么一个参数,让服务端把数据传到自己的5000端口,然后我帮你转发到192.168.0.1的6000端口,也就是一个简单的网络代理。
在LinuxcentOS7下,默认使用的是被动模式:
使用passive命令可以切换:
我们可以通过简单的"ls"命令来判断路由器是否配置了我们上面说的网络代理
怎么判断呢?
如果主动模式下的ls弹不出东西,就说明没有配置,如果ls命令显示了文件,就说明配置了;
如下:
拓展完毕!
最后总结就是这一张图
以上便是本篇文章的全部内容,感谢观看!