• FTP的主动模式和被动模式


     

    摘自http://blog.csdn.net/love_gaohz/article/details/50723164

      http://my.oschina.net/binny/blog/17469

    FTP的主动模式和被动模式

     

     

    主动模式:客户端通过控制链接发送PORT <address>(IP 地址和两字节的端口 ID)给服务器,然后bind之后对发送的端口进行监听。服务器收到后通过端口20和客户端建链,发送数据。

        被动模式:客户端通过发送PASV 请求服务器等待链接。服务器返回。这意味着在服务器上有一个端口被开放,他将为我们后面接着的数据传输作好准备,但是我们如何知道该端口号呢,就在中,前面四位指服务器的地址,关键是最后两位,将最后第二位乘再加上最后一位的值就是我们的端口号,也就是。取得端口号之后我们就可以用连接到这里。去获取数据。

      最近做一个项目用到FTP和其它系统进行文件传输,结果在FTP网络连接的问题上花了很多时间,由于太久没搞多FTP,忘记了FTP不单单开放21端口,客户端采用不同连接模式对网络有不同。在此重温一下FTP的主动模式和被动模式的相关知识。

        在使用FTP时,如果客户端机器和FTP服务器双方之间的所有端口都是开放的,那连接不存在问题。如果客户端与服务器之间有防火墙,如果没配置好防火策略和采用合适的连接模式,会导致登录成功,但无法List列表的问题。要避免出现这样的问题,首先要了解FTP的工作模式。

        1.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以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输,原理如下图:

     

        2.两种模式的比较

         从上面的运行原来看到,主动模式和被动模式的不同简单概述为: 主动模式传送数据时是“服务器”连接到“客户端”的端口;被动模式传送数据是“客户端”连接到“服务器”的端口。

        主动模式需要客户端必须开放端口给服务器,很多客户端都是在防火墙内,开放端口给FTP服务器访问比较困难。

        被动模式只需要服务器端开放端口给客户端连接就行了。

        3.不同工作模式的网络设置

        我在实际项目中碰到的问题是,FTP的客户端和服务器分别在不同网络,两个网络之间有至少4层的防火墙,服务器端只开放了21端口, 客户端机器没开放任何端口。FTP客户端连接采用的被动模式,结果客户端能登录成功,但是无法LIST列表和读取数据。很明显,是因为服务器端没开放被动模式下的随机端口导致。

        由于被动模式下,服务器端开放的端口随机,但是防火墙要不能全部开放,解决的方案是,在ftp服务器配置被动模式下开放随机端口在 50000-60000之间(范围在ftp服务器软件设置,可以设置任意1024上的端口段),然后在防火墙设置规则,开放服务器端50000-60000之间的端口端。

        主动模式下,客户端的FTP软件设置主动模式开放的端口段,在客户端的防火墙开放对应的端口段。

     

        4.如何设置 工作模式?

        哈哈,有人可能会问FTP服务器如何设置工作模式?实时上FTP服务器一般都支持主动和被动模式,连接采用何种模式是有FTP客户端软件决定。

  • 相关阅读:
    女白领在家玩打地鼠游戏,无意间学会python编程,还有教程有源码
    Python入门小游戏,炫酷打地鼠教程第二部分,都是干货
    从python入门开始,玩这个炸弹超人小游戏,打通关就可以掌握编程
    Python如何入门?直接按这个方式玩炸弹超人小游戏,就能掌握编程
    Python如何入门?搭配这些游戏,学习高效还有趣
    资深程序员教你,利用python预测NBA比赛结果,太精彩了
    Python入门小迷宫,走完这个迷宫,就能掌握python编程基础
    从零基础开始,用python手把手教你玩跳一跳小游戏,直接打出高分
    戏精程序员,用python开发了一个女朋友,天天秀恩爱
    Python入门小游戏之坦克大战,不懂编程都能做出来,附所有源码
  • 原文地址:https://www.cnblogs.com/LiuYanYGZ/p/5594373.html
Copyright © 2020-2023  润新知