FTP(File Transfer Protocol,文件传输协议) 是互联网最古老的应用层协议之一(标准定义于 RFC 959),专门用于在网络上的两台电脑(客户端和服务器)之间进行文件的上传和下载。尽管现在云存储和 HTTP/2 传输非常普及,但 FTP 凭借其专门为文件管理设计的指令集,依然在自动化运维、大型镜像分发和服务器日志管理中发挥着不可替代的作用。
本篇文章将带你深入 FTP 的底层,解析其独特的双通道架构、复杂的连接模式以及安全演进。
FTP(File Transfer Protocol,文件传输协议)是一种用于在网络上传输文件的标准协议。它于1971年首次提出,由RFC 959(1985年)标准化,是互联网早期的重要组成部分。FTP允许用户在客户端和服务器之间上传、下载、删除文件,甚至管理目录结构,就像在本地文件管理器中操作远程文件夹一样。
FTP基于TCP/IP协议栈的应用层,采用客户端-服务器模型。控制连接(端口21)处理命令和响应,数据连接(动态端口)传输实际文件。这种分离设计提高了效率,但也引入了复杂性和安全隐患。截至2025年12月,FTP仍用于遗留系统和内部网络,但现代应用多转向加密变体,以应对数据泄露风险。由于安全性问题(明文传输),现代多用加密变体如FTPS(FTP over SSL/TLS)或SFTP(SSH File Transfer Protocol)。
FTP架构的核心是双通道机制:控制通道(Command Channel)和数据通道(Data Channel)。控制通道使用TCP端口21,建立持久连接,用于发送命令(如登录、目录切换)和接收响应(如状态码)。数据通道则动态协商,用于实际文件或目录列表传输。
FTP 最具挑战性的技术点在于数据连接的建立方式。由于现代网络中存在大量的防火墙和 NAT(网络地址转换),这两种模式的选择直接决定了传输能否成功。
PORT 命令,告诉服务器:“我准备好了,请连我的 $N+1$ 端口”。PASV 指令给服务器。在 FTP 的设置中,你会看到“传输类型”的选择,这决定了数据的编码方式:
CRLF 转换为 Unix 的 LF)。如果在传输程序、压缩包或图片时误用了此模式,会导致文件永久损坏。传输过程包括登录、导航目录、传输文件。
步骤示例:
FTP使用简单英文命令操作。主要指令如下:
USER/PASS:登录。
LIST:列出文件。
CWD:改变目录。
RETR:下载文件。
STOR:上传文件。
QUIT:退出。
FTP 的响应码体系非常严谨,是程序自动化处理的基础:
| 状态码开头 | 含义 | 典型示例 |
|---|---|---|
| 1xx | 肯定的初步答复 | 150 (文件状态正常,准备开启数据通道) |
| 2xx | 肯定的完成答复 | 226 (关闭数据连接,文件传输成功) |
| 3xx | 肯定的中间答复 | 331 (用户名正确,需要输入密码) |
| 4xx | 暂时性拒绝 (可重试) | 421 (连接数过多,请稍后再试) |
| 5xx | 永久性拒绝 | 550 (权限不足或文件不存在) |
原始 FTP 协议的账号、密码和数据全部是明文传输的,这在公网环境下无异于裸奔。
通常有三种方式:
ftp://服务器地址。虽然简单,但功能受限,且现代浏览器正逐渐取消对它的支持。ftp 指令。这是技术大佬们的最爱。尽管有了 WebDAV、S3 协议和各种云盘 API,FTP (特别是 SFTP)依然在以下场景保持统治力: