其实这世上有很多事情不是你想就能做到的,总有些命运你无法逃避,总有些悲伤让你永远铭记。
FTP(文件传输协议)
- 文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP, 客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的, 而且是面向连接, 为数据传输提供可靠保证。
FTP 特点
- 文件传送协议 FTP 只提供文件传送的一些基本的服务,它使用 TCP 可靠的运输服务。
- FTP 的主要功能是减少或消除在不同操作系统下处理文件的不兼容性。
- FTP 使用客户服务器方式。一个 FTP 服务器进程可同时为多个客户进程提供服务,FTP 的服务器进程由两大部分组成:一个主进程,负责接受新的请求;另外有若干个从属进程,负责处理单个请求。
FTP 工作过程
- FTP 服务器端打开熟知端口(端口号为 21),使客户进程能够连接上。等待客户进程发出连接请求。
- 启动数据传送进程(从属进程)来处理客户进程发来的请求。数据传送进程(从属进程)对客户进程的请求处理完毕后即终止。从属进程在运行期间根据需要还可能创建其他一些子进程。
- 回到等待状态,继续接受其他客户进程发来的请求。控制进程(主进程)与数据传送进程(从属进程)的处理是并发地进行。
- FTP 协议和其他协议不一样的地方就是客户端访问 FTP 服务端需要建立两个 TCP 连接,一个用来传输 FTP 命令,一个用来传输数据。
- 控制连接:标准端口为 21,用于发送 FTP 命令信息。
- 数据连接:标准端口为 20, 用于上传、下载数据。
FTP 模式
主动模式:服务端从 20 端口主动向客户端发起连接。
客户端随机打开一个端口(端口号大于 1024,假设为 x),同时一个 FTP 进程连接至服务器的 21 号命令端口。此时,源端口为随机端口 x,在客户端;远程端口为 21,在服务器端。
客户端开始监听端口(x+1),同时向服务器发送一个端口命令(向服务器的 21 号命令端口),此命令告诉服务器现在客户端正在监听的端口号并且已准备好从此端口接收数据。这个端口就是我们所知的数据端口。
服务器打开 20 号端口,并且建立和客户端数据端口的连接。此时,源端口为 20,远程数据端口为(x+1)。
客户端通过本地的数据端口建立一个和服务器 20 号端口的连接,然后向服务器发送一个应答,告诉服务器它已经建立好了一个连接。
被动模式:服务端在指定范围内的某个端口被动等待客户,被动发起连接。
当开启一个 FTP 连接时,客户端打开两个任意的非特权本地端口(N > 1024 和 N+1)
第一个端口连接服务器的 21 端口,但与主动方式的 FTP 不同,客户端不会提交 PORT 命令并允许服务器来回连它的数据端口,而是提交 PASV 命令。
这样做的结果时服务器会开启一个任意的非特权端口(P > 1024),并且发送 PORT( P )的命令给客户端。
然后客户端发起从本地端口 N+1 到服务器的端口 P 的连接用来传输数据。
- 对比
主动模式 | 被动模式 | |
---|---|---|
客户端 | 打开命令端口 | 打开两个端口 |
服务端 | 打开两个端口 | 打开命令端口 |
发起连接 | 客户端发起命令端口连接,同时打开数据断端口 | 客户端发起命令端口连接,服务器打开数据端口 |
告知数据端口 | 客户端告知 | 服务器告知 |
数据端口连接 | 服务器发起数据端口连接 | 客户端发起数据端口连接 |
FTP 传输模式
- ASCII模式:
- 也被称为文本模式,只不过里面的数据使用ASCII码的格式传输,接收端收到之后在转换为对应的字符
- 二进制模式:
- 常用于发送图片文件和程序文件,无需转换格式,直接传输即可。