FTP(文件传输协议,File Transfer Protocol)是一种用于在网络上进行文件传输的标准协议,它基于客户端-服务器(C/S)架构,允许用户从远程服务器下载文件或向服务器上传文件。
以下是 FTP 客户端和服务器之间传递文件的核心机制、工作流程及关键概念:
基本架构
- FTP 服务器:运行 FTP 服务软件的计算机或设备,负责存储文件并响应客户端的请求。
- FTP 客户端:用户使用的软件(如 FileZilla、WinSCP、命令行工具
ftp或浏览器),用于发起连接、浏览目录、上传和下载文件。
双通道机制(关键特性)
FTP 最显著的特点是它使用两个独立的 TCP 连接来完成任务:
(1) 控制连接(Control Connection)
- 端口:默认端口 21。
- 作用:用于发送命令和接收响应。
- 流程:
- 客户端连接到服务器的 21 端口。
- 进行身份验证(用户名/密码)。
- 发送命令(如
LIST列出目录、RETR下载文件、STOR上传文件)。 - 服务器返回状态码(如 200 OK, 550 错误)。
- 特点:在整个会话期间保持打开状态,直到用户断开连接。
(2) 数据连接(Data Connection)
- 端口:取决于工作模式(主动模式或被动模式),通常使用动态端口。
- 作用:专门用于传输实际的文件内容或目录列表。
- 特点:
- 仅在需要传输数据时建立。
- 传输完成后关闭。
- 这是 FTP 与 HTTP 等单连接协议的主要区别。
两种工作模式(影响数据连接建立方式)
由于防火墙和 NAT(网络地址转换)的存在,FTP 的数据连接建立方式有两种主要模式:
A. 主动模式(Active Mode, PORT)
- 适用场景:服务器在公网,客户端在局域网(背后有防火墙/NAT)。
- 流程:
- 客户端通过控制连接告诉服务器:“我监听在端口 X”。
- 服务器主动从自己的 20 端口连接到客户端指定的端口 X。
- 问题:客户端的防火墙通常会阻止外部(服务器)发起的连接请求,导致连接失败。
B. 被动模式(Passive Mode, PASV)✅ 更常用
- 适用场景:客户端在局域网(背后有防火墙/NAT),服务器在公网。
- 流程:
- 客户端通过控制连接发送
PASV命令。 - 服务器在本地打开一个随机高位端口(如 50000+),并告诉客户端:“请在端口 Y 连接我”。
- 客户端主动连接到服务器的端口 Y。
- 客户端通过控制连接发送
- 优势:符合大多数客户端防火墙的安全策略(允许出站连接,阻止入站连接)。
现代 FTP 客户端默认通常使用被动模式。
文件传输流程示例(以下载文件为例)
- 建立控制连接:客户端连接服务器 IP:21。
- 身份验证:客户端发送
USER和PASS命令,服务器验证成功。 - 请求数据连接:
- 客户端发送
PASV(被动模式)或PORT(主动模式)。 - 服务器返回一个 IP 地址和端口号用于数据传输。
- 客户端发送
- 建立数据连接:客户端与服务器在指定端口上建立新的 TCP 连接。
- 传输文件:
- 客户端发送
RETR filename.txt(请求下载)。 - 服务器通过数据连接发送文件内容。
- 客户端接收数据并保存到本地。
- 客户端发送
- 关闭数据连接:文件传输完成后,数据连接关闭。
- 继续控制:控制连接保持活跃,可进行其他操作(如上传、删除、切换目录)。
安全性问题与替代方案
⚠️ 重要警告:
- FTP 是明文协议:用户名、密码和文件内容在传输过程中未加密,容易被网络窃听(Sniffing)。
- 不建议在生产环境或公共网络中使用纯 FTP。
安全替代方案:
| 协议 | 说明 | 特点 |
|---|---|---|
| SFTP (SSH File Transfer Protocol) | 基于 SSH 协议的文件传输 | 所有数据加密,使用单一连接(通常端口 22),推荐首选。 |
| FTPS (FTP over SSL/TLS) | FTP 的安全扩展 | 在 FTP 基础上添加 SSL/TLS 加密,支持显式(Explicit)和隐式(Implicit)加密。 |
| SCP (Secure Copy) | 基于 SSH 的安全复制 | 简单安全,但功能不如 SFTP 丰富(如无法直接浏览远程目录)。 |
常见 FTP 客户端工具推荐
- 图形界面(GUI):
- FileZilla:免费、开源、跨平台,最流行。
- WinSCP:Windows 平台首选,支持 SFTP/SCP。
- Cyberduck:macOS 和 Windows 平台,支持多种协议。
- 命令行(CLI):
- Linux/Mac:
ftp、lftp、sftp。 - Windows:
ftp命令、PowerShell 的Invoke-WebRequest或Start-Transcript等。
- Linux/Mac:
FTP 通过控制连接(端口 21)发送指令,通过数据连接传输文件,由于防火墙兼容性,被动模式(PASV)是现代互联网中最常用的工作方式,出于安全考虑,建议优先使用 SFTP 或 FTPS 替代传统 FTP。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/486998.html



