Appearance
题目
FTP 客户和服务器间传递 FTP 命令时,使用的连接是( )。
错因
B
数据连接是用来传输文件内容(数据)——不是命令。FTP 命令(USER、PASS、CWD、LIST、RETR 等)走控制连接。错的根源:把"控制"和"数据"两条连接搞反。
C
FTP 不用 UDP——所有连接(控制 + 数据)都基于 TCP。命令传输需要可靠交付(命令丢一字就崩溃),UDP 不可靠不行。错的根源:以为命令是"小数据"就能走 UDP。
D
UDP 数据连接——双错(既不是 UDP 也不是数据连接)。错的根源:完全不熟悉 FTP 双连接架构。
总解析
FTP 双连接架构:
| 连接类型 | 协议 | 端口 | 传输内容 | 维持时间 |
|---|---|---|---|---|
| 控制连接 | TCP | 21 | FTP 命令(USER / PASS / LIST / RETR / STOR ...)+ 响应(200 / 220 / 226 ...) | 整个会话期间 |
| 数据连接 | TCP | 20(主动)或临时 | 文件 / 目录列表内容 | 每次传输任务,传完即关 |
控制连接的作用:
- 客户端登录(USER + PASS)
- 切目录(CWD)
- 列目录(LIST)
- 准备数据传输(PORT / PASV)
- 收到服务器响应(200 OK、421 错误等)
数据连接的作用:
- 实际传输文件内容(RETR 下载、STOR 上传)
- 传输目录列表(LIST 命令的响应正文)
题面"传递 FTP 命令"明确指控制连接部分,对应 TCP 21 端口。
为什么 FTP 必须用 TCP:
- 命令必须可靠到达(USER 丢字就登不上、RETR 丢字会请求错文件)
- 文件传输必须保证完整性(一字节都不能错)
- TCP 的可靠传输 + 顺序保证刚好满足
核对:
| 选项 | 协议 | 连接类型 | 是否 |
|---|---|---|---|
| A | TCP | 控制连接 | ✅ 命令走这里 |
| B | TCP | 数据连接 | ❌(数据连接传文件内容) |
| C | UDP | 控制 | ❌(FTP 不用 UDP) |
| D | UDP | 数据 | ❌(双错) |
最终答案是 A(建立在 TCP 之上的控制连接)。
编者注(知识延伸):FTP 是少数显式分离控制流和数据流的协议——大多数协议(HTTP、SSH 等)只用一条连接传所有内容。FTP 双连接的设计源自 1971 年原始 FTP 标准,后续的 SSH 用单一加密通道实现了类似功能(SCP / SFTP)。现代云存储几乎不再用 FTP,主要因为 FTP 的双连接在 NAT / 防火墙环境下很难穿透;SCP / SFTP / WebDAV / S3 API 都用单连接。但 408 教材仍把 FTP 作为应用层协议的标准考点。