您的位置:首页 > 编程语言 > PHP开发

FTP传输过程详解

2007-03-30 17:06 253 查看
介绍
FTP是一种非常常见的应用,已经成为文件传输的Internet标准。FTP提供文件传输的功能,即将完整的文件从一个系统复制到另一系统,这一点与NFS(网络文件系统)所提供的文件访问功能不同。在使用FTP时,可以要求提供帐号用以登录服务器,也可使用匿名FTP方式登录服务器。
FTP与Telnet最大的区别在于两者处理不同主机、不同操作系统、不同文件结构、不同字符集的方式,FTP针对不同系统采取特殊办法,而telnet则强制不同系统使用同一标准,如7位ASCII码等。
描述FTP的官方文档是RFC 959。

FTP协议
与其他应用不同的是FTP使用两个连接,一个是用于控制的命令连接,用于控制命令从客户端放到服务器端,并将应答传回给客户端;另一个连接是实际的文件传输连接,只在客户端和服务器端传送文件时建立。
FTP的体系结构包括用户终端、客户端、服务器三部分,客户端包含用户命令解释器,用于将用户在用户界面输入的命令解释为FTP协议协议。
在数据表示上,可以选择使用以下文件类型:ASCII文件类型、EBCDIC文件类型、图像文件类型、本地文件类型。
格式控制仅对于ASCII和EBCDIC文件类型有效,它分为:非打印,即不包含向量格式信息;Telnet格式控制,包含telnet向量格式控制;Fortran回车控制。
文件结构上,可分为:文件结构、记录结构和页结构。
在传输模式上,包分为:流模式、块模式、压缩模式。
常见FTP的UNIX实现限制用户为以下选择:
类型-ASCII或图像
格式控制-非打印
结构-文件结构
传输模式-流模式

FTP命令
由于客户端与服务器之间的命令和应答都以NVT ASCII形式发送,在每行结尾处都要有CR和LF对。
与FTP不同,telnet有两种命令,一种是<IAC,IP>,它是一种中断进程;另一种是telnet同步信号,<IAC,DM>。两种信号的作用是中断传输进程或查询是否处于传输进程中。服务器从客户端接收的选项命令有WILL、WONT、DO、DONT,而应答命令只为DONT和WONT。
客户端发送给服务器的命令有30种之多,以下是几个常用FTP命令:
ABOR,中断以前的FTP命令和任务的数据传输
LIST filelist,罗列文件和目录
PASS password,服务器上的密码
PORT n1,n2,n3,n4,n5,n6,客户端IP地址(n1,n2,n3,n4)和端口(n5*256+n6)
QUIT,从服务器登出
PETR filename,获取(拿)文件
STOR filename,保存(放)文件
SYST,服务器返回系统类型
TPYE type,指定文件类型:A代表ASCII,I代表图像
USER username,服务器端的用户名
有时交互式用户输入内容与FTP命令是一一对应的,而某些用户命令会对应多条在控制连接上的FTP命令。

FTP应答
应答由3位数字和一段消息字符串组成,数字帮助软件决定如何处理应答,字符串帮助人们理解应答的含义。
不同数字有不同含义,如下所示:
1yz,肯定的初步应答。在发送另一命令之前期望有另一个命令。
2yz,肯定的完成应答。可以发送新命令了。
3yz,肯定的中间应答。命令已接受但必须发送另一命令。
4yz,短暂的否定完成应答。要请求的行为未发生,但错误条件是暂时的,可以在以后重新发布命令。
5yz,永久的否定完成应答。命令未被接受,而且不应再重试了。

x0z,语法错误
x1z,信息
x2z,连接。对控制和数据连接的应答
x3z,鉴权和记帐。对登录和记帐命令的应答
x4z,未指定
x5z,文件系统状态

第三位给出对错误消息的附加含义。
以下是一些典型的应答:
125,数据连接已经打开;传送开始
200,命令成功
214,帮助消息(对人)
331,用户名正确,需要密码
425,不能打开数据连接
452,错误的文件写
500,语法错误(未识别的命令)
501,语法错误(非法参数)
502,未实现的MODE类型

一般每条FTP命令都会产生一行应答,如果对于产生多行应答的FTP命令,采用办法为:在第一行开始是三位状态码,紧跟“-”符号,在最后一行开始依然是状态码,但紧跟的是空格,再然后跟的是信息字符串。

连接管理
数据连接用于三种目的:
将文件从客户端发送至服务器;
将文件从服务器发送至客户端;
从服务器将文件和目录的列表发送至客户端。

FTP服务器在向客户端通过数据连接发送的是文件列表,而不是在控制连接上的多个应答。这样能够避免对目录列表大小的限制,更易于客户端将目录列表的输出保存为文件,而不是直接在终端打印目录列表。
控制连接在整个FTP传输过程中都是持续的,而数据连接则是按需要打开或关闭。对于常见的流模式,文件结束关闭数据连接,因此对于每个文件传输和目录列表都要创建一个新的连接。一般过程如下:
1,客户端控制数据的创建
2,客户端选取临时的端口,作为本端的数据连接端口,并由此端口发出被动打开指令
3,客户端使用PORT命令将端口发送给服务器,使用的是控制连接
4,服务器接收到端口号,也是通过控制连接,并发出对客户端的主动打开命令,而服务器一般使用20端口

下面用图来讲解连接的状态:设定客户端选用1173作为控制连接的临时端口,数据连接选用1174端口。客户端发出的PORT命令会将逗号分隔的六个十进制数据以ASCII码形式发给服务器端。前四个指定客户端的IP地址,140.252.13.34,帮助服务器发出主动打开信号,后两个指定16位端口号4*256+150=1174
服务器不仅发出主动打开,通常还会发出主动关闭,但在流模式向服务器发送文件时,就要求客户端去关闭数据连接。
有时候不用客户端发送PORT命令,但数据连接仍然要建立,只不过采用与控制连接相同的端口,服务器仍使用20和21两个端口建立连接。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息