FTP主动和被动模式区别?

【前言】

   要弄清FTP主动和被动模式区别,首先需要弄清端口。本质上ftp协议是TCP/IP的上层协议,即应用层协议,也就是说如果要实现一个ftp软件或工具,还是用socket去实现,因此需要弄清socket和端口是基础。注意以下几点:

    1.socket分为客户端和服务端,通常情况下服务端需要进行bind绑定端口操作,而客户端不需要操心本地端口的操作,客户端只需要在connect的时候传入服务端的IP和端口参数。其实在socket连接的过程中,双方都需要打开一个端口,只不过客户端的端口由系统自己产生,自己关闭。因为客户端关心的是服务端的端口,而不需要关心本地的端口。很多人误以为客户端不需要端口。

     2.ftp协议中会建立两条通道:一条是命令通道,进行命令传送,例如:客户端向服务端请求列表;另外一条是数据通道,就是在文件上传下载时使用。

FTP主动和被动模式

   ftp的主被动模式指的是在于数据通道的区别,也就是说在传输文件时才会有区分。通常说的ftp的21端口指的是命令通道,是服务端监听的21端口。而数据通道是文件传输前建立连接,传输完毕则关闭连接。下面具体介绍传输文件的时候主被动工作过程。

主动模式:

         建立连接,获取目录及列表 ,这个过程主被动没什么区别。下面是从客户端打印的连接过程:

响应:  220 Connected to 192.168.2.77 ready...
命令:  USER admin
响应:  331 Password required for admin.
命令:  PASS *****
响应:  230 User admin logged in.
状态:  连接成功
命令:  OPTS UTF8 OFF
响应:  500 'OPTS': command not understood.
状态:  正在取得目录列表...
命令:  PWD
响应:  257 "/E:/test/" is current directory.
状态:  成功取得目录列表

     下载文件时(主动模式)过程:

响应:  220 Connected to 192.168.2.77 ready...
命令:  USER admin
响应:  331 Password required for admin.
命令:  PASS *****
响应:  230 User admin logged in.
状态:  连接成功
状态:  开始下载 /E:/test/100.txt
命令:  CWD /E:/test/
响应:  250 CWD command successful. "/E:/test/" is current directory.
命令:  PWD
响应:  257 "/E:/test/" is current directory.
命令:  TYPE I
响应:  200 Type set to I.
命令:  PORT 192,168,2,77,59,188
响应:  200 Port command successful.
命令:  RETR 100.txt
响应:  150 Opening data connection for 100.txt.
响应:  226 Transfer complete.
状态:  下载成功

从上面的一行命令:  PORT 192,168,2,77,59,188意思是:PORT是告诉服务端是主动模式建立数据通道;192,168,2,77是客户端IP,;59,188是客户端随机产生的端口,其中端口号计算为  端口号 = 59 x 256 + 188;这个端口是在客户端监听,客户端告诉服务端这个端口号,让服务端来连,建立连接后传输文件。过一段时间后,会打印-----状态:  已经从服务器断开,下次传文件的时候重新来一遍。

 被动模式:

         连接命令通道没什么区别,数据传输时就不同了,过程如下:

响应:  220 Connected to 192.168.2.77 ready...
命令:  USER admin
响应:  331 Password required for admin.
命令:  PASS *****
响应:  230 User admin logged in.
状态:  连接成功
命令:  OPTS UTF8 OFF
响应:  500 'OPTS': command not understood.
状态:  正在取得目录列表...
命令:  PWD
响应:  257 "/E:/test/" is current directory.
状态:  成功取得目录列表
状态:  正在连接 192.168.2.77 ...
状态:  已经连接到 192.168.2.77:0。正在等待欢迎信息...
响应:  220 Connected to 192.168.2.77 ready...
命令:  USER admin
响应:  331 Password required for admin.
命令:  PASS *****
响应:  230 User admin logged in.
状态:  连接成功
状态:  开始下载 /E:/test/100.txt
命令:  CWD /E:/test/
响应:  250 CWD command successful. "/E:/test/" is current directory.
命令:  PWD
响应:  257 "/E:/test/" is current directory.
命令:  TYPE I
响应:  200 Type set to I.
命令:  PASV
响应:  227 Entering Passive Mode (192,168,2,77,62,17).
命令:  RETR 100.txt
响应:  150 Opening data connection for 100.txt.
响应:  226 Transfer complete.
状态:  下载成功

    被动模式传输文件的时候有一行命令 :  PASV   意思是告诉服务端是被动模式,然后服务端会随机产生一个端口发给客户端,这时是服务端监听,客户端去连接,然后传文件。

总结:

  以上介绍了主被动模式的过程,但网上有很多文章里罗列了很多端口,还有20端口等,最后再总结一下:

  一个socket连接,比如服务端监听的是21端口,客户端也需要一个端口打开和外面连接(为什么客户端需要端口?客户端可服务端都是设备,对外连接都需要打开一扇门,不打开怎么连接;只不过服务端指定了端口,并且绑定了该端口,客户端才能找到对应的去连)。所以,主动模式下,数据通道是服务端指定了20端口和客户端监听的那个随机端口对应的,也就是说ftp服务端在传文件的情况下,作为客户端,打开了20端口,连接ftp客户端监听的随机端口,这样建立了数据通道。主动模式下其实是服务端监听了21端口,而客户端监听了数据通道随机端口;在被动模式下就是服务端监听了21端口,也监听了数据通道随机端口。

最后说一句,FTP虽然是古老的东西,建立连接需要很多命令,下载上传文件也需要很多次命令,但在工作学习中ftp仍然是不可或缺的工具。

 

【参考】

              1.https://blog.csdn.net/qq_37851194/article/details/77622272

              2.https://blog.csdn.net/code09/article/details/3975223

              3.https://blog.csdn.net/zhangyuan12805/article/details/71425385

              4.https://blog.csdn.net/yxyhack/article/details/1826256

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值