FTP是仅基于TCP的服务,不支持UDP。与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口)。通常来说这两个端口是21(命令端口)和20(数据端口)。
     但FTP工作方式的不同,数据端口并不总是20。这就是主动与被动FTP的最大不同之处。 
     (一)主动FTP  
        主动方式的FTP是这样的:客户端从一个任意的非特权端口N(N大于1024)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。
    针对FTP服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式FTP:    
    1. 任何大于1024的端口N 到FTP服务器的21端口。(客户端初始化的连接)  
    2. FTP服务器的21端口 到大于1024的端口N。 (服务器响应客户端的控制端口) 
    3. FTP服务器的20端口 到大于1024的端口。(服务器端初始化数据连接到客户端的数据端口)
    4. 大于1024端口 到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口) 
 
可以简单概括为以下两点:
    1、主动FTP:  
            命令连接:客户端 (大于1024端口) ->  服务器 21端口  
            数据连接:服务器 20端口 ->  客户端(大于1024的端口)
 
(二)被动FTP  
    为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。
   在被动方式FTP中,命令连接和数据连接都由客户端发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。
   当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N 大于 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P大于 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。  
       对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:     
    1. 从任何大于1024的端口N 到服务器的21端口(客户端初始化的连接)  
    2. 服务器的21端口 到任何大于1024的端口N(服务器响应到客户端的控制端口的连接)
       
    3. 从任何大于1024端口N+1 到服务器的大于1024端口X(客户端初始化数据连接到服务器指定的任意端口)
     (X这个端口是个1025--5000的端口)
    4. 服务器的大于1024端口X 到远程的大于1024的端口N+1(服务器发送ACK响应和数据到客户端的数据端口)
 
2、被动FTP: 
            命令连接:客户端大于1024端口 -> 服务器 21端口 
            数据连接:客户端大于1024端口 -> 服务器大于1024端口
(通过21端口告诉客户机自己打开哪个端口传数据(这个端口是个1025--5000的端口)最后客户机连接服务器的所告知的端口。这个过程中服务器除了要开放21端口外,还要开放1025--5000的所有端口才行,如果这样开放就不是防火墙了。)
        有些ftp客户端默认就是使用PASV被动模式来连接ftp服务器的,如果我们的ftp服务器只支持主动模式,就会造成客户端可以进行用户验证,但无法列目录,也无法进行数据传送,并提示“你没有权限”这样的550返回错误。

  这里探讨一些解决方法,旧版本的IIS要修改注册表才可以实现指定少部分端口用于被动传输,新版的IIS则可以在IIS FTP内部直接设置哪些端口可以用于被动传输。

          如果无法升级,可以考虑使用serv-u软件架设ftp,这个FTP服务器提供了PASV的端口范围设置,这样一来就可以做一个相对简单又相对稳定的设置。
            最后在外部物理防火墙也要进行设置,
                方案:

静态端口地址映射,可以让用户通过外网地址+端口21来访问内网中特定的FTP服务;
                 在防火墙中设置ACL,充许用户可以通过TCP访问FTP服务器的6800-6900端口;
     

 
(三)主动与被动FTP优缺点:       
    主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。
       
(四)
        在因特网上找到许多FTP服务器,有的要么只支持PORT,有的要么只支持PASV,有的是因为考虑安全因素,有的是因为条件限制等等。
        最好把你的FTP做成PORT和PASV方式都能支持的,这样不会使客户端在连接上受到困扰,特别是一些新手。
 
        比较容易理解的解释是针对FTP服务端而言的
PORT是主动模式,在建立数据通道时,服务端去连接别人
PASV是被动模式,在建立数据通道时,服务端被别人连接

建立数据通道时,用PORT模式还是PASV模式,选择权在于FTP客户端
但是是否支持还要看服务端
具体点说是这样
Port模式:
当客户端向服务端连接后,使用的是PORT模式,那么客户端B会发送一条命令告诉服务端(客户端B在本地打开了一个端口N在等着你进行数据连接),当服务端收到这个Port命令后 就会向客户端打开的那个端口N进行连接,这种数据连接就生成
Pasv模式:
当客户端B向服务端连接后,使用的是PASV模式,服务端会发信息给客户端,这个信息是(服务端在本地打开了一个端口M,你现在去连接我吧),当客户端收到这个信息后,就可以向服务端的M端口进行连接,连接成功后,数据连接也建立了
 
(五)
IE浏览器默认连接ftp为 被动模式连接
IE取消被动模式的方法:点浏览器的【工具】【Internet选项】【高级】使用被动ftp去掉该选项前的对勾,确定即可.
 
其他ftp软件的设置方法
A:Flashfxp取消被动模式的方法:
第一步:点选项>参数选择。
第二步,在跳出的窗口中,选择“代理/防火墙标识”
第三步,设置好用户名和密码,可以连上去了。
B:Cuteftp取消被动模式的方法:
第一步,点编辑>设置。
第二步:点防火墙,Pasv模式那里不要打勾
C、Leapftp取消被动模式的方法:
我手里的leapftp是英文版的。有兴趣的可以试一下:
FLASHGET设置:
flashget里的数据类型的设置:工具菜单-->选项-->代理服务器-->编辑“直接连接”-->去掉PASV前的勾,确定
 
(六)
在IIS中的FTP服务器默认是主动模式,如果要修改为被动模式
参考微软文档 
http://technet.microsoft.com/zh-cn/library/dd421710
在新版的IIS7中,可以再FTP设置中,添加FTP被动模式,和被动连接时服务端开放的端口

FTP的连接方式(防火墙的配置)的更多相关文章

  1. 12C 连接方式和 Oracle Easy Connect Naming method

    1.12C 连接方式 PDB is not an instance, so using SID in the connection string will not work. When the dat ...

  2. wim2008 让FTP防火墙可用性配置

    转: Win2003和Win2008防火墙导致FTP服务器不能访问的解决方法 这篇文章主要介绍了Win2003和Win2008防火墙导致FTP服务器不能访问的解决方法,需要的朋友可以参考下 由于通过远 ...

  3. Java使用SFTP和FTP两种连接方式实现对服务器的上传下载 【我改】

    []如何区分是需要使用SFTP还是FTP? []我觉得: 1.看是否已知私钥. SFTP 和 FTP 最主要的区别就是 SFTP 有私钥,也就是在创建连接对象时,SFTP 除了用户名和密码外还需要知道 ...

  4. jmeter中通过jdbc方式连接mysql数据库的配置参考

    jmeter中通过jdbc方式连接mysql数据库的配置参考: Database URL=jdbc:mysql://ip:port/dbname?useUnicode=true&allowMu ...

  5. FTP的PORT和PASV的连接方式以及数据连接端口号计算

    FTP的PORT和PASV的连接方式以及数据连接端口号计算   PORT(自动)方法的连接途中是: 客户端向服务器的FTP端口(原始是21)发送连接请求,服务器领受连接,建立一条command链路. ...

  6. gitlab两种连接方式:ssh和http配置介绍

    gitlab环境部署好后,创建project工程,在本地或远程下载gitlab代码,有两种方式:ssh和http (1)ssh方式:这是一种相对安全的方式 这要求将本地的公钥上传到gitlab中,如下 ...

  7. gitlab两种连接方式:ssh和http配置介绍 --转自 散尽浮华

    gitlab环境部署好后,创建project工程,在本地或远程下载gitlab代码,有两种方式:ssh和http 1)ssh方式:这是一种相对安全的方式 这要求将本地的公钥上传到gitlab中,如下图 ...

  8. Linux虚拟机的三种网络连接方式

    Linux虚拟机的三种网络连接方式 虚拟机网络模式 无论是vmware,virtual box,virtual pc等虚拟机软件,一般来说,虚拟机有三种网络模式: 1.桥接 2.NAT 3.Host- ...

  9. Juniper SRX防火墙简明配置手册(转)

    在执行mit命令前可通过配置模式下show命令查看当前候选配置(Candidate Config),在执行mit后配置模式下可通过run show config命令查看当前有效配置(Active co ...

随机推荐

  1. eclipse git导入的项目 让修改后的文件带有黑色星标记样式

    操作方式:Window——>Preferences——>Team——>Git——>Label Decorations——>Icon Decorations 将 Dirty ...

  2. Xadmin的实现

    一.启动 1.前提 配置setting.py文件 INSTALLED_APPS 2.定位Xadmin,找到对应的类 'Xadmin.apps.XadminConfig', 3.根据admin源码,实现 ...

  3. java中5种异步转同步方法

    先来说一下对异步和同步的理解: 同步调用:调用方在调用过程中,持续等待返回结果. 异步调用:调用方在调用过程中,不直接等待返回结果,而是执行其他任务,结果返回形式通常为回调函数. 其实,两者的区别还是 ...

  4. Photoshop 2020安装教程

    首先来看看新增功能 [Photoshop 2020新增功能] 1.ipad和云文档 2.预设改进 3.新对象选择工具 4.转换行为一致 5.改进的属性面板 6.智能对到图层 7.增强的转换变形. 需要 ...

  5. jemeter察看结果树中文乱码解决办法

    在使用jemeter进行接口测试时,在察看结果树查看接口返回结果时,中文全部显示乱码,这个问题的解决方式如下: 在jemeter的安装路径下面,找到bin目录下, 在bin目录下面找到这个文件:jme ...

  6. day03_流程控制语句

    day03_流程控制语句 建议: ​ 凡是次数确定的场景多用for循环,否则用while循环. 三元运算符 ​ 由?:符号表示的,具体的含义其实就和if-else结构的含义差不多,这种运算符会将某个条 ...

  7. MVC (jsp + servlet + javabean) 以及jdbc

    前端: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncod ...

  8. Windows玩转Kubernetes系列3-Centos安装K8S

    以往文章参考: Windows玩转Kubernetes系列1-VirtualBox安装Centos Windows玩转Kubernetes系列2-Centos安装Docker 安装K8S yum in ...

  9. 为什么建议使用Guid结构体做为数据库及排序时的主键

    在.net2.0中,Guid结构体表示一个全局唯一标识符,是一个在生成时就可以肯定为全世界唯一的16字节值.Guid在数据库中通常可以作为各种排序的主键.比如 public class Company ...

  10. CSS 对于grid布局的理解,举例代码及解释

    网格布局介绍: CSS Grid(网格) 布局(又称为 “Grid(网格)” ),是一个二维的基于网格的布局系统它的目标是完全改变我们基于网格的用户界面的布局方式.CSS 一直用来布局我们的网页,但一 ...