下面是一个简单实现的FTP的状态图,只用到响应码的首位。对于所有命令或命令序列有三种可能性:成功(S),失败(F)或错误(E)。在状态图中B代表开始,W代表等待响应。下面我们给出一个总图,总图可以包括的命令有:
ABOR,ALLO,DELE,CWD,CDUP,SMNT,HELP,MODE,NOOP,PASV,QUIT,SITE,PORT,SYST,STAT,RMD,MKD,PWD,STRU和TYPE
1,3 +-----+
--------------->| E |
| +-----+
|
+-----+ cmd +-----+ 2 +-----+
| B |------------>| W |------------>| S |
+-----+ +-----+ +-----+
|
| 4,5 +-----+
--------------->| F |
+-----+
而下图可以包括的命令有:APPE,LIST,NLST,REIN,RETR,STOR和STOU。
3 +-----+
--------------->| E |
| +-----+
|
+-----+ cmd +-----+ 2 +-----+
| B |------------>| W |------------>| S |
+-----+ ----> +-----+ +-----+
| | |
| | | 4,5 +-----+
| | --------------->| F |
| 1 | +-----+
-------
第一幅图和第二幅图差别不大,第一幅图中如果出现了100系列响应会是错误,而在第二幅图中不会。下面是重命名过程:
+-----+ RNFR +-----+ 1,2 +-----+
| B |------------>| W |------------->| E |
+-----+ +-----+ ---->+-----+
| | |
3 | | 4,5 |
---------------- ------- |
| | | +-----+
| ----------------->| S |
| | 1,3 | | +-----+
| 2 | -----------
| | | |
V | | |
+-----+ RNTO +-----+ 4,5 -------->+-----+
| |---------->| W |------------->| F |
+-----+ +-----+ +-----+
下面是重新启动命令,其中cmd代表APPE,STOR或RETR。
+-----+ REST +-----+ 1,2 +-----+
| B |------------>| W |------------->| E |
+-----+ +-----+ ---->+-----+
| | |
3 | | 4,5 |
---------------- ------- |
| | | +-----+
| ----------------->| S |
| | 3 | | +-----+
| 2 | -----------
| | | |
V | | |
+-----+ cmd +-----+ 4,5 -------->+-----+
| |---------->| W |------------->| F |
+-----+ ---->+-----+ +-----+
| |
| 1 |
--------
下图代表登录过程:
1
+-----+ USER +-----+-------------->+-----+
| B |------------>| W | 2 ----->| E |
+-----+ +-----+------- | --->+-----+
| | | | |
3 | | 4,5 | | |
------------------- ------- | | |
| | | | |
| | | | |
| ------------ |
| 1| | | |
V | | | |
+-----+ PASS +-----+ 2 | -------->+-----+
| |------------->| W |-------------->| S |
+-----+ +-----+ ------------>+-----+
| | | | |
3 | |4,5| | |
--------------- ---------- |
| | | | |
| | | | |
| -----------------
| 1,3| | | |
V | 2 | | |
+-----+ ACCT +-----+-- | ---------->+-----+
| |------>| W | 4,5 ------------>| F |
+-----+ +-----+----------------->+-----+
APPE <文件名>
让服务器准备接收一个文件并把这些数据附加到指定的文件中,如果指定的文件不
存在就创建它。服务器会响应:125->数据连接已打开,传输启动;150->准备打开
数据连接;226->关闭数据连接,操作已成功;250->已完成;421->服务不可用;
425->无法打开数据连接;450、532、550、553->无法执行。
STOR <文件名> ;让服务器接收来自数据连接的文件,响应同APPE。
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。