- 可靠传输(基于 TCP)
- 支持双向传输(上传和下载)
- 提供交互式访问
- 支持 ASCII 和二进制传输模式
FTP 使用两个 TCP 连接:
1. 控制连接(端口 21):
- 传输 FTP 命令和响应
- 保持整个会话期间不断开
- ASCII 文本传输
2. 数据连接(端口 20 或随机):
- 传输文件数据
- 每次传输建立,传输完关闭
- 可以是 ASCII 或二进制
客户端 ──控制连接(21)──→ 服务器
客户端 ──数据连接(20)──→ 服务器(主动模式)
- 控制连接:传输命令(用户名、密码、LIST、RETR 等)
- 数据连接:传输文件内容
- 分离控制和数据,提高灵活性
- 控制连接保持,数据连接按需建立
1. 客户端连接服务器的 21 端口(控制连接)
2. 客户端发送 PORT 命令,告知自己的数据端口
3. 服务器用 20 端口主动连接客户端的数据端口
问题:客户端如果有防火墙,服务器无法主动连接
1. 客户端连接服务器的 21 端口(控制连接)
2. 客户端发送 PASV 命令
3. 服务器告知自己的数据端口(随机高端口)
4. 客户端主动连接服务器的数据端口
解决了防火墙问题
| 特性 | 主动模式 | 被动模式 |
|---|---|---|
| 数据连接发起 | 服务器 | 客户端 |
| 服务器数据端口 | 20 | 随机 |
| 防火墙友好 | 否 | 是 |
| NAT 穿越 | 困难 | 容易 |
| 命令 | 说明 |
|---|---|
| USER | 用户名 |
| PASS | 密码 |
| LIST | 列出目录 |
| RETR | 下载文件 |
| STOR | 上传文件 |
| QUIT | 退出 |
| PASV | 进入被动模式 |
| PORT | 指定数据端口 |
三位数字码 + 文本说明
1xx: 正在处理
2xx: 成功
3xx: 需要更多信息
4xx: 客户端错误
5xx: 服务器错误
例:
220 Service ready
331 Password required
230 Login successful
150 Opening data connection
226 Transfer complete
| 考点 | 说明 |
|---|---|
| 两个连接 | 控制连接(21) 和数据连接(20) |
| 主动 vs 被动 | 数据连接发起方不同 |
| FTP 使用 TCP | 不是 UDP |
| 控制连接保持 | 整个会话期间不断开 |
↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。