目录
- 🕒 1. 概述
- 🕒 2. 工作原理
- 🕘 2.1 两个连接
- 🕒 3. 相关命令与处理
- 🕘 3.1 接入命令
- 🕘 3.2 文件管理命令
- 🕘 3.3 数据格式化命令
- 🕘 3.4 端口定义命令
- 🕘 3.5 文件传输命令
- 🕘 3.6 杂项命令
- 🕘 3.7 命令处理——响应
- 🕒 4. 文件传输
- 🕘 4.1 例子
🕒 1. 概述
- 将某台计算机中的文件通过网络传送到可能相距很远的另一台计算机中,是一项基本的网络应用,即文件传送。
- 文件传送协议FTP (File Transfer Protocol)是因特网上使用得最广泛的文件传送协议。
- FTP提供交互式的访问,允许客户指明文件的类型与格式(如指明是否使用ASCII码),并允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口令)。
- FTP屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件。
- RFC 959 很早就成为了因特网的正式标准。
- 在因特网发展的早期阶段,用FTP传送文件约占整个因特网的通信量的三分之一,而由电子邮件和域名系统所产生的通信量还要小于FTP所产生的通信量。只是到了1995年,万维网WWW的通信量才首次超过了FTP。
FTP的常见用途:
- FTP的常见用途是在计算机之间传输文件,尤其是用于批量传输文件。
- FTP的另一个常见用途是让网站设计者将构成网站内容的大量文件批量上传到他们的Web服务器。
🕒 2. 工作原理
🕘 2.1 两个连接
FTP客户和服务器之间要建立以下两个并行的TCP连接:
- 控制连接,在整个会话期间一直保持打开,用于传送FTP相关控制命令。
- 数据连接,用于文件传输,在每次文件传输时才建立,传输结束就关闭。
默认情况下,FTP使用TCP 21
端口进行控制连接,TCP 20
端口进行数据连接。但是,是否使用TCP 20
端口建立数据连接与传输模式有关,主动方式使用TCP 20
端口,被动方式由服务器和客户端自行协商决定。
🕒 3. 相关命令与处理
FTP的命令分为6
组:
🕘 3.1 接入命令
接入命令使用户能够访问远程系统。
命令 | 参数 | 说明 |
---|---|---|
USER | 用户标识符 | 用户信息 |
PASS | 用户口令 | 口令 |
ACCT | 应付费的服务 | 财务信息 |
REIN | 重新初始化 | |
QUIT | 从系统注销 | |
ABOR | 命令异常终止 |
🕘 3.2 文件管理命令
文件管理命令使用户能访问到远程计算机的文件系统。
命令 | 参数 | 说明 |
---|---|---|
CWD | 目录名 | 改变到另一个目录 |
CDUP | 改变到父目录 | |
DELE | 文件名 | 删除文件 |
LIST | 目录名 | 列出子目录或文件 |
NLIST | 目录名 | 列出子目录或无其它属性的文件 |
MKD | 目录名 | 创建新目录 |
PWD | 显示当前目录 | |
RMD | 目录名 | 删除目录 |
RNFR | 文件名(旧文件名) | 标志要重新命名的文件 |
RNTO | 文件名(新文件名) | 重新命名文件 |
SWNT | 文件系统名 | 安装文件系统 |
🕘 3.3 数据格式化命令
数据格式化命令让用户定义数据结构、文件类型以及传输方式。
命令 | 参数 | 说明 |
---|---|---|
TYPE | A(ASCII),E(EBCDIC),I(图像),N(非打印),或T(TELNET) | 定义文件类型 |
STRU | F(文件),R(记录),P(页面) | 定义数据的组织 |
MODE | S(流),B(块),C(压缩) | 定义传输方式 |
RMD | 目录名 | 删除目录 |
RNFR | 文件名(旧文件名) | 标志要重新命名的文件 |
RNTO | 文件名(新文件名) | 重新命名文件 |
SWNT | 文件系统名 | 安装文件系统 |
🕘 3.4 端口定义命令
端口定义命令定义客户端的数据连接使用的端口号。
命令 | 参数 | 说明 |
---|---|---|
PORT | 6个数字的标识符 | 客户选择端口 |
PASV | 服务器选择端口 |
🕘 3.5 文件传输命令
文件传输命令用于控制传输文件。
命令 | 参数 | 说明 |
---|---|---|
RETR | 文件名 | 读取文件:文件从服务器传送到客户 |
STOR | 文件名 | 存储文件:文件从客户传送到服务器 |
APPE | 文件名 | 与STOR类似,但是若文件存在,将数据添加到文件尾部 |
STOU | 文件名 | 与STOR相同,但是文件名在目录中必须唯一 |
ALLO | 文件名 | 在服务器为文件分配存储空间 |
REST | 文件名 | 在指明的数据点给文件标记确定位置 |
STAT | 文件名 | 返回文件的状态 |
🕘 3.6 杂项命令
杂项命令用于将用户要求的信息返回客户端。
命令 | 参数 | 说明 |
---|---|---|
HELP | 询问关于服务器的信息 | |
NOOP | 检查服务器是否工作 | |
SITE | 文件名 | 指明特定场所的命令 |
SYST | 询问服务器使用的操作系统 |
🕘 3.7 命令处理——响应
响应分为两个部分:
- 3位数字的代码:定义代码
- 跟随在代码后的文本:定义所需的参数或额外的解释说明
将3位数字记为xyz
,下面展示每一个数字的意义。
第一个数字定义命令的状态。该位置上可以使用下列5
个数字:
- 1yz(正面初步回答) 表示动作已经开始。服务器在接受命令之前将发送回答。
- 2yz(正面完成回答) 表示动作己经完成。服务器将接受命令。
- 3yz(正面中间回答) 表示命令已经接受,但需要进一步的信息。
- 4yz(过渡负面完成回答) 表示动作没有发生,但差错是暂时的。同样的命令其后可继续发送。
- 5yz(永久负面完成回答) 表示命令没有接受,不能再次发送。
第二个数字定义命令的状态。该位置上可以使用下列6
个数字:
- x0z(语法)
- x1z(信息)
- x2z(连接)
- x3z(鉴别和账号)
- x4z(未指明)
- x5z(文件系统)
第三个数字提供附加信息,下表给出了可能出现的响应简短列表:
代码 | 说明 |
---|---|
—— | 正面初步回答 |
120 | 服务不久即将就绪 |
125 | 数据连接打开;数据传输不久即将开始 |
150 | 文件状态是OK |
—— | 正面完成回答 |
200 | 命令OK |
211 | 系统状态或求助回答 |
212 | 目录状态 |
213 | 文件状态 |
214 | 求助报文 |
215 | 命名系统类型(操作系统) |
220 | 服务就绪 |
221 | 服务关闭 |
225 | 数据连接打开 |
226 | 关闭数据连接 |
227 | 进入被动方式,服务器发送IP地址和端口号 |
230 | 用户登录OK |
250 | 请求文件动作OK |
—— | 正面中间回答 |
331 | 用户名OK:需要口令 |
332 | 需要登录账号 |
350 | 文件动作在进行中:需要更多的信息 |
—— | 过渡负面完成回答 |
425 | 不能打开数据连接 |
426 | 连接关闭:不能识别的命令 |
450 | 未采取文件动作:文件不可用 |
451 | 动作异常终止:本地差错 |
452 | 动作异常终止:存储器不足 |
—— | 永久负面完成回答 |
500 | 语法差错:不能识别的命令 |
501 | 参数或变量的语法差错 |
502 | 命令未实现 |
503 | 不良命令序列 |
504 | 命令参数未实现 |
530 | 用户未登录 |
532 | 存储文件需要账号 |
550 | 动作未完成:文件不可用 |
552 | 请求的动作异常终止:超过分配的存储器空间 |
553 | 未采取请求动作:文件名不允许 |
🕒 4. 文件传输
FTP的文件传输仅表示下列三件事件之一:
- 从服务器把文件复制到客户(下载),称为读取文件。在RETR命令的监督下完成。
- 从客户把文件复制到服务器(上传),称为存储文件。在STOR命令的监督下完成。
- 从服务器向客户发送目录列表或文件名。在LIST命令的监督下完成。应注意,FTP把目录或文件名列表当作文件,在数据连接上发送。
🕘 4.1 例子
🔎 在 VMware 虚拟机中搭建 FTP 服务器 (详细)
注:PORT 192,168,26,1,36,123,该命令是客户端告知服务器,客户端的数据连接端口号为36*256+123=9339
由于虚拟机服务器网络配置为NAT,可能导致显示临时端口号与计算值不一致的情况。
❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页