背景说明

最近有个项目涉及到FTP的上传下载问题。在本地开发好的程序测试的时候能正常获取FTP内容,但一放到生产上却显示connection timeout,无法连接。经过一些研究,发现是防火墙造成的。那究竟应该怎么开通网络关系才能正常访问到FTP呢?FTP中的主动模式与被动模式,对开通的网络关系又有什么影响呢?虽然网络上已有部分解释主动模式和被动模式的文章,但是感觉还不是说得十分清楚。故我自己重新整理阐述一遍,看是否能更好的解释主动模式和被动模式。

关于FTP

FTP是基于TCP的一个服务。它之所以特别是特别在它使用了两个端口,一个用来传送数据,一个用来传送命令。大家通常理解的,是用来传送命令的使用21端口,用来传送数据的使用20端口。但实际上并不是总是用20端口进行数据传输的,这还是要看使用的模式。

FTP:主动模式

在主动模式中,FTP客户端使用一个非分配端口(N>1023)与FTP服务端的21命令端口建立连接,并开始倾听N+1端口,同时通过21端口将N+1端口告诉FTP服务端。FTP服务端获取到客户端告诉它的N+1端口后,使用数据传输的20端口与FTP客户端N+1端口建立连接,从而进行数据传输。图示如下:

第一步:FTP客户端通过1026端口(N>1023)与FTP服务端的21端口建立通讯,并告诉FTP服务端它监听的数据传输端口是1027。

第二步:FTP服务端发送ACK给FTP客户端的1026端口。

第三步:FTP服务端通过数据端口20端口与FTP客户端1027端口建立连接。

第四步:FTP客户端传送ACK给FTP服务端以确认建立连接。

根据上述描述,站在FTP服务端防火墙的角度,需要开通以下网络关系:

  1. FTP客户端任意端口到FTP服务端21端口。
  2. FTP服务端21端口到FTP客户端的大于1023端口。
  3. FTP服务端20端口到FTP客户端的大于1023端口。
  4. FTP客户端大于1023端口到FTP服务端20端口。

可以看出,FTP主动模式最大的问题是,FTP客户端不是直接创建到FTP服务端20数据传输端口的连接,而只是告诉FTP服务端自己监控的端口,由FTP服务端创建连接。这会造成FTP客户端的防火墙认为这是一个外部建立的连接而被拦截掉。

FTP:被动模式

为了解决主动模式中由于FTP服务端建立连接造成的问题,所以FTP有另一种模式——被动模式。在FTP被动模式中,FTP客户端负责创建命令传输和数据传输两条连接,从而解决防火墙拦截FTP服务端建立连接到FTP客户端的问题。当FTP客户端创建FTP连接的时候,FTP客户端会开通随机的两个端口N和N+1(N>1023)。其中,N端口与FTP服务端21端口建立通讯,并发送PASV命令到FTP服务端。FTP服务端接收到PASV命令之后,会随机创建一个端口P(P>1023),并将端口P返回给FTP客户端。FTP客户端拿到P端口后,就会通过N+1端口与P端口建立数据传输连接。图示如下:

第一步:FTP客户端与FTP服务端命令传输端口21建立通讯,并传输PASV命令。

第二步:FTP服务端通过21端口响应FTP客户端1026端口,并告诉FTP客户端它将监听2024端口作为数据传输端口。

第三步:FTP客户端1027端口与FTP服务端2024端口建立连接。

第四步:FTP服务端通过2024端口返回ACK确认给FTP客户端1027端口。

根据上述描述,站在FTP服务端防火墙的角度,需要开通以下网络关系:

1.FTP客户端任意端口到FTP服务端21端口。

2.FTP服务端21端口到FTP客户端的大于1023端口。

3.FTP客户端任意端口到FTP服务端的大于1023端口。

4.FTP服务端大于1023端口到FTP客户端大雨1023端口。

由此可见,被动模式解决了主动模式在客户端上面开通网络关系的问题。但存在另一个问题,就是FTP客户端需要开通网络关系到FTP服务端的所有大于1023端口,这可能也是网络安全不允许的。不过现在有些FTP可以指定一个范围的端口,以达到控制安全的作用。

一个细节

在使用FTP命令行打开FTP连接进行通讯的时候,有时候会有这样的响应:

  1. PORT 192,168,150,80,14,178
  2. 227 Entering Passive Mode (192,168,150,90,195,149)

这些响应中,那串数子头4个是IP地址,后两位是表示端口,端口的计算是将第5位数乘以256加上第六位数。如192,168,150,90,195,149,则端口为195*256+149=50069。

参考资料

  1. Active FTP vs. Passive FTP, a Definitive Explanation

    http://slacksite.com/other/ftp.html

    这篇文章很详细,看不明我写的中文的,可以看这篇英文的。

FTP之主动模式vs被动模式的更多相关文章

  1. FTP的主动模式和被动模式

    摘自http://blog.csdn.net/love_gaohz/article/details/50723164 http://my.oschina.net/binny/blog/17469 FT ...

  2. Linux FTP的主动模式与被动模式

    Linux FTP的主动模式与被动模式 一.FTP主被动模式        FTP是文件传输协议的简称,ftp传输协议有着众多的优点所以传输文件时使用ftp协议的软件很多,ftp协议使用的端口是21( ...

  3. ftp的主动模式和被动模式的配置和区别

    原文链接: https://www.cnblogs.com/lnlvinso/p/8947369.html ftp模式分为主动模式(active mode)和被动模式(passive mode),ft ...

  4. FTP的主动模式与被动模式

    FTP服务器使用20和21两个网络端口与FTP客户端进行通信. FTP服务器的21端口用于传输FTP的控制命令,20端口用于传输文件数据. FTP主动模式: FTP客户端向服务器的FTP控制端口(默认 ...

  5. FTP基础知识 FTP port(主动模式) pasv(被动模式) 及如何映射FTP

    您是否正准备搭建自己的FTP网站?您知道FTP协议的工作机制吗?您知道什么是PORT方式?什么是PASV方式吗?如果您不知道,或没有完全掌握,请您坐下来,花一点点时间,细心读完这篇文章.所谓磨刀不误砍 ...

  6. 【ftp】主动模式和被动模式

    来自:http://blog.csdn.net/liuhelong12/article/details/50218311 原博主不让转载全文,不过下面这部分是原博主转载别人的,所以我拿过来应该没问题吧 ...

  7. 简述FTP的主动模式与被动模式(精简)

    一.主被动 主动: 客户端从任意一个大于1024的端口现在假设为1234(非特权端口)连接到服务端的21端口(命令端口),随之客户端监听端口(N+1)即为1235端口(可以理解为这是客户端认定的数据端 ...

  8. FTP 传输中的主动模式和被动模式

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

  9. Ftp主动模式和被动模式以及java连接ftp模式设置

    Ftp主动模式和被动模式以及java连接ftp模式设置 https://www.cnblogs.com/huhaoshida/p/5412615.html (1) PORT(主动模式) PORT中文称 ...

随机推荐

  1. php的一些小笔记-文件函数(1)

    ---恢复内容开始--- 与文件操作相关的函数有一部分可以和linux命令比较,但是我觉得可能还是linux上使用的比较频繁 如:chown,chmod,chgrp,rename,touch,link ...

  2. 最长公共子序列--nyoj36

    最长公共子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列.tip:最长公共子序列也称作最 ...

  3. ionic2+angular2

    ionic2+angular2中踩的那些坑 好久没写什么东西了,最近在做一个ionic2的小东西,遇到了不少问题,也记录一下,避免后来的同学走弯路. 之前写过一篇使用VS2015开发ionic1的文章 ...

  4. Tomcat 6.0.32 +Spring dbcp datasource关闭Tomcat出现严重异常

    异常如下: 信息: Pausing Coyote HTTP/ -- :: org.apache.catalina.core.StandardService stop 信息: Stopping serv ...

  5. 搜索Collections元素,用DateFormatSymbols 获得月份

    import java.util.Collections; import java.util.List; import java.text.DateFormatSymbols; import java ...

  6. find详解

    一.简介 在目录结构中搜索文件,并执行指定的操作. 二.语法 find path -option [ -print ] [ -exec -ok command ] {} \;path: find命令所 ...

  7. Google的Protocol Buffer格式分析

    [转]转自:序列化笔记之一:Google的Protocol Buffer格式分析 从公开介绍来看,ProtocolBuffer(PB)是google 的一种数据交换的格式,它独立于语言,独立于平台.作 ...

  8. Find the Celebrity 解答

    Question Suppose you are at a party with n people (labeled from 0 to n - 1) and among them, there ma ...

  9. SQL Interview Question

    面试的时候发现会问一些SQL的基本问题,在此总结一下. ProgramInterview/SQL 这个网站上的问题还比较全. 1. Join type INNER JOIN: Returns all ...

  10. hdu 4400 Mines(离散化+bfs+枚举)

    Problem Description Terrorists put some mines in a crowded square recently. The police evacuate all ...