FTP(File Transfer Protocol,文件传输协议)是一种用于在网络上进行文件传输的标准协议,其核心原理是通过建立两个TCP连接来实现文件传输和控制命令的交互,具体工作流程如下:
1. 连接建立
- 控制连接(Control Connection):
客户端首先与FTP服务器的21号端口建立TCP连接,用于发送和接收控制命令(如登录、列出文件、切换目录等),整个会话期间该连接保持打开状态。 - 数据连接(Data Connection):
当需要传输实际文件数据(或目录列表等)时,会单独建立数据连接,传输完成后关闭。数据连接的建立方式有两种:
- 主动模式(Active Mode):服务器主动连接客户端的指定端口(客户端需开放端口并告知服务器)。
- 被动模式(Passive Mode):客户端主动连接服务器的临时端口(服务器开启临时端口并告知客户端),是当前主流方式(避免客户端防火墙限制)。
2. 身份认证
客户端通过控制连接发送用户名(USER
命令)和密码(PASS
命令),服务器验证通过后允许进行后续操作。部分服务器支持匿名登录(用户名通常为anonymous
,密码可用邮箱替代)。
3. 文件传输过程
- 客户端通过控制连接发送文件操作命令(如下载
RETR
、上传STOR
、列出目录LIST
等)。 - 服务器收到命令后,根据模式建立数据连接。
- 通过数据连接传输文件内容或目录信息。
- 传输完成后,数据连接关闭,控制连接保持等待下一个命令。
4. 传输模式
- ASCII模式:用于传输文本文件,自动转换不同系统的换行符(如Windows的
\r\n
与Unix的\n
)。 - 二进制模式(Binary):用于传输非文本文件(如图片、视频、可执行文件等),直接按字节流传输,不做格式转换(推荐默认使用,避免文件损坏)。
5. 断开连接
客户端发送QUIT
命令,服务器关闭控制连接,结束会话。
特点总结
- 基于TCP协议,提供可靠的字节流传输,保证文件传输的完整性。
- 采用“控制连接+数据连接”分离的设计,使命令交互和数据传输互不干扰。
- 原生FTP不加密数据,用户名、密码和文件内容均明文传输,安全性较低(可通过FTPS或SFTP协议改进)。
这种设计使得FTP能高效处理文件传输,成为早期互联网中文件共享的主流协议,至今仍在许多场景中使用。