FTP之主动模式vs被动模式
背景说明
最近有个项目涉及到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服务端防火墙的角度,需要开通以下网络关系:
- FTP客户端任意端口到FTP服务端21端口。
- FTP服务端21端口到FTP客户端的大于1023端口。
- FTP服务端20端口到FTP客户端的大于1023端口。
- 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连接进行通讯的时候,有时候会有这样的响应:
- PORT 192,168,150,80,14,178
- 227 Entering Passive Mode (192,168,150,90,195,149)
这些响应中,那串数子头4个是IP地址,后两位是表示端口,端口的计算是将第5位数乘以256加上第六位数。如192,168,150,90,195,149,则端口为195*256+149=50069。
参考资料
- Active FTP vs. Passive FTP, a Definitive Explanationhttp://slacksite.com/other/ftp.html 这篇文章很详细,看不明我写的中文的,可以看这篇英文的。 
FTP之主动模式vs被动模式的更多相关文章
- FTP的主动模式和被动模式
		摘自http://blog.csdn.net/love_gaohz/article/details/50723164 http://my.oschina.net/binny/blog/17469 FT ... 
- Linux FTP的主动模式与被动模式
		Linux FTP的主动模式与被动模式 一.FTP主被动模式 FTP是文件传输协议的简称,ftp传输协议有着众多的优点所以传输文件时使用ftp协议的软件很多,ftp协议使用的端口是21( ... 
- ftp的主动模式和被动模式的配置和区别
		原文链接: https://www.cnblogs.com/lnlvinso/p/8947369.html ftp模式分为主动模式(active mode)和被动模式(passive mode),ft ... 
- FTP的主动模式与被动模式
		FTP服务器使用20和21两个网络端口与FTP客户端进行通信. FTP服务器的21端口用于传输FTP的控制命令,20端口用于传输文件数据. FTP主动模式: FTP客户端向服务器的FTP控制端口(默认 ... 
- FTP基础知识 FTP port(主动模式) pasv(被动模式) 及如何映射FTP
		您是否正准备搭建自己的FTP网站?您知道FTP协议的工作机制吗?您知道什么是PORT方式?什么是PASV方式吗?如果您不知道,或没有完全掌握,请您坐下来,花一点点时间,细心读完这篇文章.所谓磨刀不误砍 ... 
- 【ftp】主动模式和被动模式
		来自:http://blog.csdn.net/liuhelong12/article/details/50218311 原博主不让转载全文,不过下面这部分是原博主转载别人的,所以我拿过来应该没问题吧 ... 
- 简述FTP的主动模式与被动模式(精简)
		一.主被动 主动: 客户端从任意一个大于1024的端口现在假设为1234(非特权端口)连接到服务端的21端口(命令端口),随之客户端监听端口(N+1)即为1235端口(可以理解为这是客户端认定的数据端 ... 
- FTP 传输中的主动模式和被动模式
		最近做一个项目用到FTP和其它系统进行文件传输,结果在FTP网络连接的问题上花了很多时间,由于太久没搞多FTP,忘记了FTP不单单开放21端口,客户端采用不同连接模式对网络有不同.在此重温一下FTP的 ... 
- Ftp主动模式和被动模式以及java连接ftp模式设置
		Ftp主动模式和被动模式以及java连接ftp模式设置 https://www.cnblogs.com/huhaoshida/p/5412615.html (1) PORT(主动模式) PORT中文称 ... 
随机推荐
- memcached真实项目中的应用
			上一篇memcached介绍及基本使用介绍了memcached的一些基本概念和一个范例.这一篇将介绍一个memcached在实际项目中的应用 
- worklight 中添加时间控件
			在我们使用worklight开发的过程中,由于文档的不开源和插件的缺少,总是自己琢磨很多东东,更有胜者 需要调用源代码实现某些不易实现的功能.在这里把实现的功能代码贴出来,如有不足之处还望指正! 实现 ... 
- 百度UEditor编辑器关闭抓取远程图片功能(默认开启)
			这个坑娘的功能,开始时居然不知道如何触发,以为有个按钮,点击一下触发,翻阅了文档,没有发现,然后再网络上看到原来是复制粘贴非白名单内的图片到编辑框时触发,坑娘啊............... 问题又来 ... 
- [转载]移动终端浏览器初始设置apple-mobile-web-app-capable
			这两句话的确很有用,有了它,手机访问的时候像样了. 原文地址:移动终端浏览器初始设置apple-mobile-web-app-capable作者:素水凌心 移动终端浏览器默认设置视口的宽度和初始规模. ... 
- DataTables选择行并删除(删除单行)
			$(document).ready(function() { var table = $('#example').DataTable(); $('#example tbody').on( 'click ... 
- jquery取元素值
			var j = 1; if (rows.length > 0) { for (var i = 0; i < rows.length; i++) { var row = rows[i]; i ... 
- Unity3D中使用KiiCloud总结一
			Kii Cloud简介 Kii Cloud提供一系列的服务,来帮助你为你的App获取用户,留住用户,以及创造利润.它为移动App提供了用户管理以及快捷安全可扩展的数据存储服务. 现在你可以在短短几分钟 ... 
- DataGrid导出excel
			DAL://产品信息导出——LPH public DataTable ExportRelease(string type) { string sql = "SELECT [ProductID ... 
- 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(1)--后端
			原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(1)--后端 chsakell分享了前端使用AngularJS,后端使用ASP.NET Web API的购物车 ... 
- 《Programming WPF》翻译 第7章 4.转换
			原文:<Programming WPF>翻译 第7章 4.转换 支持高分辨率显示是WPF中的重要样式.这是被部分地支持--强调了可伸缩的向量图,而不是图像.但是,正如使用GDI+和GDI3 ... 
