背景说明

最近有个项目涉及到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. 一个很简单的jQuery插件实例教程(菜鸟级)

    很多公司的前端设计开发人员都是女孩子,而这些女孩子很多JavaScript技能都不是很好.而前端开发过程中,JavaScript技能又是必不可少的.所以,如果前端小MM正在为某个JavaScript效 ...

  2. 基于cygwin构建u-boot(三)make错误忽视

    接上文,修改gcc 的-std标准后,.depend文件处理仍然出现了错误: 五.错误:make中命令报错(sed找不到需要的文件) 错误告警如下: make -C examples/api all ...

  3. linux运维基础__争取十月前研究的差不多

    转来的一编,考虑在十月前研究的差不多 linux运维人员基础 1.很多地方经常会用到的rsync工具 实施几台服务器的同步效果 我们公司就是使用这个工具完成服务器的游戏的服务端和客户端同步,有几个文章 ...

  4. asp.net 中如何判断字符串中有几个逗号 (asp也通用)

    如: 字符串 a="1,2,3"; 怎样判断a 中的逗号 有几个 len(a)-len(replace(a,",",""))

  5. uva 10718 Bit Mask (位运算)

    uva 10718  Bit Mask  (位运算) Problem A Bit Mask Time Limit 1 Second In bit-wise expression, mask is a ...

  6. 记忆2--记忆的"记"和"忆"

    有时候也会想,我们是如何记住东西的?是如何想起来的?在写这篇文章的时候,想起初中的时候(应当是初二),语文老师检查唐诗背诵,在下面觉得已经能背起来的时候,去向老师背诵的时候,忘记了开头,干急想不起来, ...

  7. Compiled Language vs Scripting Language

    Referrence: Blog Compiled Languages Example: C, C++, Java Source code needs to be compiled into bits ...

  8. Word Break II 解答

    Question Given a string s and a dictionary of words dict, add spaces in s to construct a sentence wh ...

  9. hdu5772-String problem(最大权闭合子图问题)

    解析: 多校标答 第一类:Pij 表示第i个点和第j个点组合的点,那么Pij的权值等于w[i][j]+w[j][i](表示得分)第二类:原串中的n个点每个点拆出一个点,第i个点权值为 –a[s[i]] ...

  10. [转]Google2012.9.24校园招聘会笔试题

    代码: [cpp] view plaincopy //转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/8017703 boo ...