`
explorer
  • 浏览: 95663 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

FTP集成开发总结-之主动、被动模式

阅读更多
  • FTP协议背景

ftp协议的正常工作需要两个TCP连接:命令端口、数据端口。 前者用来传输纯文本的命令交互,此连接在整个FTP会话周期中不中断; 后者用来传输二进制、文本等数据信息,只是在需要传输数据时,才会建立此连接,传输数据完毕就关闭,属于临时会话的性质。

  • 第一阶段 建立ftp会话

1. 服务器在21端口监听。 客户端在本地随机端口(eg 1982)发起和服务器21端口的TCP 连接,建立TCP连接成功后 next 。
2. 服务器发送hello信息给客户端
3. 客户端分别 通过USER PASS命令输入正确的用户、口令登陆
4. 服务器认证通过后返回2xx 正确相应。
   至此FTP会话层(按ISO7层的定义)已成功建立
5. 客户端发送 CDUP PWD CWD 等命令切换当前工作目录
6. 服务器响应请求,并在命令端口返回指令相应 eg: 2xx 5xx 4xx
   至此客户端、服务端的交互均仅仅局限在命令端口进行,双方的交互只占用一个TCP连接。对于NAT 防火墙等都不会有什么特殊影响

  • 第二阶段 客户端请求数据


所谓主动模式、被动模式是指在数据端口工作时 服务器的在TCP 传输层的动作模式
主动模式下: 
1. 客户端首先要用PORT命令告诉服务器,准备传数据了,并告知它自己在本地哪个端口listen;
2. 服务端收到PORT后,返回2xx 正确响应
3. 客户端再通过STOR RETR LIST等告诉服务端 它想要的数据
4. 服务端收到后,服务端主动发起本地一个随机端口至客户端listen的端口的 TCP连接, 再将数据塞给客户端
5. 服务器塞数据完毕后,在命令端口中返回2xx 正确响应。
6. 工作结束,关闭4 中建立的临时TCP连接。 命令端口的连接仍然保持,服务端等待客户端命令

被动模式下:
1. 客户端首先要用PASV命令告诉服务器,准备传数据了
2. 服务端收到PASV后,在本地listen一个端口,并返回2xx 正确相应信息 + listen的端口
3. 客户端收到响应后,发送STOR RETR LIST 等告知服务端 它想要的数据
4. 服务端收到命令后,准备相关数据,完毕后发送150 响应
5. 客户端收到正确响应后,客户端主动发起一个本地随机端口至服务端listen的端口的 TCP连接, 然后服务器将数据在此TCP连接塞给客户端。
6. 服务端塞数据完毕后,在命令端口中返回2xx 正确响应。
7. 工作结束,关闭4 中建立的临时TCP连接。 命令端口的连接仍然保持,服务端等待客户端命令
另:PORT PASSIVE命令中携带的端口信息是这样的:192,168,0,1,55,66 。 前面4个 192 168 0 1 是ip地址,后面两个计算后代表端口号: 55*256 + 66 = 14146, 14146就是端口号了

简而言之就是:
主动模式下,服务器把活包干了。客户端想要数据时,就简单的开本地监听端口,坐等服务器将数据塞给客户端;
被动模式下,服务器比较懒,客户端想要数据时,得要请求服务器监听一个端口,然后客户端主动连接服务器才能得到想要的数据。

  • 部署问题:


  中国的ip地址资源太少,很多情况下ftp回话两端要经过层层NAT、网关、防火墙。 导致PORT PASV中的ip 信息不一定都是正确的。比如client的ip是192.168.0.107,其实它是通过NAT连接上网的,该NAT对外的internet地址是218.2.135.1,那么client 发送的PORT指令中携带的192,168,0,107,xx,yy 对于server是没有意义的。 所幸现在的NAT、防火墙一般都有FTP应用层感知能力,它能够截获ftp会话中的PORT PASSIVE, 自动将private的ip翻译成对外的正确的ip,并实时的在NAT上开放临时端口转发 。刚才的例子就会翻译成 218,2,135,1,xx,yy。 所以一般情况下,ftp还是能够正常工作的。

  主动模式下,客户端的NAT、防火墙容易导致连接问题。比如PORT 后 NAT需要临时开转发端口,并改变TCP报文中PORT的内容,如果NAT不具备应用层解析能力或只能感知标准21端口的命令,都将容易导致传数据失败。 而且 主动模式下对于使用代理、ssl,会带来很多其它问题。
  被动模式下,问题主要集中在服务端的网络。因为需要服务器开临时端口并listen,对其部署的Firewall 要求有动态开 forward 的能力,这可能带来一定的安全隐患。 但是,大部分情况下,服务端的网络管理员应该已经配置了对FTP的支持。 所以推荐:大部分情况下,还是使用被动模式比较好。

分享到:
评论

相关推荐

    ftp集成包实用工具

    总结来说,FTP集成包是开发中的利器,尤其对于需要频繁进行文件传输的项目。它封装了复杂的FTP协议,使开发者能更专注于业务逻辑,而非底层通信细节。通过理解和熟练运用FTP集成包,可以有效地提升开发速度,保证...

    C# FTP服务器 客户端 开发

    FTP使用TCP作为传输协议,并且分为两种模式:主动模式和被动模式,以应对不同网络环境下的连接问题。 2. C# FTP服务器开发: - 使用System.Net.FtpServer库:C#中可以利用开源库如`System.Net.FtpServer`来创建FTP...

    appache ftp 资源下载

    - **FTP模式选择**:FTP有主动模式和被动模式两种。主动模式中,服务器主动建立数据连接;被动模式中,客户端创建数据连接。选择哪种模式取决于防火墙或NAT设备的配置。 - **文件操作**:上传和下载文件是FTP的主要...

    apache mina 学习笔记三(子项目FtpServer)

    MINA FtpServer使用MINA的核心I/O抽象来处理数据连接,支持主动和被动模式的数据传输。在主动模式下,服务器主动建立数据连接;而在被动模式下,客户端发起数据连接。开发者可以通过`DataConnectionConfiguration`来...

    ftp 各种客户端 ftp4j-1.5.1.zip j-ftp-1.52.tar.gz jsch-0.1.43.zip

    FTP4J是由Marco Tuzzo开发的开源库,它提供了完整的FTP协议支持,包括ASCII和二进制模式的数据传输、被动和主动模式、TLS/SSL安全连接以及断点续传等功能。开发者可以使用FTP4J轻松地在Java应用中集成FTP服务,进行...

    FTP - RFC959 中文版

    数据连接则用于实际的数据传输,可以是主动模式或被动模式。主动模式中,客户端指定一个端口,服务器连接到这个端口来传输数据;而在被动模式下,服务器打开一个随机端口,并告诉客户端来连接它,以避免防火墙问题。...

    C#FTP服务器和客户端开发002

    - 数据连接:FTP协议使用两种模式——主动模式和被动模式。在主动模式下,客户端打开一个随机端口,然后通过发送"PASV"命令告知服务器,服务器将连接到这个端口传输数据。在被动模式下,服务器提供一个端口,客户端...

    FTp 开发案例

    FTP有两种工作模式:主动模式和被动模式。主动模式中,服务器在完成控制连接后主动打开一个数据连接到客户端指定的端口;而在被动模式下,服务器会告诉客户端一个等待数据连接的端口号,由客户端发起数据连接。 在...

    java FTP server

    5. **被动模式和主动模式**:FTP协议支持两种工作模式,主动模式(PORT)和被动模式(PASV)。在主动模式下,服务器发起数据连接;而在被动模式下,客户端发起数据连接。Java FTP Server需要根据客户端的请求切换这...

    ftp 上传文件及ftp开发文档

    FTP支持几种模式,如主动模式和被动模式,以处理防火墙和NAT设备可能遇到的问题。 在C语言中实现FTP上传文件,首先需要包含相关的头文件,如`#include <stdio.h>`、`#include <sys/socket.h>`、`#include ...

    ftp客户端课程设计报告书.doc

    - FTP有两种工作模式:Port模式(主动模式)和Passive模式(被动模式)。Port模式下,客户端指定一个端口供服务器发送数据;Passive模式下,服务器选择一个端口向客户端发送数据,以解决防火墙和NAT穿透问题。 三...

    QT5.0实现FTP服务器

    FTP支持主动和被动模式,以适应不同的防火墙和NAT配置。 在QT5.0中实现FTP服务器,我们可以利用QNetworkAccessManager和相关类,如QTcpServer和QTcpSocket。QNetworkAccessManager是处理HTTP和FTP等网络请求的核心...

    c# FTP 源码

    首先,FTP协议基于TCP/IP模型,主要分为两个模式:主动模式(Port)和被动模式(Passive)。在C#中,通过使用System.Net.Sockets命名空间下的Socket类,我们可以直接操作网络层的数据传输,实现FTP功能。 1. **建立...

    android ftp上传下载

    - FTP有两种工作模式:主动模式(Active Mode)和被动模式(Passive Mode)。在Android设备上,由于防火墙和NAT配置,通常使用被动模式来解决连接问题。 2. **Android FTP库** - 在Android中,使用Java的`java...

    FTPserver_swing_java_ideajava开发ftp_ftp_Server_

    FTP协议支持两种模式:主动模式和被动模式,以适应不同网络环境下的数据传输。 在Java中实现FTP服务器,通常会用到如Apache Commons Net这样的库,它提供了FTPServer接口和相关的实现类,使得开发者能够方便地创建...

    ftp客户端的开发与设计

    FTP有两种主要的工作模式:主动模式和被动模式。主动模式下,客户端打开一个端口,等待服务器连接;被动模式下,服务器打开一个端口,等待客户端连接。两种模式的选择取决于防火墙设置等因素。 #### 三、软件需求...

    java连接apache的FTP包commons-net-1.4.1.jar,jakarta-oro-2.0.8.jar

    4. **设置传输模式**:`FTPClient`支持主动模式和被动模式,可以通过`enterLocalPassiveMode()`和`enterLocalActiveMode()`进行切换,以适应不同网络环境下的FTP连接。 5. **处理编码问题**:Apache Commons Net库...

    ftp控件(VB inet 控件)

    4. 设置传输模式:可以设置为主动模式或被动模式,通过SetPasvMode方法切换。 5. 传输设置:包括设置数据传输的缓冲区大小、是否启用二进制模式等。 VB Inet控件的使用通常涉及以下几个步骤: 1. 在VB工程中引入...

    visiual C++开发典型模块大全--FTP文件上传下载模块

    FTP有主动模式和被动模式,需要根据服务器配置选择合适的连接方式。 3. **MFC的CInternetSession和CFtpConnection**:MFC库提供了一套封装好的网络类,如CInternetSession和CFtpConnection,它们简化了FTP连接和...

    asp.net FTP客户端设计与开发(源代码+论文).zip

    - FTP模式:包括主动模式和被动模式,主动模式由服务器主动建立数据连接,而被动模式则由客户端建立,以解决防火墙问题。 2. **ASP.NET FTP客户端开发** - 使用FtpWebRequest:创建FtpWebRequest对象,设置其属性...

Global site tag (gtag.js) - Google Analytics