文件传输协议---FTP

简介

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 未执行请求的操作:文件名不合法
原文地址:https://www.cnblogs.com/chusiyong/p/11393205.html