-
FTP
协议概念:
FTP
是
TCP/IP
协议组中的协议之一,是英文
File Transfer
Protocol
的缩写。
该协议是
Internet
文件传送的基础,它由一系列规格说明文档组成,目标是提高文件
的共享
性,
提
供非直接使用远程计算机,
使存储介质对用户透明和可靠高效地传送数据。
简单的说,
FTP
就
是完成两台计算机之间的拷贝,<
/p>
从远程计算机拷贝文件至自己的计算机上,
称之为“下
载
(
download
)”文件。
若将文件从自己计算机中拷贝至远程计算机上,则称之为“上载
(
upload
)”
文件。在
TCP/IP
协议中,
FTP
标准命令
T
CP
端口号为
21
,
< br>Port
方式数据端口为
20
。
FTP
的
目标是:
1
)促进程序
/
数据文件的共享;
2
)鼓励(通过程序)使用远程计
算机
3
)使用户不必面对不同主机上不同文件系统的差异;
p>
4
)对数据进行高效可靠的传输。
FTP<
/p>
尽管可以直接在终端上应用,但它主要被设计通过程序来使用。
数据由发送端主机存储设备传输到接收端主机的存储设备上。由于两个系统的数据存
p>
储形式不同,
经常需要将数据转换形式。
例
如,
NVT-ASCII
在不同的系统中有不同的存储表
p>
示。
DEC TOP-20
一般用
5
个
7
位的
ASCII
字符存储
NVT-
ASCII
,左对齐成
36
位的字。
IBMMainframe
用
8
位
EBCDIC
编码存储
NVT-
ASCII
。
Multics
将
NVT-ASCII
存储成
4
个
9
位
字符
组成的字。
当在不同的系统中传输字符时理应将其转换成标准的
NVT-ASCII
表示。
发送
和接
收端则应相应地在标准表示法和内部表示法间转换。
当传输二进制数据时表示法的另一<
/p>
个问题就是不同主机有不同的字长度。
并不总是明确发送端怎样发
送数据以及接收端怎样接
收数据。例如,当从一个
32
位字长的系统传输
32
位字节到一个
36
位字长的系统时,
应该
(为了高效和实用)
在后一个系统中将
32
位字节在
36
位字中右对
齐。
无论哪种情况,
用户
都应该可以选
择数据表示形式和传输功能。应该注意
FTP
提供了非常有限
的数据表示形式。
传输这些表示形式之外的数据时用户应该自行转换。
< br>
协议
RFC
中文文档:
一、传输模式
1.1
流模式
数据以字节流传输。对表示类型没有限制;可以使用记录结构。
在记录结构文件中,
EOR
和
EOF
将分别用两个字节的控制码
表示。第一个字节都是同样的
escape
字符。第二个字节中,
EOR
将低位置一,其他位置零;
EOF
则
是将第二低位置一;
也就是这个字节对于
EOR
来说是
1
,
对于
EOF
来说是
2
。
p>
EOR
和
EOF
可能在传输结束时通过使
最低两置一来同时指定
(就是值
p>
3
)
。
如果想发送
escape
字符,
要在第二个字节
再重复一次。
如果结构是文件结构,
则使用关闭主机连接来指示
EOF
,
传输的所有数据字节就是原始
字节。
1.2
块模式
文件以连续的带有数据头的数据块来传输。
数据头包括一个计数域和描述码。
计数域指
示了数据块整个长度,
由此可以算出下
一数据块的开始位置
(没有填充位)
。
描述码定义了:
文件最后一块(
EOF
),记录最后块(
EOR
),重开始标记(参见错误恢复和重开
始章)或者
怀疑数据
(也就是被怀疑在传输中可能不可靠的数据
)
。
最后的描述符不是
FTP
错误控制的
一部分。
它用来在站点间交换指定
类型的数据
(比如地震或天气数据)
而且简略本地错误
(比
如磁带读错误)
。记录结构可以在这种模式
下使用,而且可以用任何表示类型。头包括
3
个
字节。在这
24
位的头信息中,低
16
位表示字节记数,高
8
位表示描述符。
二、文件传送功能
下面的命令表示访问控制标识符(括号中表示命令代码)
p>
用户名(
USER
)
这个命令的参数域是一个用来标识用户的
Telnet <
/p>
字符串。用户识别对于服务器控制文
件系统存取权限是必需的。这
个命令通常是控制连接建立后从用户端发送的第一条命令
(
一<
/p>
些服务器可能需要保证这一点
)
。
一些服务器可能还需要附加的识别信息如密码或帐号命令。
为了改变控
制权限和
/
或帐户信息,服务器可能在任何时候都允许接受一个
新的
USER
命令,
来更换存取权限
或帐户信息。
产生的效果是刷新早先登录的用户名、
密码和帐户
信息,
并重
新开始一个登录过程。
所有
的传输参数不发生变化,
并且所有正在传输中的文件传输过程均
在原来的访问控制权限下完成。
密码(
PASS
)
这个命令的参数域是一个用来指定用户密码的
Telnet <
/p>
字符串。这个命令必须紧跟在用
户名命令之后,
< br>在某些站点上,
它用来完成用户访问权限识别。因为密码信息非常敏感,一
般应该使用掩码代替或者禁止回显。
显然服务器没有安全的办法做到这
一点,
所以隐藏敏感
的密码信息就成了用户
FTP
进程的责任。
帐户(<
/p>
ACCT
)
这个命令的参数域是一个用来识别用户帐户的
Telnet <
/p>
字符串。这个命令不需要和
USER
命令
相关,
某些站点可能需要一个帐户用来登录,
另一些站点仅用于
特殊访问权限,
比如存
储文件。
后一种
情况下这个命令可能在任何时候收到。
有一些响应代码用来自动地区分这些
情况:当登录过程必须要求帐户信息的时候,
PASS
命令成功的响应代码是
332
。相应,如果
< br>登录过程不要求帐户信息时,
PASS
命令成功的响应
代码是
230
;
如果帐户信息需要在随
后的
对话命令中给出,服务器应该根据是保留(等侍收到
ACC
T
命令)还是放弃命令来相应的返
回
332
或
532
。
改变工作目录(
CWD
)
这个命令允许用户在不改变登录用户和帐户信息的情况下改变工作目录或数
据集。
传输
参数保持不变。
这个命令的
参数是一个路径名,
用来指定相应的目录或者其他系统上的文件
组名。
返回上层目录(
CDUP
p>
)
这个命令是
CWD
命令的特例,因为
在不同的操作系统下表达父目录可能有不同的语法,
所以可以用这个命令简化目录树的传
输实现。
它的响应代码应该和
CWD
的响应代码相同。
更
多信息参看附录
I
I
。
结构装备(
SMNT
)
这个命令允许用户在
不改变用户和帐户信息的情况下装备一个不同的文件系统数据结
构。
传置传输参数不会改变。
它的参数是一个用来标识目录或者其他系统中依赖文件组的
路
径名。
重新初始化(
REIN
)
此命令除允许
当前正在传输过程完成外,终止一个用户,刷新所有的
I/O
和帐户信息。
所有参数重设为默认值,
并保持控制连接。
此时等同于控制连接刚刚建立的状态。
这条命令
之后可能需要
USER
命令。
注销
(QUIT)
此命令终止一个用
户,
并且当没有文件正在传输的话,
服务器将关闭控制连接。<
/p>
如果当
前有文件正在传输,
连接会保持并
等待回应,
之后服务器将关闭连接。
如果用户进程想以不
同的用户名传输文件,而不想关闭然后再重建立连接的情况下,应该使用
REIN
命令而不是
QUIT
。
控制连接的意外关闭将会导致服务器产生等同于放弃(
ABOR
)和注销(
QUIT
)动作。
三、
FTP
服务命令
FTP
服务命令定义了用户请求传送文件或者文件系统的功能。
FTP
服务命令的参数一般
是一个路径。
路径
的语法必须符合服务器站点的惯例
(尽量用默认标准)
和控制连
接的语言
习惯。
建议的默认参数是使用最后一个设备,
目录或文件名,
或者本地用户的默认标准。除
<
/p>
from
命令后面必须紧跟
to
命令以及
restart
命令必须紧跟随中断服务命
令。
p>
追加
(
包括创建
)
(APPE)
这个命令引起服务
DTP
接受从数据连接传送过来的数据并存储在服务器端的一个文件
里。
如果指定的文件在服务器端已经存在,
则这个数据会附加到文件的后面;
否则服务器端
会创建这个文件。
分配
(ALLO)
一些服务器可能要
求用这个命令来保留足够的空间来容纳新文件。
其参数是一个十进制整数,
用来指定保留给文件存储用的字节数(用逻辑字节长度
)
。对于用记录或者而结构传送的文
件而言,还需要有最大结构或页的大小(使用逻辑
字节)
,这个值在这个命令的第二个参数
域用十进制整数指定。
第二个参数是可选的,但当它存在的时候应该用三个
Telne
字符
和第一个参数分开。这个命令之后应该
是
STOR
或者
APPE
命令。在那些不需要预
先知道文件最大值的服务器上,
< br>这个命令应该被作为
NOOP(
无操作
< br>)
对待,
在那些只对记录或
页最
大值感兴趣的服务器上应该忽略第一个参数。
重新开始
(REST)
这个命令的参
数域指定了需要重新开始传输的文件的位置标记。
这个命令不会引起文件
的传输,只是忽略文件中指定标记点前的数据。
重命
名开始(
RNFR
)
这个命令指定了需要重新命名的文件的原始路径名。后面必须马上接着“重命名为”命令,
来指定新的文件路径
重命名为(
< br>RNTO
)
这个命令为在
p>
“重命名开始”
命令中指定的文件指定新的路径。
< br>这两个命令一起为文件
重新命名。
放弃(
< br>ABOR
)
该命令告诉服务器放弃先前的
FTP
服务命令和相关的传输的数据。
放弃命令也许需要引
起服务器的
“特别注意”
(参见
FTP
命令部分
),使服务器强制识别。当前一个命令(包括
数据传输)完成时,将不会产生动作。服务
器不会关闭控制连接,但是数据连接必须关闭。
服务器接收这个命令时可能处在两种状态
:
(1)FTP
服务命令已经完成,
或者
(2)FTP
服务命
令还在执行中。
第一种情况,服务器关闭数据连接(如果数据连接是打开的)
回应
226
代码,表示放弃命令
已经成功处理。
第二种情况,服务器放弃正在进行的
FTP
服务,关闭数据连接,返回
426
响
应代码,表示请
求服务请求异常终止。然后服务器发送
226
响应代码,表示放弃命令成功处理。
删除
(DELE)
这个命令在服务器
端删除指定的文件。
如果需要额外的保护,
应该由用户
FTP
进程提供。
删除目录(
RMD
)
这个命令移除指定
路径下的目录
(如果是绝对路径)
,
或
者是当前工作目录的子目录
(如
果是相对路径)。参看附录
II
新建
目录(
MKD
)
该命令在指定的路径下新建一个目录
(如果是绝对路径)
,
或者在当前工作目录下建子目录
(如果路径是相对的)。
打印工作目录(
PWD
)
该命令返回一个当前的工作目录名。
列表(
LIST
)
< br>该命令从服务器端发送一个列表到被动的
DTP
。
如果路径名指定了目录或者别的文件组,
服务器应该传送指定目录下的
文件列表。
如果路径名指定了文件,
服务器应当传送这个文件<
/p>
的信息。
没有参数,
意味着用户的当前工
作目录或者缺省目录。
数据通过数据连接以
ASCII
或
EBCDIC
类型传输。(用户必须确定类型是
ASCII
或者
EBCDIC
)。因为不同系统间的文件信
息差别很大,这个信息可能不易被程序自动使用,但可能对于用户来说是有用处
的。
名字列表(
NLST
)
该命令从
服务器端传送目录列表到用户端。
路径名应该指定一个目录名或者其他系统文
件组描述符;
无参数意味着当前目录。
服务器只返
回文件的名字组成的字节流,
不包括其他
的信息。数据将通过数
据连接以
ASCII
或者
EBCDIC
类型传输,每个路
径名字符串由
或
分割。
(用户仍必须保证类型使用正确)。
这个命令的响应信息将可能被用于程序对
文件的自动处理。例如,多线程下载的实现
。
站点参数(
SITE
)
服务器使用这个命令,
提供本系统可能对文件传输有帮助的特殊服务。
在协议中它的用
处不是很普遍。服务的种类和语法规约可以在
HELP SITE
命令的响应中确定。
系统(
SYST
)
该命令来
得到服务器端操作系统的类型。响应的第一个词应该是
Assigned
Numbers
文
档。
状态(
STAT
)
p>
该命令应该通过控制连接以响应码的形式返回状态信息。
此命令可能
在文件传输过程中
发出(与
Telnet
IP
和同步信号一起,参见
FTP
命令道听部分),此时服务器将返回正在传
输的状态。
或者这个命令也可能在两个文件传输过程之间发出,
这种情况下,
命令可能将有
一个参数域。
如果参数指定了一
个路径名,
则命令将与列表命令类似,
只是数据由控制连接
p>
传输。
如果给出了部分路径,
服务器可能响
应指定的路径下的文件名列表或者相关属性。
如
果没有提供参数
,
将返回服务器
FTP
进程一般的状
态信息,
其中应该包括所有传输参数的当
前值和连接的状态。<
/p>
帮助(
HELP
)
该命令使服务器通过控制连接传送关于具体实现状态的帮
助信息给用户。
该命令可以有
参数
(例
如,
命令的名字)
返回更加具体的信息。
回应代码是
211
或者
214
p>
。
建议在输入
USER
命令前允许
HELP
。服务器可以用这个响应指定站点特定
的参数,例如,在
HELP
SITE
响应中
指定。
空操作(
NOOP
)
该命令不应影响任何参数或者之前发送的命令。
该命令不指定任何动作,
p>
只是要求服务
器返回
OK
响应。
文件传输协议在控制连接上的所有通信都遵守
T
elnet
协议。
因为
Telnet
传
输使用的语言可能是一个可协商的选项,下两部分提到的所有
参考信息将使用“
Telnet
语
言”和相应的“
Telnet
行尾符”。当然可以将这些转换成
NVT-ASCII
和
。没有其它
< br>的
Telnet
协议规范被引用。
FTP
命令分为访问控制命令、
数据传输参数命令、
F
TP
服务请求命令三种。
某些命令不
能同时监控控制连接和数据连接,
此时就要发出一些特殊的动作来引起服务器的注意。<
/p>
下面
的指令格式是试验性建议:
1.
用户系统在
Telnet
流中插入
Telnet
中断过程
(
Interrupt Process-
IP
)信号
2.
用户系统发出
Telnet
p>
“同步”(
Synch
)信号
3.
用户系统在
Telnet
流中插入命令(例如,
ABOR
)
4.
服务器
PI
,在接收到
后,扫描
telnet
流,寻找
FTP
命令
五、
FTP
响应
文件
传输协议命令的响应,
用来确保在文件传输过程中的请求和正在执行的动作保持一
致,
保证用户程序总是可以得到服务器的状态信息。
< br>每一个命令必须产生至少一个响应,
也
可能产生多个响应
;
多重的响应必须是可以简单区分的。
另外,
< br>一些命令是有一定顺序的组
合。比如
USER
、
PASS
和
ACCT
,或者
RNFR
和
< br>RNTO
。此时的响应表示一种中间状态,说明前面
的命
令是成功的。顺序组合中出现任何错误都会导致需要从头开始整个命令序列。命令
-
p>
响
应序列的细节,将由下面一组状态图表明确表示。
FTP
响应由
3
位数字组成
(以
3
< br>个数字字符传递)
后面跟着一些文本。
数字用来自动的<
/p>
判断当前的状态,文本内容提供给人类用户。三位数字应该包含足够的信息,使用户
PI
不
需要检查文本内容,
而将其忽略或返回给用户。
文本内容可能是与特定服务器相关的,
所以
每一个响应的文本内容很可能不同。
响应包含的
3
位数字,
后面跟着空格
,
然后是一行
文
本(已指定一行最大的长度),以
Telnet
行末符结尾。
有可能出现文本长度大于一行的
情况。
在这种情况下,
文本全文必须在两端加以标识,
使用户进程知道什么时候应该停止读
p>
取响应(也就是,停止从控制连接读取输入),去做别的事情。这要求第一行文本需要一种<
/p>
特殊的格式,
来标识传来的文本内容有多行,
并在文本最后一行指明这是最后。
必需要包含
适当的响应代
码,
以指明当前文本的状态。
为了满足这些功能,
第一行和最后一行的代码应
该是一样的。因此,多行回应的格式是:第一行以
正常的响应代码开始,后接连字符“
-
”
(也就是那个减号)
后面跟着文本。
最后一行需要以相同的代
码开始,
后面跟空格
分的
p>
可选文本,然后是
Telnet
行末符用
户进程只需要简单地寻找一行开始时后面跟随(空格)
的同响应代码,
< br>并忽略掉中间的文本。
如果中间文本的某一行首出现了
3
位数字,
服务器必
须在前面填充,以避
免混淆。添加“人工的”第一行和最后一行标志的这种方案,允许使用
标准系统例行程序
产生响应信息(例如,产生
STAT
响应)。少数情况下,如
果例行程序必
须在某一行行首生成
3
位数字后跟空格,
文本的每一行行首应该填充一些空文本,
例如
空格。
这个方案假定多行的响应不能被嵌套。
3
位数字的每一位都有特定的意义。
允许用户进程将
复杂的响
应简化。第一位数字标识响应是好,坏或者未完成。
(参见状态图),简单的用户
进程可以通过检查第一位数字,决定它的下一个动作(依计划处理,重试,放弃等等)。用
p>
户进程如果希望知道大概是发生了什么错误(比如,文件系统错误,语法错误),可以通过<
/p>
检查第二位数字来完成。
第三位数字指示信息顺序是否有误
(例如,
RNTO
前没有
RNFR
命令)
。
响应的第一位数字可能有以下五个值:
1yz
,预备状态
< br>请求的动作已经启动;在下一个新命令之前,
期望一个回应。
(用户进程在接收到完成
响应前就发送另一条命令是违返协议的。但服务器
FTP
进程在处理前面命令的过程中应该
将
后续收到的命令存入队列。
)
这种类型的响应用来表明命令已被
接受,
对于不能同时监视
数据和控制
连接的用户进程来说,它可能要开始关注数据的连接了。服务器
FTP
进程最多
每个命令发送一个
1yz
代码。
2yz
,完成状态
请求动作被成功的完成。一个新的请求可以开始。
3yz
,中间状态
< br>命令被接受,
但是请求动作暂时没有被执行,
等侍收到进
一步的信息。
用户应该发送另
一个命令来指定这个信息。这个回应用在命令组合中。
4yz
,暂时拒绝状态
命令没有被接受,
请求动作没有发生,
但是这个错误
状态是暂时的,
动作可以被再次请
求
。用户应该重新回到命令队列的开始。说明“暂时”的具体意思是很困难的,尤其在两个
截然不同的站点
(服务器和用户进程)
间要达成解释的一致更是不易。
每个
4yz
号响应可能
都有一个稍不同的时间值
,
但总体思想都是鼓励用户进程再一次重试。
判断一个响应应该
属
于
4yz
号还是
5yz
号的一个规则是看这个
命令是否可以不加修改并在相同的用户、
服务器状
态下(比如,命令使用同样的拼写使用同样的参数;用户不改变文件访问权限;服务器不产
生新的实现。)再次重复。
5yz,
永久拒绝状态
命令不被接受,
请求动作不会发生。
用户进程不能重
复同样的请求
(包括同样的命令顺
序)。一些“永久的”错误状
态可以被修正,因此人类用户也许希望控制用户进程在将来的
某点上重新开始命令队列。
(比如在拼写改变之后,或目录状态改变之后。)
第三位数字
为第二位数字指定的状态提供了更详细的意义。下面的响应列表会说明这一点。
注意,<
/p>
每一个响应的对应文本只是推荐的,而非强制性的,可依照相应的命令而更改。
另一
方面,
响应代码,必须严格的遵守最后部分的
规范,也就是说,服务器实现不应该为与上面
所描述的只有微小区别的状态发明新的代码
,
而应该使用已经定义的代码。
类似
T
YPE
或
ALLO
这样的成功执行也不会给用户进程新信息的命令将产生
200
号响应。
如果命令因为与本计算
机系统
无关而不必被服务器
FTP
进程支持的,
例如
ALLO
在
TOPS20
站点上,
应该回复一个完
成状态的响应,
来通知用户进程可
以继续它的动作请求。
202
号响应用来处理这种情况,
p>
例
如,响应文本为“
No storage
allocation necessary
”(无需分配存储)。另外,如果,
如果请求了一个并没有被实现的命令,将返回
502
< br>。
504
,
表明实现了此命令,
但是请求的参
数并未被实现。
-
-
-
-
-
-
-
-
-
上一篇:受限空间考核试题
下一篇:新概念第一册单词听写表(中英文)教程文件