http://www.flyingporket.com/blog/petmastiff/archives/cat_1002934762.html
文件传输协议(File Transfer Protocol, FTP)是TCP/IP提供的用来将文件从一个主机拷贝到另一个主机的标准机制。
FTP需要在主机之间建立两个连接,一个用来传输数据,另一个用于控制信息(命令和响应)。命令和数据的分离使得FTP更有效率。控制连接使用非常简单的 通信规则,一次只需传送一行命令或者一行响应,数据连接则复杂得多。控制连接在整个FTP会话过程中保持连接,数据连接在每次文件传输时打开和关闭。 FTP使用两个知名TCP端口:端口21用于控制连接,端口20用于数据连接。
命令
由FTP客户端发送给FTP服务器的指令,ASCII码大写形式,某些命令包含参数,命令由回车符和换行符结束。命令可以分为6类:访问命令、文件管理命令、数据格式命令、端口定义命令、文件传输命令、杂项命令。
访问命令
命令 | 参数 | 描述 |
USER | User ID | 用户名 |
PASS | User password | 密码 |
ACCT | Account to be charged | 收费账号 |
REIN |
| 重新初始化 |
QUIT |
| 从系统注销 |
ABOR |
| 退出上一命令 |
文件管理命令
命令 | 参数 | 描述 |
CWD | Directory name | 切换目录 |
CDUP |
| 切换到父目录 |
DELE | File name | 删除文件 |
LIST | Directory name | 列举子目录或文件 |
NLST | Directory name | 列举子目录或文件 |
MKD | Directory name | 创建目录 |
PWD |
| 显示当前路径 |
RMD | Directory name | 删除目录 |
RNFR | File name (old ) | 注明文件将被改名 |
RNTO | File name (new) | 重命名文件 |
SMNT | File system name | Mount一个文件系统 |
数据格式命令
命令 | 参数 | 描述 |
TYPE | A (ASCII), E (EBCDIC), I (Image), N (Nonprint), T (TELNET) | 定义文件类型以及打印格式 |
STRU | F (File), R (Record), P (Page) | 定义数据的组织形式 |
MODE | S (Stream), B (Block), C (Compressed) | 定义传输模式 |
端口定义命令
命令 | 参数 | 描述 |
PORT | 6-Digit identifier | 客户端选择端口,格式为a,b,c,d,e,f,其中前4位为IP地址,后两位为端口,计算公式:端口= e×256 + f |
PASV |
| 服务器选择端口 |
文件传输命令
命令 | 参数 | 描述 |
RETR | File name(s) | 获取文件 |
STOR | File name(s) | 存储文件 |
APPE | File name(s) | 与STOR类似,如果文件存在,数据附加在文件之后 |
STOU | File name | 与STOR类似,文件必须唯一,否则文件不被重写 |
ALLO | File name(s) | 在服务器上分配文件的空间 |
REST | File name | 指明文件标志 |
STAT | File name(s) | 返回文件状态 |
杂项命令
命令 | 参数 | 描述 |
HELP |
| 定义文件类型以及打印格式 |
NOOP |
| 检查Server是否存活 |
SITE | Commands | 确定站点相关命令 |
响应
每个FTP命令至少产生一个响应。一个响应有两部分组成:一个三位数字xyz和文本。数字部分定义代码;文本部分定义所需的参数或者解释。
首位数字
首位数字定义命令的状态。
1yz (positive preliminary reply) 动作已经启动。服务器在接受其他命令前发送回应(reply)。
2yz (positive completion reply) 动作已完成。服务器可以接受其他命令。
3yz (positive intermediate reply) 命令已完成,但是需要更多的信息。
4yz (transient negative completion reply) 动作没有发生,但是错误是暂时的。随后可以继续发送该命令。
5yz (permanent negative completion reply) 命令未被接受,而且不应重试。
第二位数字
第二位数字同样定义命令的状态。
x0z (syntax)
x1z (information)
x2z (connections)
x3z (authentication and accounting)
x4z(unspecified)
x5z (file system)
第三位数字
第三位数字提供附加信息
下面是使用FTP获取服务器目录文件列表的示例
