收藏 分享(赏)

FTP协议规范.doc

上传人:j35w19 文档编号:4207552 上传时间:2018-12-15 格式:DOC 页数:12 大小:49KB
下载 相关 举报
FTP协议规范.doc_第1页
第1页 / 共12页
FTP协议规范.doc_第2页
第2页 / 共12页
FTP协议规范.doc_第3页
第3页 / 共12页
FTP协议规范.doc_第4页
第4页 / 共12页
FTP协议规范.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、FTP 协议规范 (中文版)文件传输协议(File Transfer Protocol, FTP)1. 介绍FTP 的目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。虽然我们也可以手工使用它,但是它的主要作用是供程序使用的。在阅读本文之前最好能够阅读 TCP 协议标准规范和 Telnet 协议标准规范。2. 概览在本节中我们将讨论一些表面上的问题,有些名词的定义请参阅 TCP 和 Telnet 参考文献。我们先介绍一下(1)字节大小,在 FTP 中字节大小有两个:逻辑字节大小和用于传输的字节大小。后者通常是 8 位,而前者可不一定是多少了。传输字节不

2、必等于逻辑字节大小,也不必对数据结构进行解释。 (2)控制连接是建立在 USER-PIT 和 SERVER-PI 之间用于交换命令与应答的通信链路。 (3)数据连接是传输数据的全双工连接。传输数据可以发生在服务器 DTP 和用户 DTP 之间也可以发生在两个服务器 DTP 之间。 (4)DTP:数据传输过程(DTP)建立和管理数据连接,DTP 可以是主动的也可以是被动的。 (5)EOR 代表记录尾。 (6)NTV 代表网络虚拟终端,它的定义与在 Telnet 协议中的定义一致。 (7)NVFS 代表网络虚拟文件系统。 (8)FTP 可以传输非连续的文件,这些文件的一部分称为页。 (9)PI 代

3、表协议解释器。 (10)服务器 DTP 代表一种传输过程,它通常处于“主动”状态,它和侦听端口建立数据连接,它还可以为传输和存储设置参数,并根据 PI 的指令传输数据。当然,DTP 也可以转入“被动”状态。 (11)服务器 FTP 进程,它是和用户 FTP 进程一起工作的,它由 PI 和 DTP 组成。至于用户 FTP 进程则是由 PI,DTP 和用户接口组成的。下图是 FTP 服务示意图:注意:数据连接是双向的,它不用整个时间都存在。上图中用户 PI 开始控制连接,控制连接与 Telnet 协议很象。在开始阶段,标准 FTP 命令由用户 PI 产生并通过控制连接传送到服务器进程。服务器 PI

4、 向用户 PI 返回标准应答。FTP 命令指定数据连接参数和文件系统操作。用户 DTP 在特定数据端口侦听,服务器开始数据连接并以指定的参数开始数据传输。数据端口不必在开始 FTP 命令的机器上,但用户或用户 FTP 进程必须确定它在指定的数据端口上侦听。这个数据连接是全双工的。在另外一种情况下,用户或许希望在两个主机间传送文件,不是两个本地主机。用户在两台主机间建立控制连接,然后规划数据连接。用这种方式,控制信息由用户 PI 获得,但是数据在服务器 DTP 之间传送。下面就是一个例子:协议要求数据传输在处理时打开控制连接。在完成 FTP 服务后由用户中止控制连接,而服务器具体操作。如果在未接

5、收命令时关闭了控制连接,服务器也会关闭数据传输。FTP 和Telnet 很有联系,FTP 使用 Telnet 协议进行控制连接,可有两种方法达到目的:用户 PI 或服务器 PI 可以在自己的过程中实现 Telnet 协议的功能;第二种方法是利用系统中现有的Telnet 模块。实现上,FTP 对 Telnet 协议的依赖也不多,即使重新实现,代码量也不大。3. 数据传输功能数据连接只传输数据,控制连接传送命令和响应。几个命令是关于在主机间传输数据的,数据传输基本上独立于物理结构的,但是如果在压缩传输模式下流式传输与文件结构有关,文件的属性与表示类型有关。3.1. 数据表示与保存数据是在主机间的存

6、储设置间传送的。因为两个系统的数据存储方式不同,因此需要对它进行转换,在传送文本时会有对 ASCII 表示的问题,在进行二进制传送的时候,会有不同系统对字节长度规定不同的问题,有的系统是 7 位,有的系统可能是 32 位,这也需要进行转换。需要提供数据表示与传输模型函数,但是 FTP 提供这方面的功能不多,超过 FTP 提供功能的那一部分要用户自己实现。3.1.1. 数据类型数据表示是由用户指定的表示类型,它可以是隐含的,也可以是用户指定的。请一定注意:逻辑字节长度与物理字节长度是不同的。3.1.1.1. ASCII 类型这是所有 FTP 必须实现的默认类型,用于传送文本文件,当在主机间使用

7、EBCDIC 传送时更方便,则不使用 ASCII 类型。发送方将内部表示转换为 NVT-ASCII 格式,接收方则进行相反的过程接收数据。根据 NVT 标准,要在行结束处使用 序列。NVT-ASCII是 8 位的。ASCII 和 EBCDIC 的格式参数在下面讨论。3.1.1.2. EBCDIC 类型它是作为 ASCII 的另一种方法在主机间传送数据的数据类型。EBCDIC 和 ASCII 很象,仅在类型的功能描述上有一些差别。行结束符使用很少。3.1.1.3. 图象类型在此类型下传送的数据被看作连续的位,发送方将数据打包到 8 位传输字节中传送。因为结构的需要要对传送数据进行填充,填充字节全

8、部为 0,填充必须在文件结构时使用,而且要标记出以便接收方过滤掉。它用于传送二进制数据和有效地传送和存储文件,因此所有 FTP 也必须实现。3.1.1.4. 本地类型也可以以十进制指定逻辑字节大小。如果物理字节大小和逻辑字节大小不同,直接将物理数据打包为逻辑字节,不用什么填充。接收方根据逻辑字节大小进行和本机的存储特点进行转换。传输必须是可重复的,也就是说,相同的文件相同的参数,那内容必须是一样的。3.1.1.5. 格式控制ASCII 和 EBCDIC 有一个可选参数,它说明文件垂直格式控制,下面的数据表示类型在FTP 中有定义。字符文件可能有三种用途,打印,存储或留待以后处理。如果是用于打印

9、,那主机必须知道垂直格式控制的表示,如果存储或等以后处理,也需要保留文件格式。如果在远程主机上处理完后传输回本地主机,要保证远程主机处理时没有麻烦。这都需要在ASCII 和 EBCDIC 格式上加入新的参数。3.1.1.5.1. NON PRINT未指定第二个参数是它是默认值。它必须为所有 FTP 接受。如果传输的文件是用于打印的,则使用边界和间隔的默认值。通常它不用于打印目的,而用于保存文件或执行文件。3.1.1.5.2. TELNET 格式控制文件包括 ASCII/EBCDIC 垂直格式控制,这些控制字符可以使打印正常进行。3.1.1.5.3. CARRIAGE CONTROL (ASA)

10、文件包含 ASA (FORTRAN)垂直格式控制字符。在以 ASA 标准形成的行中,第一个字符不打印,它用于决定打印前的走纸量。下面是定义了的 ASA 字符:blank: 向下移动 1 行;0:向下移动 2 行;1:移动至下一页;+:不移动打印机必须能够决定结构体的结束。如果文件本身有记录结构就没有问题,如果没有,用于区别打印行,但这些格式标记已经由 ASA 控制字符使用了。3.1.2. 数据结构除了有不同的数据类型外,FTP 还允许有不同的文件结构,下面是三种文件结构:文件式结构:文件中没有内部结构,文件被看作是二进制流;记录结构:文件是由一系列记录组成的;页结构:文件是由不同的索引页组成的

11、。如果未使用 STRU 命令,文件结构是默认值。文件的结构会影响传输模型,存储和数据表示。文件本来的属性和保存它的主机有关,不同的机器会以自己的方式保存文件。在不同主机间传送文件时必须使主机能够识别相互的表示。有些主机上的文件是面向字节的,有些是面向记录的,在传送时就会出现问题。那就要在接收方进行内部转换。在进行转换的时候,需要区别记录的边界,在 ASCII 中使用 ,在 EBCDIC 中使用作为分隔符。采用这种实现方法的必须保证转换是可逆的。3.1.2.1. 文件结构如果未使用 STRU 命令,文件结构是默认值。文件结构中没有默认值,文件被看作是连续的字节串。3.1.2.2. 记录结构对于文

12、本文件,记录结构必须是所有 FTP 实现必须有的。记录结构文件是由连续的记录构成的。3.1.2.3. 页结构文件是非连续时使用页结构。这种文件称为随机访问文件。这些文件中有时会的和文件整体或部分相关的信息出现。在 FTP 中,文件的一个部分称为页。为了提供不同的页大小和相关信息,每页都带页头发送。页头中有如下域:头长度包括此字节的页头长度,单位为字节,最小长度为 4 页索引指出此部分在原文件中的位置,它和传输编号不是一回事 数据长度页数据中的逻辑字节数,最小值为 0 页类型页的类型有以下几种:0=未页,指示传输结构,包头必须为 4,数据长度必须为 0;1=通常页,没有控制信息的通常页文件的普通

13、类型;2=描述子页,用于传送整体文件的描述信息;3=访问控制页,包括页级访问控制信息的页文件头域,包头长度必须为 5 可选域提供每页的控制信息所有域均以 1 个逻辑字节长度为大小,逻辑字节长度由 TYPE 命令指定。如果读取版本与和开始版本号一致,文件访问时必须以相同的参数进行。如果参数相同,FTP 实现要保证取得的文件内容是相同的。3.2. 建立数据连接传送数据机制包括建立连接选择数据参数。用户和服务器 DTP 有默认数据端口。用户进程默认数据端口和控制连接端口相同。服务器进程默认数据端口和控制连接端口相邻。传输字节大小是 8 位字节。此字节是实际传输字节,但不代表主机内的数据表示。被动数据

14、传输进程在数据端口接收数据,FTP 请求命令决定数据传输的方向。服务器在接收到请求以后,将初始化端口的数据连接。当连接建立后,传输在 DTP 之间传送,服务器 PI 对用户PI 返回应答。FTP 实现运行一个默认数据端口,用户 PI 才能改变默认端口。通过 PORT 命令可能改变端口,用户可能希望数据在第三方主机上进行其它操作,用户 PI需要在两个服务器 PI 上建立连接。一个服务器被告知侦听另一服务器的请求。用户 PI 通过 PORT 命令通知另一服务器的数据端口。最后双方发送相应的传送命令。通常,服务器负责支持数据连接,初始化并关闭它,除非用户 DTP 在传输模式下要求关闭连接。服务器在下

15、面情况下关闭数据连接:1. 服务器结束发送数据,通过 EOF 要求中止传送;2. 用户发送 ABORT 命令;3. 用户改变端口;4. 控制连接关闭;5. 发生不可恢复错误。3.3. 数据连接管理默认数据连接端口:所有 FTP 必须支持默认数据连接,只有用户 PI 能够初始化非默认端口的使用。确定非默认数据端口:用户 PI 可以使用 PORT 命令指定非默认端口,它要求服务器方以PASV 确定非默认数据端口。连接是由双方地址确定的,因此改变一方地址就改变了连接。数据连接的重用:在使用流式数据传输模型时,文件结束通过关闭连接指示。如果要传送多个文件时就会出麻烦,解决的方法有两个,一个是确定非默认

16、端口,另一个是使用另一种传输模式。就传输模式而言,流传输模式是不安全的,因此无法确定连接是暂时还是永久关闭。其它传输模式不通过关闭连接表示文件结构,它们可以通过 FTP 命令决定传送结构。因此使用这些传输模式可以在保持连接的情况下传送多个文件。3.4. 传输模式有三种传输模式:一种将数据格式化并考虑重新开始过程;一种压缩数据;一种是不经过处理(少量处理)传送。所有数据传输必须以一个 EOF 结束,它可以显式给出,也可以通过关闭连接隐式给出。对于记录文件,所有 EOR 是显式的,包括最后一个记录。对于以页结构传送的文件,使用“最后一页”表示结束。从这里开始,下文中我们提到的字节指的是“传输字节”

17、 。为了进行标准化传送,传送主机必须把行结束或记录结束的内部表示转化为传输模式和文件结构指定的形式传送,接收方则进行相反的工作。IBM 大型机的记录计数域可能不能为其它主机识别,所以记录结束标记在流模式下以双字节控制码传送,在块或压缩模式下以标记位传送。而 ASCII 或 EBCDIC 的行结束则则或指示。这样的转换需要时间,所以相同的系统在传送文本文件时采用二进制或流表示比较合适。下面是 FTP 定义的传输模式:3.4.1. 流模式数据以字节流的形式传送。使用的表示类型没有限制,允许记录结构。在记录结构文件EOR 和 EOF 表示为双字节控制码。第一字节全为 0,后一字节为转义字符。当第二位

18、值为1 时表示 EOR,为 2 时表示 EOF,如果要同时表示 EOR 和 EOF,值为 3。全 1 字节作为数据发送时必须使用双字节传送,其中数据保存在第二个字节内。如果是文件结构,通过发送方关闭连接表示 EOF,接收到的所有数据就是文件内容。 3.4.2. 块模式文件以块形式传送,块带有自己的头部分。头字节包括计数域和描述子代码。计数域说明了数据块的字节数,描述子代码定义了以下内容:EOF,EOR 重新开始标记或怀疑错误数据。怀疑错误数据不是为了进行差错控制,它是为了站点间交换特定数据,传送时不管本地错误(如硬盘错误)而只管传送,但是传送时可要指出,这个数据可能有错。在此模式下可以使用记录

19、结构,也可以使用相应的数据表示。头字节的结构如下图所示:描述子 8 位字节计数 16 位描述子代码由在描述子字节中的位标记说明,下面是已经指定的四种代码及其意义:代码意义 128数据块结束是 EOR 64数据块结束是 EOF 32数据块内有怀疑错误 16数据块是重新开始标记以这种编码,对于特定块可能存在多个描述子编码条件,所需要的位必须全部设置。重新开始标记包括在数据流中,它作为 8 位整数代表在控制连接上使用语言的可打印字节,但不得出现在其中。例如要传送 6 字节标记,下面就是例子:Descrptr code = 16Byte count = 6Marker 8 位Marker 8 位Mar

20、ker 8 位Marker 8 位Marker 8 位Marker 8 位3.4.3. 压缩模式有三种信息需要传送:常规数据以字节串传送;压缩数据,包括复本和过滤器;控制信息,以两个转义字符传送。如果有 N(0 但小于 127)个常规数据传送,在数据前一位加上一个字节,这个字节最高位为 0,其它位表示的数值等于 N。如下图:若要压缩一个数据位 D 的 N 复本字符串,用两个字节传送,如下图,它表示的是压缩的字节:一串 N 过虑器字节可以压缩为一个字节,而过滤器字节根据表示法不同而不同。如果类型是 ASCII 或 EBCDIC,过滤器字节是,如果是图象或本地类型,则是 0。下面就是过滤器字节:转

21、义序列是双字节,头一个全 0,后一个内是定义于块模式下的描述子代码。描述子代码与块模式中的意义相同,它作用于其后串中的字节。而压缩模式对于增加带宽有好处(因为数据是压缩过的) 。3.5. 差错恢复和重新开始位丢失和数据错误是这一层的差错控制由 TCP 负责。而重新开始则是给用户一个处理系统(包括操作系统,网络等)失败的方法。重新开始过程仅适用于块和压缩模式,它要求发送者在数据流中加入特定标记,标记仅对传送者有意义,但其中的内容是控制连接使用的语言。标记可以代表一个位记数,记录记数或可以标记数据数目的任何点。如果接收方也支持重新开始,将会在接收系统中保存这一标记。在系统失败重新启动后,用户可以根

22、据原来的标记重新开始数据传送,也就是我们通常熟悉的断点续传过程。接收方接收到一段数据,然后记下一点,如果发送方失败了,就从这一点以后再传送相应的数据。具体的这里不多说了。4. 文件传输功能从用户 PI 到服务器的信道是建立在用户到标记服务器端口间的。用户协议解释器负责发送命令和解释接收的应答;服务器 PI 解释命令,发送应答,指导 DTP 建立数据连接并传送数据。如果数据传输的第二方是用户 DTP,通过用户 FTP 主机的内部协议对它进行控制;如果第二方是服务器 DTP,它由用户 PI 发来的命令经过自己的 PI 控制。4.1. FTP 命令4.1.1. 访问控制命令下列命令指定访问控制标记(

23、命令码在括号内):用户名(USER)参数是标记用户的 Telnet 串。用户标记是访问服务器必须的,此命令通常是控制连接后第一个发出的命令,有些主机还会要求口令和帐户。服务器可以在任何时间接收新的 USER命令以改变访问控制和(或)帐户信息。这可以重新开始登录过程,所以传输参数不变,在进行中的文件传输在过去的访问控制参数下完成。口令(PASS)参数是标记用户口令的 Telnet 串。此命令紧跟 USER 命令,在某些站点它是完成访问控制不可缺少的一步。因此口令是个重要的东西,因此不能显示出来,服务器方没有办法隐藏口令,所以这一任务得由用户 FTP 进程完成。ACCOUNT (ACCT)参数是标

24、记用户帐户的 Telnet 串。此命令不需要与 USER 相关,一些站点可能需要帐户用于登录,另一些可以限制帐户的权限,在后一种情况下,此命令可在任何时候发送。应答的不同可以区别不同的情况:当登录需要帐户信息时,对 PASS 命令的响应是 332。另外,如果不需要帐户信息,对 PASS 的响应是 230,如果需要帐户信息在以后需要,服务器会返回 332 或 532,这要看它是保存此命令还是拒绝此命令了。改变工作目录(CWD)此命令使用户可以在不同的目录或数据集下工作而不用改变它的登录或帐户信息。传输参数也不变。参数一般是目录名或与系统相关的文件集合。回到上一层目录(CDUP)此命令要求系统实现

25、目录树结构,它的响应和 CWD 的相同。结构加载(SMNT)此命令使用户在不改变登录或帐户信息的情况下加载另一个文件系统数据结构。传输参数也不变。参数是文件目录或与系统相关的文件集合。重新初始化(REIN)此命令终止 USER,将所有 I/O 和帐户信息写入,但不许进行中的数据传输完成。重置所有参数,控制连接打开,可以再次开始 USER 命令。退出登录(QUIT)此命令终止 USER,如果没有数据传输,服务器关闭控制连接;如果有数据传输,在得到传输响应后服务器关闭控制连接。如果用户进程正在向不同的 USER 传输数据,不希望对每个 USER 关闭然后再打开,可以使用 REIN。对控制连接的意外

26、关闭,可以导致服务器运行中止(ABOR)和退出登录(QUIT)。4.1.2. 传输参数命令所有数据传输参数有默认值。服务器必须记录下默认值,在 FTP 服务请求后,可以以任何顺序发送。下面命令传送参数:数据端口(PORT)参数是要使用的数据连接端口,通常情况下对此不需要命令响应。如果使用此命令时,要发送 32 位的 IP 地址和 16 位的 TCP 端口号。上面的信息以 8 位为一组,逗号间隔十进制传输,如下例:PORT h1,h2,h3,h4,p1,p2其中 h1 是 IP 地址的最高 8 位。被动(PASV)此命令要求服务器 DTP 在指定的数据端口侦听,进入被动接收请求的状态,参数是主机

27、和端口地址。表示类型(TYPE)参数指定表示类型。有些类型需要第二个参数,第一个参数由单个 Telnet 字符定义,第二个参数是十进制整数指定字节大小,参数间以分隔。下面是格式:默认表示类型是 ASCII 非打印字符,如果参数未改变,以后只改变了第一个参数,则使用默认值。文件结构(STRU)参数是一个 Telnet 字符代码指定文件结构。下面是代码及其意义:F - 文件(非记录结构) ,它是默认值R - 记录结构P - 页结构传输模式(MODE)参数是一个 Telnet 字符代码指定传输模式。下面是代码及其意义:S - 流(默认值)B - 块C - 压缩4.1.3. FTP 服务命令FTP 服

28、务命令定义用户请求的文件传输或文件系统功能。此命令的参数通常是路径名,其语法要和服务器的规范一致。推荐的默认值是最近指定的设备目录或目录。命令顺序通常没有限制,只有“rename from“命令后面必须是“rename to“,重新启动命令后面必须是中断服务命令。服务命令的响应通常在数据连接上传输。下面是具体的命令:获得文件(RETR)此命令使服务器 DTP 传送指定路径内的文件复本到服务器或用户 DTP。这边服务器上文件的状态和内容不受影响。保存(STOR)此命令使服务器 DTP 接收数据连接上传送过来的数据,并将数据保存在服务器的文件中。如果文件已存在,原文件将被覆盖。如果文件不存在,则新

29、建文件。唯一保存(STOU)此命令和 STOR 差不多,此命令要求在此目录下的文件名是唯一的,对此命令的响应必须包括产生的用户名。附加(APPE)它和 STOR 的功能差不多,但是如果文件在指定路径内已存在,则把数据附加到原文件尾部,如果不存在则新建文件。分配(ALLO)此命令用于在一些主机上为新传送的文件分配足够的存储空间。参数是十进制的逻辑字节数。如果是记录或页结构,页或记录的最大大小也需要,这在第二个参数内以十进制指定。第二个参数是可选的,如果有它,它和第一个参数以 Telnet 字符 R 分隔。此命令在 STOR 或 APPE 命令后,对于不需要分配存储空间的机器,它的作用等于 NOO

30、P。重新开始(REST)参数域代表服务器要重新开始的那一点,此命令并不传送文件,而是略过指定点后的数据,此命令后应该跟其它要求文件传输的 FTP 命令。重命名(RNFR)这个命令和我们在其它操作系统中使用的一样,只不过后面要跟“rename to“指定新的文件名。重命名为(RNTO)此命令和上面的命令共同完成对文件的重命名。放弃(ABOR)此命令通知服务中止以前的 FTP 命令和与之相关的数据传送。如果先前的操作已经完成,则没有动作,返回 226。如果没有完成,返回 426,然后再返回 226。关闭控制连接,数据连接不关闭。删除(DELE)此命令删除指定路径下的文件。用户进程负责对删除的提示。

31、删除目录(RMD)此命令删除目录。创建目录(MKD)此命令在指定路径下创建新目录。打印工作目录(PWD)在响应是返回当前工作目录。列表(LIST)服务器传送列表到被动 DTP,如果路径指定一个目录或许多文件,返回指定路径下的文件列表。如果路径名指定一个文件,服务器返回文件的当前信息,参数为空表示用户当前的工作目录或默认目录。数据传输在 ASCII 或 EBCDIC 下进行,用户必须确认这一点。因为文件信息因系统不同而不同,所以不可能被程序自动利用,但是人类用户却很需要。名字列表(NLST)服务器传送目录表名到用户,路径名应指定目录或其它系统指定的文件群描述子;空参数指当前目录。服务器返回文件名

32、数据流,以 ASCII 或 EBCDIC 形式传送,并以或分隔。这里返回的信息有时可以供程序进行进一步处理。站点参数(SITE)服务器用来提供服务器系统信息,信息因系统不同而不同,格式在 HELP SITE 命令应答中给出。系统(SYST)用于确定服务器上运行的操作系统。状态(STAT)此命令返回控制连接状态,它可以在文件传送过程中发送,服务器返回操作进行的状态。也可以在文件传送之间发送,这时命令有参数,参数是路径名,此命令的功能除了数据在控制连接上传送以外和列表命令相似。如果指定部分路径,服务器以文件名或与说明相关的属性返回;如没有参数,服务器返回服务器 FTP 进程的状态信息,包括传输参数

33、的当前值和连接状态。帮助(HELP)这条命令我们在平常系统中得到的帮助没有什么区别,响应类型是 211 或 214。建议在使用 USER 命令前使用此命令。等待(NOOP)此命令不产生什么实际动作,它仅使服务器返回 OK。FTP 在控制连接上使用 Telnet 通信,因此有机会大家可以看看相关的协议说明。对下文的理解会很有好处。下面内容将对命令的应答和关于命令的详细信息作以说明。FTP 命令可分为访问控制标记,数据传输参数或 FTP 服务请求,特定的命令(如 ABOR,STAT)可以在数据传输过程中在控制连接上传输。有些服务器不能同时监视数据和控制链路,那就要另外采取措施了。请注意下面的几点建

34、议:1. 用户系统将 Telnet 的“Interrupt Process“(IP)信息插入 Telnet 流;2. 用户系统发送 Telnet 的“Synch“ 信号;3. 用户系统将命令(如 ABOR)插入 Telnet 流;4. 服务器 PI 在接收到 IP 后,在 Telnet 流中寻找仅有一个的 FTP 命令。4.2. FTP 应答FTP 命令的响应是为了对数据传输请求和过程进行同步,也是为了让用户了解服务器的状态。每个命令必须有最少一个响应,如果是多个,它们要易于区别。有些命令是有顺序性的,因此其中任何一个命令的失败会导致从头开始。FTP 响应由三个数字构成,后面是一些文本。数字带

35、有足够的信息命名用户 PI 不用检查文本就知道发生了什么。文本信息与服务器相关,用户可能得到不同的文本信息。文本和数字以间隔,文本后以 Telnet 行结束符结束。文本可能多于一行,这时文本必须在括号内,第一行内要有信息表示文本多于一行,最后一行也要有所标记。如果是多行,可以在数字代码后加上“-“,最后一行以数字开始,后面是,再加上 Telnet 的行结束符就可以了。下面是一个例子:123-第一行第二行234 以数字开始的一行123 最后一行三位数字每位都有一定的意义,第一位确定响应是好的,坏的还是不完全的,通过检查第一位,用户进程通常就能够知道大致要采取什么行动了。如果用户程序希望了解出了什

36、么问题,可以检查第二位,第三位留表示其它信息。第一位有五个值:1yz 确定预备应答请求的操作正在被初始化;在进入下一个命令前等待另外的应答。这类响应用于说明命令被接受,在实现中如何同步监视有困难,用户进程现在可以关注数据连接了。服务器 FTP进程对第个命令几乎都返回 1yz 响应。2yz 确定完成应答要求的操作已经完成,可以执行新命令。3yz 确定中间应答命令已接受,但要求的操作被停止,停止接收更新的信息。4yz 暂时拒绝完成应答未接受命令,要求的操作未执行,但错误是临时的,过一会儿可以再次发送消息。用户应该返回命令序列的开始。这个暂时可是不好确定,此命令的意思就是让用户进程再次尝试使用此命令

37、。5yz 永远拒绝完成应答它与暂时拒绝完成应答的区别就在于错误条件是一时半会不会消失。下面我们来看看第二位所代表的意义:x0z 格式错误;x1z 此类应答是为了请求信息的;x2z 此类应答是关于控制和数据连接的;x3z 关于认证和帐户登录过程; x4z 未使用;x5z 此类应答是关于文件系统的;第三个数字是在第二个数字的基础上对应答内容的进一步细化。一般来说,数字代码后要有文本信息。实现时应该尽量使用现有的代码,而不要随便添加新的意义不大的代码。有些命令如 TYPE 或 ALLO,它们的成功不为用户进程提供任务新信息,所以不会有 200应答返回。如果有些命令对于服务器来说不支持,也要返回确定完

38、成应答,这样用户进程才有可能进行下面的命令。如果要求的不是可选实现的命令,而这个命令确实没有实现,那就要返回代码 502。下面我们根据数字顺序列出各个应答码及其意义:110重新启动标记应答。在这种情况下文本是确定的,它必须是:MARK yyyy=mmmm,其中yyyy 是用户进程数据流标记,mmmm 是服务器标记。120服务在 nnn 分钟内准备好125数据连接已打开,准备传送 150文件状态良好,打开数据连接 200命令成功 202命令未实现 211系统状态或系统帮助响应 212目录状态 213文件状态 214帮助信息,信息仅对人类用户有用 215名字系统类型 220对新用户服务准备好 22

39、1服务关闭控制连接,可以退出登录 225数据连接打开,无传输正在进行 226关闭数据连接,请求的文件操作成功 227进入被动模式 230用户登录 250请求的文件操作完成 257创建“PATHNAME“ 331用户名正确,需要口令 332登录时需要帐户信息 350请求的文件操作需要进一步命令 421不能提供服务,关闭控制连接 425不能打开数据连接 426关闭连接,中止传输 450请求的文件操作未执行 451中止请求的操作:有本地错误 452未执行请求的操作:系统存储空间不足 500格式错误,命令不可识别 501参数语法错误 502命令未实现 503命令顺序错误 504此参数下的命令功能未实现

40、 530未登录 532存储文件需要帐户信息 550未执行请求的操作 551请求操作中止:页类型未知 552请求的文件操作中止,存储分配溢出 553未执行请求的操作:文件名不合法5. 说明5.1. 最小实现下面是 FTP 服务器的最小实现:类型 - ASCII Non-print模式 - Stream结构 - File, Record命令 - USER, QUIT, PORT,TYPE, MODE, STRU,RETR, STOR,NOOP.传输的默认参数为:类型 - ASCII Non-print模式 - Stream结构 - File所有主机都将上面的值作为默认值。5.2. 连接服务器协议解

41、释器会在端口 L 侦听,用户或用户协议解释器初始化全双工控制连接,服务器和用户进程应该遵守 Telnet 协议的说明进行。服务器不提供对命令行的编辑功能,应该由用户负责这一切。在全部传送和应答结束后,在用户的请求下服务器关闭控制连接。用户 DTP 必须在指定的数据端口上侦听,它可以是默认端口 U 或由 PORT 命令指定的端口。服务器的默认数据端口为 L-1。传输方向和端口均可由 FTP 命令决定。只有用户 PI 可以改变默认端口。当数据在服务器 A 和 B 之间传送时,用户 PI,C,在两个服务器 PI 之间建立控制连接。其中一个服务器 A,在接收到传输服务命令时接收 PASV 命令初始化连

42、接,用户 PI 接收到 PASV 命令的确认时(确认内包括主机标识和端口) ,将端口以 PORT 命令发送到 B。在接收到确认后,用户 PI 可以发送相应的命令给 A 和 B 了,B 初始连接和传输进程,命令应答序列如下面所示,请根据位置注意时差:在任何时间,服务器和用户只要有一方关闭连接,另一方就要赶快读取缓冲中的数据,然后也关闭本方的连接。5.3. 命令本节主要讨论命令格式。命令对大小写不敏感。命令通常由命令码和相应的参数组成。中间由一个或几个空格分开。参数域由结束,服务器在未接收到行结束符时不会采取任何动作。下面描述的格式是以 NVT-ASCII 以准的,方括号代表可选的参数域,如果未选择可选的参数域则采用默认值。5.3.1. FTP 命令下面是 FTP 命令,其中 username 代表用户名,password 代表口令,pathname 代表路径名,host-port 代表主机端口,account-information 代表帐户信息, typecode 代表类型代码,decimal-integer 代表十进制整数,marker 代表标记,string 代表字符串:USER PASS ACCT CWD CDUP SMNT QUIT REIN PORT PASV TYPE STRU MODE RETR S

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 规范标准 > 国内外标准规范

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报