FTP RFC959中文文档


FTP RFC959 中文版 文件传输协议(File Transfer Protocol, FTP) 1. 介绍 FTP 的目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用 户透明和可 靠高效地传送数据。虽然我们也可以手工使用它,但是它的主要作用是供程序使 用的。在 阅读本文之前最好能够阅读 TCP 协议标准规范和 Telnet 协议标准规范。 2. 概览 在本节中我们将讨论一些表面上的问题,有些名词的定义请参阅 TCP 和Telnet 参考文献。我 们先介绍一下(1)字节大小,在 FTP 中字节大小有两个:逻辑字节大小和用于 传输的字节 大小。后者通常是 8位,而前者可不一定是多少了。传输字节不必等于逻辑字节 大小,也不 必对数据结构进行解释。(2)控制连接是建立在 USER-PIT 和SERVER-PI 之间用 于交换命令 与应答的通信链路。(3)数据连接是传输数据的全双工连接。传输数据可以发生 在服务器 DTP 和用户 DTP 之间也可以发生在两个服务器 DTP 之间。(4)DTP:数据传输过 程(DTP)建 立和管理数据连接,DTP 可以是主动的也可以是被动的。(5)EOR 代表记录尾。 (6)NTV 代 表网络虚拟终端,它的定义与在 Telnet 协议中的定义一致。(7)NVFS 代表网络 虚拟文件系 统 。(8)FTP 可以传输非连续的文件,这些文件的一部分称为页。(9)PI代表协 议解释器 。(10)服务器 DTP 代表一种传输过程,它通常处于“主动”状态,它和侦听端 口建立数据 连接,它还可以为传输和存储设置参数,并根据 PI的指令传输数据。当然,DTP 也可以转入 “被动”状 态 。(11)服务器 FTP 进程,它是和用户 FTP 进程一起工作的,它由PI 和DTP 组成 。至于用户 FTP 进程则是由 PI,DTP 和用户接口组成的。下图是 FTP 服务示意图 : 注意:数据连接是双向的,它不用整个时间都存在。上图中用户 PI开始控制连 接,控制连 接与 Telnet 协议很象。在开始阶段,标准FTP 命令由用户 PI产生并通过控制连 接传送到服务 器进程。服务器 PI向用户 PI返回标准应答。FTP 命令指定数据连接参数和文件 系统操作。用 户DTP 在特定数据端口侦听,服务器开始数据连接并以指定的参数开始数据传 输。数据端口 不必在开始 FTP 命令的机器上,但用户或用户 FTP 进程必须确定它在指定的数据 端口上侦听 。这个数据连接是全双工的。 在另外一种情况下,用户或许希望在两个主机间传送文件,不是两个本地主机。 用户在两 台主机间建立控制连接,然后规划数据连接。用这种方式,控制信息由用户 PI 获得,但是 数据在服务器 DTP 之间传送。下面就是一个例子: 协议要求数据传输在处理时打开控制连接。在完成 FTP 服务后由用户中止控制连 接,而服务 器具体操作。如果在未接收命令时关闭了控制连接,服务器也会关闭数据传输。 FTP 和Tel net 很有联系,FTP 使用 Telnet 协议进行控制连接,可有两种方法达到目的:用 户PI或服务 器PI可以在自己的过程中实现 Telnet 协议的功能;第二种方法是利用系统中现 有的 Telnet 模块。实现上,FTP 对Telnet 协议的依赖也不多,即使重新实现,代码量也不 大。 3. 数据传输功能 数据连接只传输数据,控制连接传送命令和响应。几个命令是关于在主机间传输 数据的, 数据传输基本上独立于物理结构的,但是如果在压缩传输模式下流式传输与文件 结构有关 ,文件的属性与表示类型有关。 3.1. 数据表示与保存 数据是在主机间的存储设置间传送的。因为两个系统的数据存储方式不同,因此 需要对它 进行转换,在传送文本时会有对 ASCII 表示的问题,在进行二进制传送的时候, 会有不同系 统对字节长度规定不同的问题,有的系统是 7位,有的系统可能是 32 位,这也 需要进行转换 。需要提供数据表示与传输模型函数,但是FTP 提供这方面的功能不多,超过FTP 提供功能 的那一部分要用户自己实现。 3.1.1. 数据类型 数据表示是由用户指定的表示类型,它可以是隐含的,也可以是用户指定的。请 一定注意 :逻辑字节长度与物理字节长度是不同的。 3.1.1.1. ASCII 类型 这是所有 FTP 必须实现的默认类型,用于传送文本文件,当在主机间使用 EBCDIC 传送时更方 便,则不使用 ASCII 类型。发送方将内部表示转换为 NVT-ASCII 格式,接收方则 进行相反的 过程接收数据。根据 NVT 标准,要在行结束处使用序列。NVT-ASCII 是8 位的。ASCII 和EBCDIC 的格式参数在下面讨论。 3.1.1.2. EBCDIC 类型 它是作为 ASCII 的另一种方法在主机间传送数据的数据类型。EBCDIC 和ASCII 很象,仅在类 型的功能描述上有一些差别。行结束符使用很少。 3.1.1.3. 图象类型 在此类型下传送的数据被看作连续的位,发送方将数据打包到 8位传输字节中传 送。因为结 构的需要要对传送数据进行填充,填充字节全部为 0,填充必须在文件结构时使 用,而且要 标记出以便接收方过滤掉。它用于传送二进制数据和有效地传送和存储文件,因 此所有 FT P也必须实现。 3.1.1.4. 本地类型 也可以以十进制指定逻辑字节大小。如果物理字节大小和逻辑字节大小不同,直 接将物理 数据打包为逻辑字节,不用什么填充。接收方根据逻辑字节大小进行和本机的存 储特点进 行转换。传输必须是可重复的,也就是说,相同的文件相同的参数,那内容必须 是一样的 。 3.1.1.5. 格式控制 ASCII 和EBCDIC 有一个可选参数,它说明文件垂直格式控制,下面的数据表示 类型在 FTP 中 有定义。字符文件可能有三种用途,打印,存储或留待以后处理。如果是用于打 印,那主 机必须知道垂直格式控制的表示,如果存储或等以后处理,也需要保留文件格式 。 如果在 远程主机上处理完后传输回本地主机,要保证远程主机处理时没有麻烦。这都需 要在 ASCI I和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) 文件包含 ASA (FORTRAN)垂直格式控制字符。在以 ASA 标准形成的行中,第一个 字符不打印 ,它用于决定打印前的走纸量。下面是定义了的 ASA 字符: blank: 向下移动 1行;0:向下移动 2行;1:移动至下一页;+:不移动 打印机必须能够决定结构体的结束。如果文件本身有记录结构就没有问题,如果 没有,用于区别打印行,但这些格式标记已经由 ASA 控制字符使用了。 3.1.2. 数据结构 除了有不同的数据类型外,FTP 还允许有不同的文件结构,下面是三种文件结构 : 文件式结 构:文件中没有内部结构,文件被看作是二进制流;记录结构:文件是由一系列 记录组成 的;页结构:文件是由不同的索引页组成的。 如果未使用 STRU 命令,文件结构是默认值。文件的结构会影响传输模型,存储 和数据表示 。文件本来的属性和保存它的主机有关,不同的机器会以自己的方式保存文件。 在不同主 机间传送文件时必须使主机能够识别相互的表示。有些主机上的文件是面向字节 的,有些 是面向记录的,在传送时就会出现问题。那就要在接收方进行内部转换。在进行 转换的时 候,需要区别记录的边界,在 ASCII 中使用,在 EBCDIC 中使用作为 分隔符。采用 这种实现方法的必须保证转换是可逆的。 3.1.2.1. 文件结构 如果未使用 STRU 命令,文件结构是默认值。文件结构中没有默认值,文件被看 作是连续的 字节串。 3.1.2.2. 记录结构 对于文本文件,记录结构必须是所有 FTP 实现必须有的。记录结构文件是由连续 的记录构成 的。 3.1.2.3. 页结构 文件是非连续时使用页结构。这种文件称为随机访问文件。这些文件中有时会的 和文件整 体或部分相关的信息出现。在 FTP 中,文件的一个部分称为页。为了提供不同的 页大小和相 关信息,每页都带页头发送。页头中有如下域: 头长度 包括此字节的页头长度,单位为字节,最小长度为 4 页索引 指出此部分在原文件中的位置,它和传输编号不是一回事 数据长度 页数据中的逻辑字节数,最小值为 0 页类型 页的类型有以下几种:0=未页,指示传输结构,包头必须为 4,数据长度必须为 0;1=通常 页,没有控制信息的通常页文件的普通类型;2=描述子页,用于传送整体文件的 描述信息 ;3=访问控制页,包括页级访问控制信息的页文件头域,包头长度必须为 5 可选域 提供每页的控制信息 所有域均以 1个逻辑字节长度为大小,逻辑字节长度由 TYPE 命令指定。如果读 取版本与和开 始版本号一致,文件访问时必须以相同的参数进行。如果参数相同,FTP 实现要 保证取得的 文件内容是相同的。 3.2. 建立数据连接 传送数据机制包括建立连接选择数据参数。用户和服务器 DTP 有默认数据端口。 用户进程默 认数据端口和控制连接端口相同。服务器进程默认数据端口和控制连接端口相 邻。传输字 节大小是 8位字节。此字节是实际传输字节,但不代表主机内的数据表示。被动 数据传输进 程在数据端口接收数据,FTP 请求命令决定数据传输的方向。服务器在接收到请 求以后,将 初始化端口的数据连接。当连接建立后,传输在 DTP 之间传送,服务器 PI对用 户PI返回应答 。FTP 实现运行一个默认数据端口,用户 PI才能改变默认端口。 通过 PORT 命令可能改变端口,用户可能希望数据在第三方主机上进行其它操作, 用户 PI需 要在两个服务器 PI上建立连接。一个服务器被告知侦听另一服务器的请求。用 户PI通过 PO RT命令通知另一服务器的数据端口。最后双方发送相应的传送命令。通常,服 务器负责支 持数据连接,初始化并关闭它,除非用户 DTP 在传输模式下要求关闭连接。服务 器在下面情 况下关闭数据连接: 1. 服务器结束发送数据,通过 EOF 要求中止传送; 2. 用户发送 ABORT 命令; 3. 用户改变端口; 4. 控制连接关闭; 5. 发生不可恢复错误。 3.3. 数据连接管理 默认数据连接端口:所有 FTP 必须支持默认数据连接,只有用户 PI能够初始化 非默认端口的 使用。 确定非默认数据端口:用户PI可以使用 PORT 命令指定非默认端口,它要求服务 器方以 PASV 确定非默认数据端口。连接是由双方地址确定的,因此改变一方地址就改变了连 接。 数据连接的重用:在使用流式数据传输模型时,文件结束通过关闭连接指示。如 果要传送 多个文件时就会出麻烦,解决的方法有两个,一个是确定非默认端口,另一个是 使用另一 种传输模式。就传输模式而言,流传输模式是不安全的,因此无法确定连接是暂 时还是永 久关闭。其它传输模式不通过关闭连接表示文件结构,它们可以通过 FTP 命令决 定传送结构 。因此使用这些传输模式可以在保持连接的情况下传送多个文件。 3.4. 传输模式 有三种传输模式:一种将数据格式化并考虑重新开始过程;一种压缩数据;一种 是不经过 处理(少量处理)传送。所有数据传输必须以一个 EOF 结束,它可以显式给出, 也可以通过 关闭连接隐式给出。对于记录文件,所有 EOR 是显式的,包括最后一个记录。对 于以页结构 传送的文件,使用“最后一页”表示结束。从这里开始,下文中我们提到的字节 指的是“ 传输字节”。 为了进行标准化传送,传送主机必须把行结束或记录结束的内部表示转化为传输 模式和文 件结构指定的形式传送,接收方则进行相反的工作。IBM 大型机的记录计数域可 能不能为其 它主机识别,所以记录结束标记在流模式下以双字节控制码传送,在块或压缩模 式下以标 记位传送。而 ASCII 或EBCDIC 的行结束则则指示。这样的转换需 要时间,所以 相同的系统在传送文本文件时采用二进制或流表示比较合适。下面是 FTP 定义的 传输模式: 3.4.1. 流模式 数据以字节流的形式传送。使用的表示类型没有限制,允许记录结构。在记录结 构文件 EO R和EOF 表示为双字节控制码。第一字节全为 0,后一字节为转义字符。当第二 位值为 1时表 示EOR,为 2时表示 EOF,如果要同时表示 EOR 和EOF,值为 3。全 1字节作为数 据发送时必须使 用双字节传送,其中数据保存在第二个字节内。如果是文件结构,通过发送方关 闭连接表 示EOF,接收到的所有数据就是文件内容。 3.4.2. 块模式 文件以块形式传送,块带有自己的头部分。头字节包括计数域和描述子代码。计 数域说明 了数据块的字节数,描述子代码定义了以下内容:EOF,EOR 重新开始标记或怀 疑错误数据 。怀疑错误数据不是为了进行差错控制,它是为了站点间交换特定数据,传送时 不管本地 错误(如硬盘错误)而只管传送,但是传送时可要指出,这个数据可能有错。在 此模式下 可以使用记录结构,也可以使用相应的数据表示。头字节的结构如下图所示: 描述子 8位 字节计数 16 位 描述子代码由在描述子字节中的位标记说明,下面是已经指定的四种代码及其意 义: 代码 意义 128 数据块结束是 EOR 64 数据块结束是 EOF 32 数据块内有怀疑错误 16 数据块是重新开始标记 以这种编码,对于特定块可能存在多个描述子编码条件,所需要的位必须全部设 置。重新 开始标记包括在数据流中,它作为 8位整数代表在控制连接上使用语言的可打印 字节,但< SP>不得出现在其中。例如要传送 6字节标记,下面就是例子: Descrptr code = 16 Byte count = 6 Marker 8位 Marker 8位 Marker 8位 Marker 8位 Marker 8位 Marker 8位 3.4.3. 压缩模式 有三种信息需要传送:常规数据以字节串传送;压缩数据,包括复本和过滤器; 控制信息 ,以两个转义字符传送。如果有 N(>0 但小于 127)个常规数据传送,在数据前 一位加上一 个字节,这个字节最高位为 0,其它位表示的数值等于 N。如下图: 若要压缩一个数据位 D的N复本字符串,用两个字节传送,如下图,它表示的是 压缩的字节 : 一串 N过虑器字节可以压缩为一个字节,而过滤器字节根据表示法不同而不同。 如果类型是 ASCII 或EBCDIC,过滤器字节是,如果是图象或本地类型,则是 0。下面就 是过滤器字 节: 转义序列是双字节,头一个全 0,后一个内是定义于块模式下的描述子代码。描 述子代码与 块模式中的意义相同,它作用于其后串中的字节。而压缩模式对于增加带宽有好 处(因为 数据是压缩过的)。 3.5. 差错恢复和重新开始 位丢失和数据错误是这一层的差错控制由 TCP 负责。而重新开始则是给用户一个 处理系统( 包括操作系统,网络等)失败的方法。重新开始过程仅适用于块和压缩模式,它 要求发送 者在数据流中加入特定标记,标记仅对传送者有意义,但其中的内容是控制连接 使用的语 言。标记可以代表一个位记数,记录记数或可以标记数据数目的任何点。如果接 收方也支 持重新开始,将会在接收系统中保存这一标记。在系统失败重新启动后,用户可 以根据原 来的标记重新开始数据传送,也就是我们通常熟悉的断点续传过程。接收方接收 到一段数 据,然后记下一点,如果发送方失败了,就从这一点以后再传送相应的数据。具 体的这里 不多说了。 4. 文件传输功能 从用户 PI到服务器的信道是建立在用户到标记服务器端口间的。用户协议解释 器负责发送 命令和解释接收的应答;服务器 PI解释命令,发送应答,指导 DTP 建立数据连 接并传送数据 。如果数据传输的第二方是用户 DTP,通过用户 FTP 主机的内部协议对它进行控 制;如果第 二方是服务器 DTP,它由用户 PI发来的命令经过自己的 PI控制。 4.1. FTP 命令 4.1.1. 访问控制命令 下列命令指定访问控制标记(命令码在括号内): 用户名(USER) 参数是标记用户的 Telnet 串。用户标记是访问服务器必须的,此命令通常是控 制连接后第 一个发出的命令,有些主机还会要求口令和帐户。服务器可以在任何时间接收新 的USER 命 令以改变访问控制和(或)帐户信息。这可以重新开始登录过程,所以传输参数 不变,在 进行中的文件传输在过去的访问控制参数下完成。 口令(PASS) 参数是标记用户口令的 Telnet 串。此命令紧跟 USER 命令,在某些站点它是完成 访问控制不 可缺少的一步。因此口令是个重要的东西,因此不能显示出来,服务器方没有办 法隐藏口 令,所以这一任务得由用户 FTP 进程完成。 ACCOUNT (ACCT) 参数是标记用户帐户的 Telnet 串。此命令不需要与 USER 相关,一些站点可能需 要帐户用于 登录,另一些可以限制帐户的权限,在后一种情况下,此命令可在任何时候发送 。 应答的 不同可以区别不同的情况:当登录需要帐户信息时,对 PASS 命令的响应是 332。 另外,如果 不需要帐户信息,对 PASS 的响应是 230,如果需要帐户信息在以后需要,服务 器会返回 332 或532,这要看它是保存此命令还是拒绝此命令了。 改变工作目录(CWD) 此命令使用户可以在不同的目录或数据集下工作而不用改变它的登录或帐户信 息。传输参 数也不变。参数一般是目录名或与系统相关的文件集合。 回到上一层目录(CDUP) 此命令要求系统实现目录树结构,它的响应和 CWD 的相同。 结构加载(SMNT) 此命令使用户在不改变登录或帐户信息的情况下加载另一个文件系统数据结构。 传输参数 也不变。参数是文件目录或与系统相关的文件集合。 重新初始化(REIN) 此命令终止 USER,将所有 I/O 和帐户信息写入,但不许进行中的数据传输完成。 重置所有参 数,控制连接打开,可以再次开始 USER 命令。 退出登录(QUIT) 此命令终止 USER,如果没有数据传输,服务器关闭控制连接;如果有数据传输, 在得到传 输响应后服务器关闭控制连接。如果用户进程正在向不同的 USER 传输数据,不 希望对每个 USER 关闭然后再打开,可以使用 REIN。对控制连接的意外关闭,可以导致服务 器运行中止 (ABOR)和退出登录(QUIT)。 4.1.2. 传输参数命令 所有数据传输参数有默认值。服务器必须记录下默认值,在 FTP 服务请求后,可 以以任何顺 序发送。下面命令传送参数: 数据端口(PORT) 参数是要使用的数据连接端口,通常情况下对此不需要命令响应。如果使用此命 令时,要 发送 32 位的 IP地址和 16 位的 TCP 端口号。上面的信息以 8位为一组,逗号间 隔十进制传输, 如下例: PORT h1,h2,h3,h4,p1,p2 其中 h1 是IP地址的最高 8位。 被动(PASV) 此命令要求服务器 DTP 在指定的数据端口侦听,进入被动接收请求的状态,参数 是主机和端 口地址。 表示类型(TYPE) 参数指定表示类型。有些类型需要第二个参数,第一个参数由单个 Telnet 字符 定义,第二 个参数是十进制整数指定字节大小,参数间以分隔。下面是格式: 默认表示类型是 ASCII 非打印字符,如果参数未改变,以后只改变了第一个参数 , 则使用默 认值。 文件结构(STRU) 参数是一个 Telnet 字符代码指定文件结构。下面是代码及其意义: F- 文件(非记录结构),它是默认值 R- 记录结构 P- 页结构 传输模式(MODE) 参数是一个 Telnet 字符代码指定传输模式。下面是代码及其意义: S- 流(默认值) B- 块 C- 压缩 4.1.3. FTP 服务命令 FTP 服务命令定义用户请求的文件传输或文件系统功能。此命令的参数通常是路 径名,其语 法要和服务器的规范一致。推荐的默认值是最近指定的设备目录或目录。命令顺 序通常没 有限制,只有"rename from"命令后面必须是"rename to",重新启动命令后面必 须是中断 服务命令。服务命令的响应通常在数据连接上传输。下面是具体的命令: 获得文件(RETR) 此命令使服务器 DTP 传送指定路径内的文件复本到服务器或用户 DTP。这边服务 器上文件的 状态和内容不受影响。 保存(STOR) 此命令使服务器 DTP 接收数据连接上传送过来的数据,并将数据保存在服务器的 文件中。如 果文件已存在,原文件将被覆盖。如果文件不存在,则新建文件。 唯一保存(STOU) 此命令和 STOR 差不多,此命令要求在此目录下的文件名是唯一的,对此命令的 响应必须包 括产生的用户名。 附加(APPE) 它和 STOR 的功能差不多,但是如果文件在指定路径内已存在,则把数据附加到 原文件尾部 ,如果不存在则新建文件。 分配(ALLO) 此命令用于在一些主机上为新传送的文件分配足够的存储空间。参数是十进制的 逻辑字节 数。如果是记录或页结构,页或记录的最大大小也需要,这在第二个参数内以十 进制指定 。第二个参数是可选的,如果有它,它和第一个参数以 Telnet 字符 R 分隔。此命 令在 STOR 或APPE 命令后,对于不需要分配存储空间的机器,它的作用等于 NOOP。 重新开始(REST) 参数域代表服务器要重新开始的那一点,此命令并不传送文件,而是略过指定点 后的数据 ,此命令后应该跟其它要求文件传输的 FTP 命令。 重命名(RNFR) 这个命令和我们在其它操作系统中使用的一样,只不过后面要跟"rename to"指 定新的文件 名。 重命名为(RNTO) 此命令和上面的命令共同完成对文件的重命名。 放弃(ABOR) 此命令通知服务中止以前的 FTP 命令和与之相关的数据传送。如果先前的操作已 经完成,则 没有动作,返回 226。如果没有完成,返回 426,然后再返回 226。关闭控制连 接,数据连接 不关闭。 删除(DELE) 此命令删除指定路径下的文件。用户进程负责对删除的提示。 删除目录(RMD) 此命令删除目录。 创建目录(MKD) 此命令在指定路径下创建新目录。 打印工作目录(PWD) 在响应是返回当前工作目录。 列表(LIST) 服务器传送列表到被动 DTP,如果路径指定一个目录或许多文件,返回指定路径 下的文件列 表。如果路径名指定一个文件,服务器返回文件的当前信息,参数为空表示用户 当前的工 作目录或默认目录。数据传输在 ASCII 或EBCDIC 下进行,用户必须确认这一点。 因为文件信 息因系统不同而不同,所以不可能被程序自动利用,但是人类用户却很需要。 名字列表(NLST) 服务器传送目录表名到用户,路径名应指定目录或其它系统指定的文件群描述 子;空参数 指当前目录。服务器返回文件名数据流,以ASCII 或EBCDIC 形式传送,并以分 隔。这里返回的信息有时可以供程序进行进一步处理。 站点参数(SITE) 服务器用来提供服务器系统信息,信息因系统不同而不同,格式在 HELP SITE 命令应答中给 出。 系统(SYST) 用于确定服务器上运行的操作系统。 状态(STAT) 此命令返回控制连接状态,它可以在文件传送过程中发送,服务器返回操作进行 的状态。 也可以在文件传送之间发送,这时命令有参数,参数是路径名,此命令的功能除 了数据在 控制连接上传送以外和列表命令相似。如果指定部分路径,服务器以文件名或与 说明相关 的属性返回;如没有参数,服务器返回服务器 FTP 进程的状态信息,包括传输参 数的当前值 和连接状态。 帮助(HELP) 这条命令我们在平常系统中得到的帮助没有什么区别,响应类型是 211 或214。 建议在使用 USER 命令前使用此命令。 等待(NOOP) 此命令不产生什么实际动作,它仅使服务器返回 OK。 FTP 在控制连接上使用 Telnet 通信,因此有机会大家可以看看相关的协议说明。 对下文的理 解会很有好处。下面内容将对命令的应答和关于命令的详细信息作以说明。FTP 命令可分为 访问控制标记,数据传输参数或 FTP 服务请求,特定的命令(如 ABOR,STAT) 可以在数据传 输过程中在控制连接上传输。有些服务器不能同时监视数据和控制链路,那就要 另外采取 措施了。请注意下面的几点建议: 1. 用户系统将 Telnet 的"Interrupt Process"(IP)信息插入 Telnet 流; 2. 用户系统发送 Telnet 的"Synch"信号; 3. 用户系统将命令(如 ABOR)插入 Telnet 流; 4. 服务器 PI在接收到 IP后,在 Telnet 流中寻找仅有一个的 FTP 命令。 4.2. FTP 应答 FTP 命令的响应是为了对数据传输请求和过程进行同步,也是为了让用户了解服 务器的状态 。每个命令必须有最少一个响应,如果是多个,它们要易于区别。有些命令是有 顺序性的 ,因此其中任何一个命令的失败会导致从头开始。FTP 响应由三个数字构成,后 面是一些文 本。数字带有足够的信息命名用户 PI不用检查文本就知道发生了什么。文本信 息与服务器 相关,用户可能得到不同的文本信息。文本和数字以间隔,文本后以 Telnet 行结束符 结束。文本可能多于一行,这时文本必须在括号内,第一行内要有信息表示文本 多于一行 ,最后一行也要有所标记。如果是多行,可以在数字代码后加上"-",最后一行 以数字开始 ,后面是,再加上 Telnet 的行结束符就可以了。下面是一个例子: 123-第一行 第二行 234 以数字开始的一行 123 最后一行 三位数字每位都有一定的意义,第一位确定响应是好的,坏的还是不完全的,通 过检查第 一位,用户进程通常就能够知道大致要采取什么行动了。如果用户程序希望了解 出了什么 问题,可以检查第二位,第三位留表示其它信息。第一位有五个值: 1yz 确定预备应答 请求的操作正在被初始化;在进入下一个命令前等待另外的应答。这类响应用于 说明命令 被接受,在实现中如何同步监视有困难,用户进程现在可以关注数据连接了。服 务器 FTP 进 程对第个命令几乎都返回 1yz 响应。 2yz 确定完成应答 要求的操作已经完成,可以执行新命令。 3yz 确定中间应答 命令已接受,但要求的操作被停止,停止接收更新的信息。 4yz 暂时拒绝完成应答 未接受命令,要求的操作未执行,但错误是临时的,过一会儿可以再次发送消息 。 用户应 该返回命令序列的开始。这个暂时可是不好确定,此命令的意思就是让用户进程 再次尝试 使用此命令。 5yz 永远拒绝完成应答 它与暂时拒绝完成应答的区别就在于错误条件是一时半会不会消失。 下面我们来看看第二位所代表的意义: x0z 格式错误; x1z 此类应答是为了请求信息的; x2z 此类应答是关于控制和数据连接的; x3z 关于认证和帐户登录过程; x4z 未使用; x5z 此类应答是关于文件系统的; 第三个数字是在第二个数字的基础上对应答内容的进一步细化。一般来说,数字 代码后要 有文本信息。实现时应该尽量使用现有的代码,而不要随便添加新的意义不大的 代码。 有些命令如 TYPE 或ALLO,它们的成功不为用户进程提供任务新信息,所以不会 有200 应答返 回。如果有些命令对于服务器来说不支持,也要返回确定完成应答,这样用户进 程才有可 能进行下面的命令。如果要求的不是可选实现的命令,而这个命令确实没有实现 , 那就要 返回代码 502。下面我们根据数字顺序列出各个应答码及其意义: 110 重新启动标记应答。在这种情况下文本是确定的,它必须是:MARK yyyy=mmmm, 其中 yyy y是用户进程数据流标记,mmmm 是服务器标记。 120 服务在 nnn 分钟内准备好 125 数据连接已打开,准备传送 150 文件状态良好,打开数据连接 200 命令成功 202 命令未实现 211 系统状态或系统帮助响应 212 目录状态 213 文件状态 214 帮助信息,信息仅对人类用户有用 215 名字系统类型 220 对新用户服务准备好 221 服务关闭控制连接,可以退出登录 225 数据连接打开,无传输正在进行 226 关闭数据连接,请求的文件操作成功 227 进入被动模式 230 用户登录 250 请求的文件操作完成 257 创建"PATHNAME" 331 用户名正确,需要口令 332 登录时需要帐户信息 350 请求的文件操作需要进一步命令 421 不能提供服务,关闭控制连接 425 不能打开数据连接 426 关闭连接,中止传输 450 请求的文件操作未执行 451 中止请求的操作:有本地错误 452 未执行请求的操作:系统存储空间不足 500 格式错误,命令不可识别 501 参数语法错误 502 命令未实现 503 命令顺序错误 504 此参数下的命令功能未实现 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. 连接 服务器协议解释器会在端口 L侦听,用户或用户协议解释器初始化全双工控制连 接,服务器 和用户进程应该遵守 Telnet 协议的说明进行。服务器不提供对命令行的编辑功 能,应该由 用户负责这一切。在全部传送和应答结束后,在用户的请求下服务器关闭控制连 接。用户 DTP 必须在指定的数据端口上侦听,它可以是默认端口 U或由 PORT 命令指定的 端口。服务器 的默认数据端口为 L-1。传输方向和端口均可由 FTP 命令决定。只有用户 PI可 以改变默认端 口。当数据在服务器 A和B之间传送时,用户 PI,C,在两个服务器 PI之间建 立控制连接。其 中一个服务器 A,在接收到传输服务命令时接收 PASV 命令初始化连接,用户 PI 接收到 PASV 命 令的确认时(确认内包括主机标识和端口),将端口以 PORT 命令发送到 B。在接 收到确认后 ,用户 PI可以发送相应的命令给 A和B了,B初始连接和传输进程,命令应答 序列如下面所示 ,请根据位置注意时差: 在任何时间,服务器和用户只要有一方关闭连接,另一方就要赶快读取缓冲中的 数据,然 后也关闭本方的连接。 5.3. 命令 本节主要讨论命令格式。命令对大小写不敏感。命令通常由命令码和相应的参数 组成。中 间由一个或几个空格分开。参数域由结束,服务器在未接收到行结束符时 不会采取 任何动作。下面描述的格式是以 NVT-ASCII 以准的,方括号代表可选的参数域, 如果未选择 可选的参数域则采用默认值。 5.3.1. FTP 命令 下面是 FTP 命令,其中 username 代表用户名,password 代表口令,pathname 代表路径名,h ost-port 代表主机端口,account-information 代表帐户信息,typecode 代表 类型代码,d ecimal-integer 代表十进制整数,marker 代表标记,string 代表字符串: USER PASS ACCT CWD CDUP SMNT QUIT REIN PORT PASV TYPE STRU MODE RETR STOR STOU APPE ALLO [ R ] REST RNFR RNTO ABOR DELE RMD MKD PWD LIST [ ] NLST [ ] SITE SYST STAT [ ] HELP [ ] NOOP 5.3.2. FTP 命令参数 下面是用 BNF 范式表示的参数格式: ::= ::= ::= ::= | ::= 除外的所有 ASCII 字符 ::= ::= | ::= 可打印 ASCII 字符,从 33 到126 ::= ::= , ::= ,,, ::= , ::= 从1到255 的十进制整数 ::= N | T | C ::= A[ ]| E[ ]| I| L ::= F | R | P ::= S | B | C ::= ::= 任何十进制整数 5.4. 命令和响应序列 服务器和用户之间的通信是对话的过程,用户发送 FTP 命令,然后等待服务器的 一个(或多 个)响应,根据响应再发送新命令。 连接时的响应带有许多信息,通常情况下,服务器会返回 220 应答,等待输入, 用户在接收 到此响应后才发送新命令,如果服务器不能立即接收输入,会在 220 后面返回 120。有些信 息如服务器将在 15 分钟后停止工作是要服务器发向用户的,但是服务器却不能 直接发向用 户,处理的方法是将消息缓冲,在下一个响应中返回给用户。下面列出命令的应 答,第一 个是预备应答,第二个是确定完成,第三个是拒绝完成,最后是中间应答。这些 应答是构 成状态图的基础,状态图会在下节中给出: 建立连接 120 220 220 421 登录 USER 230 530 500, 501, 421 331, 332 PASS 230 202 530 500, 501, 503, 421 332 ACCT 230 202 530 500, 501, 503, 421 CWD 250 500, 501, 502, 421, 530, 550 CDUP 200 500, 501, 502, 421, 530, 550 SMNT 202, 250 500, 501, 502, 421, 530, 550 退出登录 REIN 120 220 220 421 500, 502 QUIT 221 500 传输参数 PORT 200 500, 501, 421, 530 PASV 227 500, 501, 502, 421, 530 MODE 200 500, 501, 504, 421, 530 TYPE 200 500, 501, 504, 421, 530 STRU 200 500, 501, 504, 421, 530 文件操作命令 ALLO 200 202 500, 501, 504, 421, 530 REST 500, 501, 502, 421, 530 350 STOR 125, 150 (110) 226, 250 425, 426, 451, 551, 552 532, 450, 452, 553 500, 501, 421, 530 STOU 125, 150 (110) 226, 250 425, 426, 451, 551, 552 532, 450, 452, 553 500, 501, 421, 530 RETR 125, 150 (110) 226, 250 425, 426, 451 450, 550 500, 501, 421, 530 LIST 125, 150 226, 250 425, 426, 451 450 500, 501, 502, 421, 530 NLST 125, 150 226, 250 425, 426, 451 450 500, 501, 502, 421, 530 APPE 125, 150 (110) 226, 250 425, 426, 451, 551, 552 532, 450, 550, 452, 553 500, 501, 502, 421, 530 RNFR 450, 550 500, 501, 502, 421, 530 350 RNTO 250 532, 553 500, 501, 502, 503, 421, 530 DELE 250 450, 550 500, 501, 502, 421, 530 RMD 250 500, 501, 502, 421, 530, 550 MKD 257 500, 501, 502, 421, 530, 550 PWD 257 500, 501, 502, 421, 550 ABOR 225, 226 500, 501, 502, 421 获得信息命令 SYST 215 500, 501, 502, 421 STAT 211, 212, 213 450 500, 501, 502, 421, 530 HELP 211, 214 500, 501, 502, 421 其它命令 SITE 200 202 500, 501, 530 NOOP 200 500 421 6. 状态图 下面是一个简单实现的 FTP 的状态图,只用到响应码的首位。对于所有命令或命 令序列有三 种可能性:成功(S),失败(F)或错误(E)。在状态图中B代表开始,W代表 等待响应。 下面我们给出一个总图,总图可以包括的命令有: ABOR,ALLO,DELE,CWD,CDUP,SMNT,HELP,MODE,NOOP,PASV,QUIT,SITE, PORT,SY ST,STAT,RMD,MKD,PWD,STRU 和TYPE 而下图可以包括的命令有:APPE,LIST,NLST,REIN,RETR,STOR 和STOU。 第一幅图和第二幅图差别不大,第一幅图中如果出现了 100 系列响应会是错误, 而在第二幅 图中不会。下面是重命名过程: 下面是重新启动命令,其中 cmd 代表 APPE,STOR 或RETR。 下图代表登录过程: 7. 典型 FTP 过程 假设位于 U的用户希望从 S上(下)传文件,通常用户需要使用用户 FTP 进程和 服务器通信, 下面就是一个例子: 用户发出的本地命令 解释 ftp (host) multics 连接到 S的端口 L,建立控制连接 <---- 220 Service ready . 用户名 Doe need password. USER Doe----> <---- 331 用户名正确 口令 PASS 口令----> <---- 230 User logged in. retrieve (local type) ASCII (local pathname) test 1 (for. pathname) test.pl1 User-FTP opens local file in ASCII. RETR test.pl1 ----> <---- 150 文件状态正常,将打开数据连接 服务器于端口 U建立数据连接 文件传输中 <---- 226 关闭数据连接,文件传输正确 type Image TYPE I ----> <---- 200 Command OK store (local type) image (local pathname) file dump (for.pathname) >udd>cn>fd User-FTP opens local file in Image. STOR >udd>cn>fd ----> <---- 550 访问拒绝 中止 QUIT ----> 服务器关闭所有连接 FTP 控制连接通过用户进程端口 U和服务器端口 L建立,这里默认的 L=21。
还剩51页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享pdf获得金币 ] 2 人已下载

下载pdf

pdf贡献者

snjfqqq

贡献于2010-10-25

下载需要 15 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf