FTP协议及工做原理详解

本文转自http://www.cnblogs.com/sunada2005/articles/2781712.html,转载至此仅为方便学习参考html

1. FTP协议 数据库

什么是FTP呢?FTP 是 TCP/IP 协议组中的协议之一,是英文File Transfer Protocol的缩写。服务器

该协议是Internet文件传送的基础,它由一系列规格说明文档组成,目标是提升文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至本身的计算机上,称之为“下载 (download)”文件。若将文件从本身计算机中拷贝至远程计算机上,则称之为“上载(upload)”文件。在TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20。网络

2. FTP服务器和客户端学习

同大多数Internet服务同样,FTP也是一个客户/服务器系统。用户经过一个客户机程序链接至在远程计算机上运行的服务器程序。依照 FTP 协议提供服务,进行文件传送的计算机就是 FTP 服务器,而链接FTP服务器,遵循FTP协议与服务器传送文件的电脑就是FTP客户端。用户要连上 FTP 服务器,就要用到 FPT 的客户端软件,一般 Windows自带“ftp”命令,这是一个命令行的 FTP 客户程序,另外经常使用的 FTP 客户程序还有 CuteFTP、Ws_FTP、Flashfxp、LeapFTP、流星雨-猫眼等。spa

3. FTP用户受权操作系统

(1)用户受权命令行

要连上 FTP 服务器(即“登录”),必需要有该 FTP 服务器受权的账号,也就是说你只有在有了一个用户标识和一个口令后才能登录FTP服务器,享受FTP服务器提供的服务。线程

(2)FTP地址格式设计

FTP地址以下: ftp://用户名:密码@FTP服务器IP或域名:FTP命令端口/路径/文件名

上面的参数除FTP服务器IP或域名为必要项外,其余都不是必须的。如如下地址都是有效FTP地址:

ftp://foolish.6600.org

ftp://list:list@foolish.6600.org

ftp://list:list@foolish.6600.org:2003

ftp://list:list@foolish.6600.org:2003/soft/list.txt

(3)匿名FTP

互连网中有很大一部分 FTP 服务器被称为“匿名”(Anonymous)FTP 服务器。这类服务器的目的是向公众提供文件拷贝服务,不要求用户事先在该服务器进行登记注册,也不用取得FTP服务器的受权。Anonymous(匿名文件传输)可以使用户与远程主机创建链接并以匿名身份从远程主机上拷贝文件,而没必要是该远程主机的注册用户。用户使用特殊的用户名“anonymous”登录FTP服务,就可访问远程主机上公开的文件。许多系统要求用户将Emai1地址做为口令,以便更好地对访问进行跟综。匿名FTP一直是Internet上获取信息资源的最主要方式,在Internet成千上万的匿名FTP主机中存储着无以计数的文件,这些文件包含了各类各样的信息,数据和软件。人们只要知道特定信息资源的主机地址,就能够用匿名FTP登陆获取所需的信息资料。虽然目前使用WWW环境已取代匿名FTP成为最主要的信息查询方式,可是匿名FTP还是 Internet上传输分发软件的一种基本方法。如red hat 、autodesk等公司的匿名站点。

4. FTP的传输模式

FTP协议的任务是从一台计算机将文件传送到另外一台计算机,它与这两台计算机所处的位置、联接的方式、甚至是是否使用相同的操做系统无关。假设两台计算机经过ftp协议对话,而且能访问Internet,你能够用ftp命令来传输文件。每种操做系统使用上有某一些细微差异,可是每种协议基本的命令结构是相同的。

FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式。

1.ASCII传输方式:假定用户正在拷贝的文件包含的简单ASCII码文本,若是在远程机器上运行的不是UNIX,当文件传输时ftp一般会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。可是经常有这样的状况,用户正在传输的文件包含的不是文本文件,它们多是程序,数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等信息的非打印符)。在拷贝任何非文本文件以前,用binary 命令告诉ftp逐字拷贝,不要对这些文件进行处理,这也是下面要讲的二进制传输。

2.二进制传输模式:在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即便目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。若是你在ASCII方式下传输二进制文件,即便不须要也仍会转译。这会使传输稍微变慢 ,也会损坏数据,使文件变得不能用。(在大多数计算机上,ASCII方式通常假设每一字符的第一有效位无心义,由于ASCII字符组合不使用它。若是你传输二进制文件,全部的位都是重要的。)若是你知道这两台机器是一样的,则二进制方式对文本文件和数据文件都是有效的。

5. FTP的工做方式

FTP支持两种模式,一种方式叫作Standard (也就是 PORT方式,主动方式),一种是 Passive (也就是PASV,被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP服务器。Passive模式FTP的客户端发送 PASV命令到 FTP Server。

下面介绍一个这两种方式的工做原理:

Port模式FTP 客户端首先和FTP服务器的TCP 21端口创建链接,经过这个通道发送命令,客户端须要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端经过本身的TCP 20端口链接至客户端的指定端口发送数据。 FTP server必须和客户端创建一个新的链接用来传送数据。

Passive模式在创建控制通道的时候和Standard模式相似,但创建链接后发送的不是Port命令,而是Pasv命令。FTP服务器收到Pasv命令后,随机打开一个高端端口(端口号大于1024)而且通知客户端在这个端口上传送数据的请求,客户端链接FTP服务器此端口,而后FTP服务器将经过这个端口进行数据的传送,这个时候FTP server再也不须要创建一个新的和客户端之间的链接。

不少防火墙在设置的时候都是不容许接受外部发起的链接的,因此许多位于防火墙后或内网的FTP服务器不支持PASV模式,由于客户端没法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登录FTP服务器,由于从服务器的TCP 20没法和内部网络的客户端创建一个新的链接,形成没法工做。

6.FXP

FXP说简单点就是一个FTP客户端控制两个FTP服务器,在两个FTP服务器之间传送文件。FXP的全称为File Exchange Protocol――文件交换协议,能够认为FXP自己其实就是FTP的一个子集,由于FXP方式实际上就是利用了FTP服务器的Proxy命令,不过它的前提条件是FTP服务器要支持PASV,且支持FXP方式。FXP传送时,文件并不下载至本地,本地只是发送控制命令,故FXP传送时的速度只与两个FTP服务器之间的网络速度有关,而与本地速度无关。因FXP方式本地只发送命令,故在开始传送后,只要本地不发送中止的命令,就算是本地关机了,FXP仍在传送,直至一个文件传送完成或文件传送出错后,FTP服务器等待本地发送命令时,才会因不能接收到命令而终止FXP传送。

由于上述的缘由,FXP传送出错时,本地的用户进程还留在FTP服务器中,并无退出,如此时再次链接FTP服务器,可能会因用户线程超过容许,FTP服务器提示客户已登录并拒绝客户端的链接,直至服务器中的傀儡进程因超时或其余缘由被FTP服务器杀死后,才能再次链接FTP服务器。

成功FXP有两个必要条件:①两个FTP服务器均支持FXP;②两个FTP服务器均支持PASV方式。但并非说知足这两个条件的FTP服务器均经本地操做成功FXP,这还与本地与FTP服务器的网络情况有关。故有时会出现一样两个FTP,别人能够FXP,而你不能够的状况。 

7. TFTP

TFTP(Trivial File Transfer Protocol)小文件传输协议

它是一个网络应用程序,它比FTP简单也比FTP功能少。它在不须要用户权限或目录可见的状况下使用,它使用UDP协议而不是TCP协议。

TFTP是一个传输文件的简单协议,它基于UDP协议而实现,可是咱们也不能肯定有些TFTP协议是基于其它传输协议完成的。此协议设计的时候是进行小文件传输的,所以它不具有一般的FTP的许多功能,它只能从文件服务器上得到或写入文件,不能列出目录,不进行认证,它传输8位数据。传输中有三种模式:netascii,这是8位的ASCII码形式,另外一种是octet,这是8位源数据类型;最后一种mail已经再也不支持,它将返回的数据直接返回给用户而不是保存为文件。   

任何传输起自一个读取或写入文件的请求,这个请求也是链接请求。若是服务器批准此请求,则服务器打开链接,数据以定长512字节传输。每一个数据包包括一块数据,服务器发出下一个数据包之前必须获得客户对上一个数据包的确认。若是一个数据包的大小小于512字节,则表示传输结构。若是数据包在传输过程当中丢失,发出方会在超时后从新传输最后一个未被确认的数据包。通讯的双方都是数据的发出者与接收者,一方传输数据接收应答,另外一方发出应答接收数据。大部分的错误会致使链接中断,错误由一个错误的数据包引发。这个包不会被确认,也不会被从新发送,所以另外一方没法接收到。若是错误包丢失,则使用超时机制。错误主要是由下面三种状况引发的:不能知足请求,收到的数据包内容错误,而这种错误不能由延时或重发解释,对须要资源的访问丢失(如硬盘满)。TFTP只在一种状况下不中断链接,这种状况是源端口不正确,在这种状况下,指示错误的包会被发送到源机。这个协议限制不少,这是都是为了实现起来比较方便而进行的。   

初始链接时候须要发出WRQ(请求写入远程系统)或RRQ(请求读取远程系统),收到一个肯定应答,一个肯定能够写出的包或应该读取的第一块数据。一般确认包包括要确认的包的包号,每一个数据包都与一个块号相对应,块号从1开始并且是连续的。所以对于写入请求的肯定是一个比较特殊的状况,所以它的包的包号是0。若是收到的包是一个错误的包,则这个请求被拒绝。建立链接时,通讯双方随机选择一个TID,所以是随机选择的,所以两次选择同一个ID的可能性就很小了。每一个包包括两个TID,发送者ID和接收者ID。这些ID用于在UDP通讯时选择端口,请求主机选择ID的方法上面已经说过了,在第一次请求的时候它会将请求发到TID 69,也就是服务器的69端口上。应答时,服务器使用一个选择好的TID做为源TID,并用上一个包中的TID做为目的ID进行发送。这两个被选择的ID在随后的通讯中会被一直使用。