什么是ftp主动模式和被动模式

什么是ftp主动模式和被动模式,第1张

一、什么是主动FTP

主动模式的FTP工作原理:客户端从一个任意的非特权端口N连接到FTP服务器的命令端口,也就是21端口。然后客户端开始监听端口N+1,并发送FTP命令“port

N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。

针对FTP服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式FTP: 1、

任何大于1024的端口到FTP服务器的21端口。(客户端初始化的连接) 2、 FTP服务器的21端口到大于1024的端口。

(服务器响应客户端的控制端口) 3、 FTP服务器的20端口到大于1024的端口。(服务器端初始化数据连接到客户端的数据端口)

4、 大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口) 二、什么是被动FTP

为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。

在被动方式FTP中,命令连接和数据连接都由客户端发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。

当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N >

1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交

PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT

P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。

对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP: 1、

从任何大于1024的端口到服务器的21端口(客户端初始化的连接) 2、

服务器的21端口到任何大于1024的端口(服务器响应到客户端的控制端口的连接) 3、

从任何大于1024端口到服务器的大于1024端口(客户端初始化数据连接到服务器指定的任意端口) 4、

服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)

以上关于主动和被动FTP的解释,可以简单概括为以下两点: 1、主动FTP: 命令连接:客户端

>1024端口 -> 服务器 21端口 数据连接:客户端 >1024端口 <- 服务器

20端口 2、被动FTP: 命令连接:客户端 >1024端口 -> 服务器 21端口

数据连接:客户端 >1024端口 -> 服务器 >1024端口 三、主动模式ftp与被动模式FTP优点和缺点:

主动FTP对FTP服务器的管理和安全很有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。

可以简单概括为以下两点: 1、主动FTP: 命令连接:客户端 >1024端口 -> 服务器 21端口 数据连接:客户端 >1024端口 1024端口 -> 服务器 21端口 数据连接:客户端 >1024端口 -> 服务器 >1024端口

FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。 PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请 求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT 命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的 XXXX端口发送连接请求,建立一条数据链路来传送数据。 PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请 求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV 命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口 发送连接请求,建立一条数据链路来传送数据。 从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完 全不同。而FTP的复杂性就在于此。

FTP只通过TCP连接,没有用于FTP的UDP组件FTP不同于其他服务的是它使用了两个端口, 一个数据端口和一个命令端口(或称为控制端口)。通常21端口是命令端口,20端口是数据端口。当混入主动/被动模式的概念时,数据端口就有可能不是20了。

主动模式FTP:

主动模式下,FTP客户端从任意的非特殊的端口(N > 1023)连入到FTP服务器的命令端口--21端口。然后客户端在N+1(N+1 >= 1024)端口监听,并且通过N+1(N+1 >= 1024)端口发送命令给FTP服务器。服务器会反过来连接用户本地指定的数据端口,比如20端口。

以服务器端防火墙为立足点,要支持主动模式FTP需要打开如下交互中使用到的端口:

l FTP服务器命令(21)端口接受客户端任意端口(客户端初始连接)

l FTP服务器命令(21)端口到客户端端口(>1023)(服务器响应客户端命令)

l FTP服务器数据(20)端口到客户端端口(>1023)(服务器初始化数据连接到客户端数据端口)

l FTP服务器数据(20)端口接受客户端端口(>1023)(客户端发送ACK包到服务器的数据端口)

用图表示如下:

在第1步中,客户端的命令端口与FTP服务器的命令端口建立连接,并发送命令“PORT 1027”。然后在第2步中,FTP服务器给客户端的命令端口返回一个"ACK"。在第3步中,FTP服务器发起一个从它自己的数据端口(20)到客户端先前指定的数据端口(1027)的连接,最后客户端在第4步中给服务器端返回一个"ACK"。

主动方式FTP的主要问题实际上在于客户端。FTP的客户端并没有实际建立一个到服务器数据端口的连接,它只是简单的告诉服务器自己监听的端口号,服务器再回来连接客户端这个指定的端口。对于客户端的防火墙来说,这是从外部系统建立到内部客户端的连接,这是通常会被阻塞的。

主动FTP的例子:

下面是一个主动FTP会话的实际例子。当然服务器名、IP地址和用户名都做了改动。在这个例子中,FTP会话从 testbox1slacksitecom (19216815080),一个运行标准的FTP命令行客户端的Linux工作站,发起到testbox2slacksitecom (19216815090),一个运行ProFTPd 122RC2的Linux工作站。debugging(-d)选项用来在FTP客户端显示连接的详细过程。红色的文字是 debugging信息,显示的是发送到服务器的实际FTP命令和所产生的回应信息。服务器的输出信息用黑色字表示,用户的输入信息用粗体字表示。

仔细考虑这个对话过程我们会发现一些有趣的事情。我们可以看到当 PORT 命令被提交时,它指定了客户端(19216815080)上的一个端口而不是服务器的。当我们用被动FTP时我们会看到相反的现象。我们再来关注PORT命令的格式。就象你在下面的例子看到的一样,它是一个由六个被逗号隔开的数字组成的序列。前四个表示IP地址,后两个组成了用于数据连接的端口号。用第五个数乘以256再加上第六个数就得到了实际的端口号。下面例子中端口号就是((14256) + 178) = 3762。我们可以用netstat来验证这个端口信息。

testbox1: {/home/p-t/slacker/public_html} % ftp -d testbox2

Connected to testbox2slacksitecom

220 testbox2slacksitecom FTP server ready

Name (testbox2:slacker): slacker

---> USER slacker

331 Password required for slacker

Password: TmpPass

---> PASS XXXX

230 User slacker logged in

---> SYST

215 UNIX Type: L8

Remote system type is UNIX

Using binary mode to transfer files

ftp> ls

ftp: setsockopt (ignored): Permission denied

---> PORT 192,168,150,80,14,178

200 PORT command successful

---> LIST

150 Opening ASCII mode data connection for file list

drwx------ 3 slacker users 104 Jul 27 01:45 public_html

226 Transfer complete

ftp> quit

---> QUIT

221 Goodbye

一FTP的PORT(主动模式)和PASV(被动模式)

1

PORT(主动模式)

PORT中文称为主动模式,工作的原理:

FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送

PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据

2

PASV(被动模式)

PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器,

服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端,

客户端再连接到服务器开放的端口进行数据传输。

二两种模式的比较

从上面的运行原来看到,主动模式和被动模式的不同简单概述为:

主动模式传送数据时是“服务器”连接到“客户端”的端口;被动模式传送数据是“客户端”连接到“服务器”的端口。

主动模式需要客户端必须开放端口给服务器,很多客户端都是在防火墙内,开放端口给FTP服务器访问比较困难。

被动模式只需要服务器端开放端口给客户端连接就行了。

三不同工作模式的网络设置

实际项目中碰到的问题是,FTP的客户端和服务器分别在不同网络,两个网络之间有至少4层的防火墙,服务器端只开放了21端口,

客户端机器没开放任何端口。FTP客户端连接采用的被动模式,结果客户端能登录成功,但是无法LIST列表和读取数据。很明显,是因为服务器端没开放被动模式下的随机端口导致。

由于被动模式下,服务器端开放的端口随机,但是防火墙要不能全部开放,解决的方案是,在ftp服务器配置被动模式下开放随机端口在

50000-60000之间(范围在ftp服务器软件设置,可以设置任意1024上的端口段),然后在防火墙设置规则,开放服务器端50000-60000之间的端口端。

主动模式下,客户端的FTP软件设置主动模式开放的端口段,在客户端的防火墙开放对应的端口段。

四如何设置

工作模式

实时上FTP服务器一般都支持主动和被动模式,连接采用何种模式是有FTP客户端软件决定。

IIS不支持禁用或者活动或被动连接模式。与Internet,上使用HTTP和其他协议FTP协议使用最小的两个连接会话期间:用于控制,半双工连接和进行数据传输全双工连接用于控制,半双工连接和全双工连接进行数据传输:。默认情况下,服务器上TCP端口21用于控制连接,但数据连接由方法,客户端用来连接到服务器,作为下面详细。因为通过控制连接客户端发送到服务器,端口命令-主动模式FTP连接有时称为以"客户端管理"。命令请求服务器以建立到客户,使用TCP端口由端口命令指定数据连接从TCP端口20上。被动模式FTP连接是有时称为到"服务器管理",因为与之一瞬态端口用作数据连接的服务器端端口服务器响应客户端发出pasv命令后,。由客户端,数据连接命令发出后服务器连接到客户立即使用端口上面控制连接的客户端端口。与端口范围1024-65535内默认模式Passive-IISFTP中随机选择到响应。要进一步限制这些巨大端口范围,系统管理员可配置命名PassivePortRange元数据库属性关键字,此属性关键字仅存在于IIS60,forIIS50在Windows2000,系统管理员需要安装ServicePack4,在系统注册表中PassivePortRange项中添加。更改PassivePortRangeforIIS,执行过程之一下面部分中所述。用于WindowsServer2003要启用直接编辑元数据库)1打开IISMicrosoft管理控制台(MMC)。2右击本地计算机节点。3选择属性。4请确保启用直接编辑元数据库复选框。通过ADSUTIL脚本配置PassivePortRangeb)1单击开始、运行,键入cmd,和然后确定。2键入cdInetpub\AdminScripts,然后按Enter。3键入以下命令从命令提示符。CSCRIPTexeC:\Inetpub\AdminScripts\adsutilvbsset/MSFTPSVC/PassivePortRange"5500-5515"4重新启动FTP服务。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 什么是ftp主动模式和被动模式

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情