FTP协议的工作流程
FTP 与大多数 Internet 服务一样,使用的也是“客户端/服务器”模式。
用户通过一个支持 FTP 协议的客户机程序,连接在远程主机上的 FTP 服务器程序。通过在客户端向服务器端发送 FTP 命令,服务器执行该命令,并将执行结果返回给客户端。由于“控制连接”的因素,客户端发送的 FTP 命令,服务器都会有对应的应答。
FTP 工作流程如图所示。
上图中显示了 FTP 进行文件传输的基本工作流程。主要分为 4 个阶段,即建立连接阶段、身份认证阶段、命令交互阶段和断开连接阶段。下面对这 4 个阶段进行详细介绍。
客户端向 FTP 服务器发出建立连接请求,FTP 服务器对请求进行应答。如果 FTP 服务器上的 21 端口是启用的,可以接受来自其他主机的请求,给出应答 220,表示服务就绪,即告诉客户端需要的 FTP 服务已经准备好了。
返回应答以后,FTP 服务器需要客户端进行身份认证,向客户端发送身份认证请求。
【实例】已知 FTP 服务器的 IP 地址为 192.168.59.135。使用一个主机作为 FTP 客户端与 FTP 服务器进行文件传输。
这里查看 FTP 服务器上目录 content 中的信息。执行命令如下:
这里显示的目录列表信息可以看到 content 中有 3 个文件 file-1.txt,file-2.txt 和 file-3.txt。输出信息最后一行显示了服务器的应答码 226,表示执行结果已经返回。
用户通过一个支持 FTP 协议的客户机程序,连接在远程主机上的 FTP 服务器程序。通过在客户端向服务器端发送 FTP 命令,服务器执行该命令,并将执行结果返回给客户端。由于“控制连接”的因素,客户端发送的 FTP 命令,服务器都会有对应的应答。
FTP 工作流程如图所示。
建立连接阶段
该阶段是 FTP 客户端通过 TCP 三次握手与FTP服务器端进行建立连接。客户端向 FTP 服务器发出建立连接请求,FTP 服务器对请求进行应答。如果 FTP 服务器上的 21 端口是启用的,可以接受来自其他主机的请求,给出应答 220,表示服务就绪,即告诉客户端需要的 FTP 服务已经准备好了。
返回应答以后,FTP 服务器需要客户端进行身份认证,向客户端发送身份认证请求。
身份认证阶段
身份认证是指客户端需要向FTP服务提供登录所需的用户名和密码。FTP 服务器对客户端输入的用户名和密码都会给出相应的应答。如果客户端输入的用户名和密码正确,将成功登录FTP服务器,此时进入 FTP 会话。命令交互阶段
在 FTP 会话中,用户可以执行 FTP 命令进行文件传输,如查看目录信息、上传或下载文件等。客户端输入要执行的 FTP 命令后,服务器同样会给出应答。如果输入的执命令正确,服务器会将命令的执行结果返回给客户端。执行结果返回完成后,服务器继续给出应答。断开连接阶段
当客户端不再与 FTP 服务器进行文件传输时,需要断开连接。客户端向 FTP 服务器发送断开连接请求,服务器收到断开连接后给出相应的应答。验证工作流程
为了能够更好地理解FTP客户端与服务器的工作流程,下面以一个简单的实例进行讲解。【实例】已知 FTP 服务器的 IP 地址为 192.168.59.135。使用一个主机作为 FTP 客户端与 FTP 服务器进行文件传输。
这里查看 FTP 服务器上目录 content 中的信息。执行命令如下:
root@daxueba:~# ftp
为了方便分析,下面将按照 FIP 的 4 个工作流程阶段进行分析。建立连接
ftp> open 192.168.59.135 #客户端请求建立连接 Connected to 192.168.59.135. 220 Welcome #服务器应答, 应答码为220以上输出信息显示客户端向 FTP 服务器 192.168.59.135 发起了连接请求,服务器给出了对应的应答码 220,表示成功建立了连接。
身份认证
Name (192.168.59.135:root): sm #客户端输入的用户名(明文显示), 这里为sm 331 User name ok, need password. #服务器应答, 应答码为331 Password: #客户端输入的密码 230 User logged in, proceed. #服务器应答, 应答码为230以上输出信息显示了客户端输入的用户名和密码,并显示了对应的应答码。用户名的应答码为 331,表示还需要客户端输入密码;密码的应答码为 230,表示登录成功。
命令交互
Remote system type is UNIX. Using binary mode to transfer files. ftp> dir content #客户端执行的命令 200 Connected. #服务器应答, 应答码为200 150 Start of file list. #服务器应答, 应答码为150 -rwxrwxrwx 1 ftp ftp 18 Sep 11 14:47 file-3.txt #目录列表信息 -rwxrwxrwx 1 ftp ftp 18 Sep 11 14:47 file-1.txt #目录列表信息 -rwxrwxrwx 1 ftp ftp 18 Sep 11 14:47 file-2.txt #目录列表信息 226 Transfer complete. #服务器应答, 应答码为226以上输出信息显示了用户名要执行的命令 dir content,表示显示 FTP 服务器上 content 的目录列表信息;服务器给出了应答,这里给出了两个应答码。应答码为 200,表示 FTP 服务器可以执行该命令;应答码为 150,表示服务器已经准备好了目录列表,打开数据连接,将执行结果发送给客户端。
这里显示的目录列表信息可以看到 content 中有 3 个文件 file-1.txt,file-2.txt 和 file-3.txt。输出信息最后一行显示了服务器的应答码 226,表示执行结果已经返回。
断开连接
ftp> quit #客户端指定的断开FTP子命令 221 Service closing control connection. #服务器应答, 应答码为221以上输出信息显示了客户端执行的断开连接的 FTP 子命令 quit。最后一行显示了服务器的应答,应答码为 221,表示服务器确认退出登录。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算