FTP 服务器的工作原理
FTP(File Transfer Protocol,文件传输协议)是一种在客户端-服务器架构下进行文件传输的标准网络协议,它的核心设计思想是将控制指令与实际数据传输分离,通过建立两个独立的 TCP 连接来完成任务。
双通道机制
FTP 与 HTTP 等协议最大的不同在于它使用了两个不同的通道:
-
控制连接 (Control Connection):
- 通常使用服务器的 21 端口。
- 用于传输控制信息,例如用户的登录凭证(用户名/密码)、客户端发送的指令(如
LIST查看目录、RETR下载文件、STOR上传文件)以及服务器返回的状态码。 - 该连接在整个会话期间始终保持开启状态。
-
数据连接 (Data Connection):
- 用于传输
实际的文件内容
或目录列表。 - 每当需要传输数据时(例如下载一个文件或查看文件夹下的文件列表),都会建立一个新的数据连接。
- 数据传输完成后,该连接通常会被关闭。
- 用于传输
两种工作模式
由于现代网络环境中普遍存在防火墙和 NAT(网络地址转换),FTP 演化出了两种不同的连接模式来处理数据连接的建立:
主动模式 (Active Mode)
在主动模式下,连接的方向是由服务器发起的:
- 客户端通过 21 端口与服务器建立控制连接。
- 客户端发送
PORT命令,告诉服务器:“我的 IP 是 XXX,请连接我的 YYY 端口来传数据”。 - 服务器主动发起一个连接,从其 20 端口连接到客户端指定的 YYY 端口。
- 缺点:客户端的防火墙通常会拦截这种由外部(服务器)发起的入站连接,导致连接失败。
被动模式 (Passive Mode)
为了解决防火墙问题,目前主流使用的是被动模式:
- 客户端通过 21 端口与服务器建立控制连接。
- 客户端发送
PASV命令,请求进入被动模式。 - 服务器返回一个 IP 地址和一段随机端口号,告诉客户端:“请连接我的这个端口来传数据”。
- 客户端主动发起连接,连接到服务器提供的随机端口。
- 优点:由于连接是由客户端发起的,能够顺利穿透客户端的防火墙,是目前最常用的工作模式。
标准工作流程示例
以用户从服务器下载一个文件为例,典型的流程如下:
- 步骤 1:建立控制连接
客户端连接服务器的 21 端口,完成 TCP 三次握手。 -
步骤 2:身份验证
客户端发送用户名和密码,服务器验证通过后返回成功状态码。 - 步骤 3:请求文件
客户端通过控制连接发送RETR filename指令。 - 步骤 4:协商数据连接
如果是被动模式,客户端发送PASV,服务器返回端口号,客户端随后连接该端口建立数据连接。 - 步骤 5:传输数据通过建立好的数据连接进行传输。
- 步骤 6:结束传输
文件传输完成后,数据连接关闭,客户端通过控制连接确认任务完成,并在不需要时关闭控制连接。
- 控制与数据分离:通过 21 端口管指令,通过另一端口管数据。
- 主动模式:服务器找客户端(易被防火墙拦截)。
- 被动模式:客户端找服务器(更安全、更通用)。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/489889.html


