简介
FTP是File Transfer Protocol(文件传输协议)的英文简称,建立在TCP协议之上,用于Internet上文件的双向传输。同时,它也是一个应用程序。用户可以通过它把自己的PC机与世界各地所有运行FTP协议的服务器相连,访问服务器上的大量程序和信息。FTP的主要作用是:让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)察看远程计算机有哪些文件,然后把文件从远程计算机上拷到本地计算机,或把本地计算机的文件送到远程计算机去。
几款开源的FTP服务端软件
- Tinyftpd是用C语言实现的简单、快速、高效的Linux FTP服务器,只需简单的配置,就可快速的将主机变成高效的FTP服务器。下载地址:https://github.com/vbirds/Tinyftp
- ftpd是一款功能强大、性能稳定、安全可靠、使用简单等优点,并能够进行web管理的ftp server软件。直接百度就可以下载,可以交叉编译到单板上。
端口
FTP协议主要使用的端口有两个,控制端口21,数据端口20,21端口主要用于传输控制命令,20端口主要用于传输数据。
传输格式
主要使用的传输格式和TFTP协议类似,二进制传输格式和文件传输格式,默认是二进制传输格式。
传输模式
传输模式主要分为两种,主动模式和被动模式,主动模式是在进行数据连接时,服务端主动连接客户端;被动模式是在进行数据连接时,客户端主动连接服务端。在客户端有防火墙的情况下,建议使用被动模式,因为在主动模式下,服务端连接客户端时,由于连接的客户端端口大于1024,有可能被客户端的防火墙挡住,导致连接失败。
协议格式
FTP的控制帧格式由一段文本结构组成,一般结构如下:命令 + 空格 + 内容 + 。根据命令的不同,报文中的内容字段也有细微的区别,下面介绍一些常用的命令及其格式:
登录类:
- USER 账号 登录账号
- PASS 密码 登录密码
- REIN 想重新登录,连接不会关闭,下一条命令USER 可重新连接
- QUIT 退出
建立文件传输套接字通信类
- PASV 被动模式,服务端会回复一个IP 地址和端口,然后你再连接.(一般使用被动模式)
- PORT 表示IP 端口的特殊格式 主动模式,让服务端主动来连接你的文件监听套接字
操作文件类
- STOR 文件名 上传文件
- APPE 文件名 上传文件,如果文件名已存在,把数据插入尾部
- DELE 文件名 删除指定文件
- REST 字节个数 跳过字节数,短点续传,下载文件前使用,使RETR 命令仅下载偏移后的部分
- RETR 文件名 下载文件
- ABOR 放弃传输一个文件,将关闭文件套接字通信
- CWD 目录名 改变当前目录到指定目录
- CDUP 返回上一次目录,当到根目录时,不变
- LIST 显示当前目录下的文件,包括长度,文件类型(如目录)与权限(表示类型:drwxr-xr-x)
- LIST 目录名 显示指定目录下的文件,包括长度,文件类型(如目录)与权限(表示类
- 型:drwxr-xr-x)
- MKD 目录名 创建一个目录
- PWD 显示当前目录的路径
- RMD 目录名 删除目录
- RNFR 文件或目录名 将某文件或目录重命名,接下来要使用RNTO 指定新名称
- RNTO 文件或目录名 重命名为....
- NLST 仅显示当前目录下的文件,以 表示下一个
- NLST 目录 仅显示指定目录下的文件,以 表示下一个
模式与类型
- TYPE 字符
选择传输类型
- A 为文本模式
- I 为二进制模式
- E 为EBCDIC
- N 为Nonprint 非打印模式
- T 为Telnet 格式控制符
参数信息
- SYST 获取服务端系统信息(NT 或Unix)
- STAT 文件或文件夹 获取相关信息
其他不常用的命令
- ACCT 用户帐号 发送PASS 命令并接收到332 代码之后才应发送
- SMNT 另一个文件数据系统的路径 允许用户装配另一个文件系统的数据结构而无需改变登录
- MODE 字符 指定传输类型:默认为流模式(S 为流)(B 为块)(C 为经过压缩)
- STRU 字符 指定结构类型:F 为文件结构(默认值,就是流式传输)
- ALLO 逻辑字节数 上传文件前,使用此命令申请内存
- NOOP 测试通信
- HELP 帮助,会列出有效命令
FTP错误码
错误一般是3个数字,2开头的数字一般表示成功,3开头的数字一般表示权限问题,4开头的数字一般表示文件问题,5开头的数组一般表示服务器问题,具体错误码的含义如下:
- 150 文件状态良好,打开数据连接
- 200 命令成功
- 212 目录状态
- 213 文件状态
- 110 重新启动标记应答
- 500 格式错误,命令不可识别
- 501 参数语法错误
- 502 命令未实现
- 120 在X 分钟内准备好
- 125 连接打开准备传送
- 214 帮助信息,信息仅对人类用户有用
- 215 名字系统类型
- 220 对新用户服务准备好
- 221 服务关闭控制连接,可以退出登录
- 202 命令未实现
- 211 系统状态或系统帮助响应
- 225 数据连接打开,无传输正在进行
- 226 关闭数据连接,请求的文件操作成功
- 227 进入被动模式
- 230 用户登录
- 331 用户名正确,需要口令
- 332 登录时需要帐户信息
- 350 请求的文件操作需要进一步命令
- 421 连接用户过多
- 425 不能打开数据连接
- 426 关闭连接,中止传输
- 450 请求的文件操作未执行
- 451 中止请求的操作:有本地错误
- 452 未执行请求的操作:系统存储空间不足
- 250 请求的文件操作完成
- 257 创建"PATHNAME"
- 503 命令顺序错误
- 504 此参数下的命令功能未实现
- 530 账号或密码错误
- 532 存储文件需要帐户信息
- 550 未执行请求的操作
- 551 请求操作中止:页类型未知
- 552 请求的文件操作中止,存储分配溢出
- 553 未执行请求的操作:文件名不合法