ftp协议分析:Passive模式和Port模式

标签: ftp 协议 分析 | 发表时间:2013-11-16 22:00 | 作者:Wesleydeng
出处:http://www.iteye.com

FTP协议需要在客户机和服务器之间建立两个并行的TCP连接:“控制连接”和“数据连接”。根据数据TCP连接建立的发起方的不同可以区分为Passive模式和Port模式

这两种模式的本质区别是:建立“数据连接”的TCP连接时,是由ftp服务器发起,还是由客户端发起。服务器发起的则为PORT(需要客户端在PORT命令中告知目标端口),客户端发起的则为PASSIVE(需要服务器端在PASSIVE的应答中告知目标端口)。

(注:以下的步骤分解是在http://huaidan.org/archives/1602.html这片文章中摘录和编辑的)

 

Port模式
【建立“控制”的TCP连接】
1、 客户端发送一个TCP SYN(TCP同步)包给服务器段众所周知的FTP控制端口21,客户端使用暂时的端口作为它的源端口;
2、 服务器端发送SYN ACK(同步确认)包给客户端,源端口为21,目的端口为客户端上使用的暂时端口;
3、客户端发送一个ACK(确认)包;客户端使用这个连接来发送FTP命令,服务器端使用这个连接来发送FTP应答;
【发送建立“数据”连接的命令】
4、当用户请求一个列表(List)请求或者发起一个要求发送或者接受文件的请求,客户端软件使用PORT命令,这个命令包含了一个暂时的数据传输端口(客户端的端口),客户端希望服务器在打开一个数据连接时候使用这个暂时端口;PORT命令也包含了一个IP地址,这个IP地址通常是客户自己的IP地址,而且FTP也支持第三方(third-party)模式,第三方模式是客户端告诉服务器端打开与另台主机的连接;
【建立“数据”的TCP连接】
5、服务器端发送一个SYN包给客户端的暂时端口,源端口为20,暂时端口为客户端在 PORT命令中发送给服务器端的暂时数据传输端口号;
6、 客户端以源端口为暂时端口,目的端口为20发送一个SYN ACK包;
7、 服务器端发送一个ACK包;
【开始利用数据连接发送、接收数据】
8、发送数据的主机以这个连接来发送数据,数据以TCP段(注:segment,第4层的PDU)形式发送(一些命令,如STOR表示客户端要发送数据,RETR表示服务器段发送数据),这些TCP段都需要对方进行ACK确认(注:因为TCP协议是一个面向连接的协议)
【关闭“数据”TCP连接】
9、当数据传输完成以后,发送数据的主机以一个FIN命令来结束数据连接,这个FIN命令需要另一台主机以ACK确认,另一台主机也发送一个FIN命令,这个FIN命令同样需要发送数据的主机以ACK确认;
【关闭“控制”的TCP连接】
10、客户端能在控制连接上发送更多的命令,这可以打开和关闭另外的数据连接;有时候客户端结束后,客户端以FIN命令来关闭一个控制连接,服务器端以ACK包来确认客户端的FIN,服务器同样也发送它的FIN,客户端用ACK来确认。

 

 Passive模式
下面的列表描述了Passive模式的FTP的步骤,步骤1到3和Port模式FTP相同,步骤9到11同样与Port模式FTP最后三步相同。
【建立“控制”的TCP连接】
1、客户端发送一个TCP SYN(TCP同步)包给服务器段众所周知的FTP控制端口21,客户端使用暂时的端口作为它的源端口;
2、 服务器端发送SYN ACK(同步确认)包给客户端,源端口为21,目的端口为客户端上使用的暂时端口;
3、客户端发送一个ACK(确认)包;客户端使用这个连接来发送FTP命令,服务器端使用这个连接来发送FTP应答;
【发送命令】
4、当用户请求一个列表(List)或者发送或接收文件时候,客户端软件发送 PASV命令给服务器端表明客户端希望进入Passive模式;
5、服务器端进行应答,应答包括服务器的IP地址和一个暂时的端口(服务器端的端口),这个暂时的端口是客户端在打开数据传输连接时应该使用的端口;
【建立“数据”TCP连接】
6、客户端发送一个SYN包,源端口为客户端自己选择的一个暂时端口,目的端口为服务器在PASV应答命令中指定的暂时端口号;
7、 服务器端发送SYN ACK包给客户端,目的端口为客户端自己选择的暂时端口,源端口为PASV应答中指定的暂时端口号;
8、 客户端发送一个ACK包;
【开始发送和接收数据】
9、发送数据的主机以这个连接来发送数据,数据以TCP段(注:segment,第4层的PDU)形式发送(一些命令,如STOR表示客户端要发送数据,RETR表示服务器段发送数据),这些TCP段都需要对方进行ACK确认;
【关闭“数据”TCP连接】
10、当数据传输完成以后,发送数据的主机以一个FIN命令来结束数据连接,这个FIN命令需要另一台主机以ACK确认,另一台主机也发送一个FIN命令,这个FIN命令同样需要发送数据的主机以A
CK确认;
【关闭“控制”的TCP连接】
11、客户端能在控制连接上发送更多的命令,这可以打开和关闭另外的数据连接;有时候客户端结束后,客户端以FIN命令来关闭一个控制连接,服务器端以ACK包来确认客户端的FIN,服务器同样也发送它的FIN,客户端用ACK来确认。

 

所以从以上分析来看,所谓主动active和被动passive是从ftp服务器的角度来说的。



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [ftp 协议 分析] 推荐:

ftp协议分析:Passive模式和Port模式

- - 企业架构 - ITeye博客
FTP协议需要在客户机和服务器之间建立两个并行的TCP连接:“控制连接”和“数据连接”. 根据数据TCP连接建立的发起方的不同可以区分为Passive模式和Port模式. 这两种模式的本质区别是:建立“数据连接”的TCP连接时,是由ftp服务器发起,还是由客户端发起. 服务器发起的则为PORT(需要客户端在PORT命令中告知目标端口),客户端发起的则为PASSIVE(需要服务器端在PASSIVE的应答中告知目标端口).

[来自iPc.me] FTP – 文件传输协议必将消亡

- - iPc.me [expanded by feedex.net]
文件传输协议(FTP)在RFC 959中定义,于1985年10月发布. 文件传输协议(FTP)被设计成为一个跨平台的、简单且易于实现的协议. 文件传输协议(FTP)有一个漫长的演化史,是 互联网上最重要的应用之一,但时至今日,却已江河日下……. 本文作者从各方面列举了一些文件传输协议(FTP)为人诟病的缺点.

RTSP协议分析

- - CSDN博客推荐文章
        RTSP(Real Time Streaming Protocol)实时流传输协议,是TCP/IP协议体系中的一个基于文本的应用层协议,由哥伦比亚大学、网景和RealNetworks公司提交的IETF RFC2326标准. 该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据.

用wget同步ftp

- - 天空极速
wget 可以下载整个网站或者ftp. 如果有两个ftp站点,需要同步,可以使用以下命令:. 解释下,前面是ftp的授权用户,密码,ftp的站点,端口. -r 是表示递归,-x表示强制创建目录,-c表示断点续传. Tags - windows , wget , ftp , 备份 , 同步.

ftp自动下载

- - 运维技术的个人空间

FTP之PASV与PORT

- - 行业应用 - ITeye博客
FTP是File Transfer Protocol(文件传输协议)的缩写,用来在两台计算机之间互相传送文件. 相比于HTTP,FTP协议要复杂得多. 复杂的原因,是因为FTP协议要用到两个TCP连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据. FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式.

Linux下自动FTP脚本

- - ITeye博客
前面写了一个Windows下自动FTP的脚本:. 今天新增Linux下的简单脚本,还待优化. 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

QQ2010协议分析(登录篇)

- Rommel - 博客园-首页原创精华区
七月份的时候突然对QQ协议产生了些兴趣,于是这几个月有空就研究研究QQ协议,目前对QQ2010的协议已经分析得差不多了. QQ登录分为UDP和TCP登录,还支持代理登录. UDP登录端口服务器为8000,本地端口一般是从4000开始选择,如果该端口已经被占用,则加1再测试,一直测试到一个没有被占用的端口.

(转)ftp的port和pasv模式

- - 非技术 - ITeye博客
转自:http://hi.baidu.com/xianyang1981/item/20d68be050a50aaccf2d4f8e. 一、ftp的port和pasv模式的工作方式.        FTP使用2个TCP端口,首先是建立一个命令端口(控制端口),然后再产生一个数据端口. 国内很多教科书都讲ftp使用21命令端口和20数据端口,这个应该是教书更新太慢的原因吧.

FTP/SFTP/SSH的一些软件包

- - 开源软件 - ITeye博客
IIS,Windows自带,可以到[打开或关闭windows功能]里选择IIS,进行安装. freeSSHd ,支持FTP/SFTP/SSH. OpenSSH这个是Linux上的SSH标配,Windows上则可以通过cygwin的方式来安装. FileZilla,支持SFTP. WinSCP,支持SFTP.