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 Explanation
http://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中文称 ...
随机推荐
- php的一些小笔记-文件函数(1)
---恢复内容开始--- 与文件操作相关的函数有一部分可以和linux命令比较,但是我觉得可能还是linux上使用的比较频繁 如:chown,chmod,chgrp,rename,touch,link ...
- 最长公共子序列--nyoj36
最长公共子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列.tip:最长公共子序列也称作最 ...
- ionic2+angular2
ionic2+angular2中踩的那些坑 好久没写什么东西了,最近在做一个ionic2的小东西,遇到了不少问题,也记录一下,避免后来的同学走弯路. 之前写过一篇使用VS2015开发ionic1的文章 ...
- Tomcat 6.0.32 +Spring dbcp datasource关闭Tomcat出现严重异常
异常如下: 信息: Pausing Coyote HTTP/ -- :: org.apache.catalina.core.StandardService stop 信息: Stopping serv ...
- 搜索Collections元素,用DateFormatSymbols 获得月份
import java.util.Collections; import java.util.List; import java.text.DateFormatSymbols; import java ...
- find详解
一.简介 在目录结构中搜索文件,并执行指定的操作. 二.语法 find path -option [ -print ] [ -exec -ok command ] {} \;path: find命令所 ...
- Google的Protocol Buffer格式分析
[转]转自:序列化笔记之一:Google的Protocol Buffer格式分析 从公开介绍来看,ProtocolBuffer(PB)是google 的一种数据交换的格式,它独立于语言,独立于平台.作 ...
- Find the Celebrity 解答
Question Suppose you are at a party with n people (labeled from 0 to n - 1) and among them, there ma ...
- SQL Interview Question
面试的时候发现会问一些SQL的基本问题,在此总结一下. ProgramInterview/SQL 这个网站上的问题还比较全. 1. Join type INNER JOIN: Returns all ...
- hdu 4400 Mines(离散化+bfs+枚举)
Problem Description Terrorists put some mines in a crowded square recently. The police evacuate all ...