GZICP.com   
 
    返回首页
    联系我们
 
 
     

文件传输协议之二

www.gzicp.com   2004年6月21日 14:30:48
 

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初始连接和传输进程,命令应答序列如下面所示,请根据位置注意时差:

     用户-PI - 服务器A        用户-PI - 服务器B
     -----------------        -----------------
     C->A:Connect          C->B:Connect
     C->A:PASV
     A->C:227 Entering Passive Mode.A1,A2,A3,A4,a1,a2
                     C->B:Port A1,A2,A3,A4,a1,a2
                     B->C:200 Okay
     C->A:STOR           C->B:RETR
         B->A:连接到主机A ,端口a

在任何时间,服务器和用户只要有一方关闭连接,另一方就要赶快读取缓冲中的数据,然后也关闭本方的连接。

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

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
    *登录


          1.USER


           230

           530

           500, 501, 421

           331, 332

          2.PASS

           230

           202

           530

           500, 501, 503, 421

           332

          3.ACCT
           
            230

           202

           530

           500, 501, 503, 421

          4.CWD


           250

           500, 501, 502, 421, 530, 550

          5.CDUP


           200

           500, 501, 502, 421, 530, 550

          6.SMNT
     
            202, 250

           500, 501, 502, 421, 530, 550

    *退出登录


          1.REIN


           120

           220

           220

           421

           500, 502

          2.QUIT
   
           221

           500

    *传输参数

          1.PORT

           200

           500, 501, 421, 530

          2.PASV
    
           227

           500, 501, 502, 421, 530

          3.MODE


           200

           500, 501, 504, 421, 530

          4.TYPE

           200

           500, 501, 504, 421, 530

          5.STRU

           200

           500, 501, 504, 421, 530

    *文件操作命令

          1.ALLO

           200

           202

           500, 501, 504, 421, 530

          2.REST

           500, 501, 502, 421, 530

           350

          3.STOR

           125, 150

           (110)

           226, 250

           425, 426, 451, 551, 552

           532, 450, 452, 553

           500, 501, 421, 530

          4.STOU

           125, 150

           (110)

           226, 250

           425, 426, 451, 551, 552

           532, 450, 452, 553

           500, 501, 421, 530

          5.RETR

           125, 150

           (110)

           226, 250

           425, 426, 451

           450, 550

           500, 501, 421, 530

          6.LIST


           125, 150

           226, 250

           425, 426, 451

           450

           500, 501, 502, 421, 530

          7.NLST

           125, 150

           226, 250

           425, 426, 451

           450

           500, 501, 502, 421, 530

          8.APPE
 
           125, 150

           (110)

           226, 250

           425, 426, 451, 551, 552

           532, 450, 550, 452, 553

           500, 501, 502, 421, 530

          9.RNFR

           450, 550

           500, 501, 502, 421, 530

           350

          10.RNTO

           250

           532, 553

           500, 501, 502, 503, 421, 530

          11.DELE

           250

           450, 550

           500, 501, 502, 421, 530

          12.RMD

           250

           500, 501, 502, 421, 530, 550

          13.MKD

           257

           500, 501, 502, 421, 530, 550

          14.PWD

           257

           500, 501, 502, 421, 550

          15.ABOR

           225, 226

           500, 501, 502, 421

    *获得信息命令

          1.SYST

           215

           500, 501, 502, 421

          2.STAT

           211, 212, 213

           450

           500, 501, 502, 421, 530

          3.HELP

           211, 214

           500, 501, 502, 421

    *其它命令

          1.SITE

           200

           202

           500, 501, 530

          2.NOOP

           200

           500 421

6. 状态图

下面是一个简单实现的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 |
         +-----+    +-----+----------------->+-----+ 

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。

 

最新文章
·文件传输协议之二  (2004年06月21日)
·文件传输协议之一  (2004年06月21日)
·VSFTP安全与效能兼备的ftp服务器  (2004年06月21日)
·vsftp配置指南  (2004年06月21日)
·VSFTPD的高手篇  (2004年04月21日)
·VSFTPD的菜鸟篇  (2004年04月21日)





 
 
Copyright © 1999-2005 GZICP.com All Rights Reserved