RFC0959---FTP协议

FTP(File Transfer Protocol)旨在提高文件的共享性和透明性,适用于程序之间的数据传输。它包括控制连接和数据连接,其中控制连接用于命令和响应,数据连接用于双向数据传输。FTP支持ASCII、EBCDIC、图象等多种数据类型,以及文件、记录和页三种文件结构。数据传输模式包括流模式、块模式,每种模式都有其特定的表示和结束标志。FTP可以用于在不同主机间传输文件,需要处理不同系统间的数据转换和存储差异。
摘要由CSDN通过智能技术生成

文件传输协议(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之间传送。下面就是一个例子:

     
                    Control            ------------          Control
                    ---------->         | User-FTP |<-----------
                    |                      | User-PI  |                 |
                    |                      |   "C"       |                 |
                    V                      ------------                 V
              --------------                                             --------------
            | Server-FTP |   Data Connection      | Server-FTP |
            |    "A"            |<---------------------->     |       "B"         |
            -------------- Port (A)      Port (B) -------------- 
  
  
 
协议要求数据传输在处理时打开控制连接。在完成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标准,要在行结束处使用<CRLF>序列。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:移动至下一页;+:不移动
 
打印机必须能够决定结构体的结束。如果文件本身有记录结构就没有问题,如果没有,<C
RLF>用于区别打印行,但这些格式标记已经由ASA控制字符使用了。
 
3.1.2. 数据结构
 
除了有不同的数据类型外,FTP还允许有不同的文件结构,下面是三种文件结构:文件式结
构:文件中没有内部结构,文件被看作是二进制流;记录结构:文件是由一系列记录组成
的;页结构:文件是由不同的索引页组成的。
 
如果未使用STRU命令,文件结构是默认值。文件的结构会影响传输模型,存储和数据表示
。文件本来的属性和保存它的主机有关,不同的机器会以自己的方式保存文件。在不同主
机间传送文件时必须使主机能够识别相互的表示。有些主机上的文件是面向字节的,有些
是面向记录的,在传送时就会出现问题。那就要在接收方进行内部转换。在进行转换的时
候,需要区别记录的边界,在ASCII中使用<CRLF>,在EBCDIC中使用<NL>作为分隔符。采用
这种实现方法的必须保证转换是可逆的。
 
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有默认数据端口。用户进程默
认数据端口和控制连接端口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值