File Transfer Protocol
FTP 解决什么问题
将一台计算机中的文件通过网络传送到另一台计算机,是基本的网络应用需求。文件传送协议(File Transfer Protocol,FTP)是因特网上使用最广泛的文件传送协议。
FTP 提供交互式访问,允许客户指明文件类型与格式(如 ASCII 码或二进制),并允许文件具有存取权限(访问文件的用户必须经过授权并输入有效口令)。FTP 屏蔽了各计算机系统的细节,因而适用于在异构网络中任意计算机之间传送文件。
FTP 采用客户/服务器方式。FTP 客户计算机可将各种类型的文件上传到 FTP 服务器,也可以从 FTP 服务器下载文件。
FTP 的基本工作原理
FTP 与其他 C/S 协议最大的不同是:它使用两条 TCP 连接。
| 控制连接 | 数据连接 | |
|---|---|---|
| 服务器端口 | TCP 21 | 主动模式通常使用 TCP 20;被动模式使用服务器临时端口 |
| 生命周期 | 整个 FTP 会话期间保持打开 | 每次文件传送时临时建立,传送完毕后释放 |
| 传送内容 | FTP 命令(如 USER、PASS、LIST、RETR、STOR)和服务器应答 | 文件数据或目录列表数据 |
| 方向 | 客户 → 服务器(命令)、服务器 → 客户(应答) | 取决于上传还是下载 |
两条连接分离的好处:
- 控制与数据互不干扰。控制连接始终可用,可以在文件传输过程中随时发送中止命令。
- 控制连接只需少量带宽(命令和应答很短),数据连接可以专注传送大量文件数据。
- 每条数据连接只传送一个文件或一次目录列表,传完即释放。
FTP 使用 TCP
FTP 需要可靠传输——文件不能少一个字节,命令也不能丢。因此 FTP 的数据连接和控制连接都建立在 TCP 之上。这和 DNS 使用 UDP 不同。
主动模式与被动模式
建立数据连接时,谁主动发起连接决定了 FTP 的工作模式。FTP 有主动模式和被动模式两种。
主动模式(PORT)
主动模式下,FTP 服务器主动向 FTP 客户发起数据连接:
- 客户通过控制连接发送
PORT命令,告知服务器自己开放了哪个临时端口。 - 服务器使用自己的端口 20,主动向客户的临时端口发起 TCP 连接。
- 数据连接建立后,开始传送文件数据。
问题:如果客户位于防火墙或 NAT 之后,服务器无法主动连接到客户的临时端口。这正是被动模式要解决的问题。
被动模式(PASV)
被动模式下,FTP 服务器被动等待 FTP 客户来连接:
- 客户通过控制连接发送
PASV命令。 - 服务器在本地开放一个临时端口,并通过控制连接把端口号告知客户。
- 客户主动向服务器的临时端口发起 TCP 连接。
- 数据连接建立后,开始传送文件数据。
被动模式让所有连接都由客户发起,解决了客户位于防火墙/NAT 后面的问题。
| 维度 | 主动模式(PORT) | 被动模式(PASV) |
|---|---|---|
| 数据连接发起方 | 服务器(端口 20) | 客户(随机端口 → 服务器临时端口) |
| 客户的防火墙/NAT 友好性 | 差——服务器无法主动穿透 | 好——客户从内部发起连接 |
| 服务器的防火墙要求 | 只需开放 21 和 20 | 需开放 21 和一段临时端口范围 |
| 适用场景 | 客户无防火墙限制的传统环境 | 现代因特网(客户常位于 NAT 后) |
主动与被动,说的都是数据连接由谁发起。控制连接始终由客户主动发起(TCP 21),这个不受模式影响。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Elian's blog page!