计算机网络基础:文件传输协议 FTP(File Transfer Protocol)
FTP 是互联网上最古老且最经典的文件传输协议之一,主要用于在网络上客户端与服务器之间上传、下载、删除、重命名文件或目录。它属于应用层协议,基于 TCP(可靠传输),标准定义在 RFC 959(1985 年)。
1. FTP 的核心特点
- 两个通道(非常重要!)
- 控制连接(Control Connection):用于传输命令和响应
- 数据连接(Data Connection):用于真正传输文件内容或目录列表
- 明文传输(默认无加密)
- 用户名、密码、文件内容都以明文传输(极不安全)
- 现代替代:FTPS(FTP over SSL/TLS)、SFTP(SSH File Transfer Protocol)
- 面向会话:控制连接通常保持到整个会话结束
- 支持断点续传(部分实现支持)
- 跨平台:几乎所有操作系统都支持 FTP 客户端
2. FTP 默认端口
| 连接类型 | 端口号 | 说明 |
|---|---|---|
| 控制连接 | 21 | 客户端 → 服务器(命令、响应) |
| 数据连接(主动模式) | 20 | 服务器 → 客户端(文件数据) |
| 数据连接(被动模式) | >1024 | 服务器随机端口,客户端连接 |
注意:被动模式下服务器不一定使用 20 端口。
3. FTP 的两种工作模式(最常考点)
FTP 的数据连接建立方式分为 主动模式(Active / PORT) 和 被动模式(Passive / PASV)。
3.1 主动模式(Active Mode / PORT mode)
流程:
- 客户端随机开一个高端口(>1024,例如 50000)用于数据
- 客户端向服务器 21 端口发起控制连接
- 客户端发送 PORT 命令,告诉服务器:“我的 IP 是 X.X.X.X,数据端口是 50000”
- 格式:
PORT h1,h2,h3,h4,p1,p2(IP 和端口的十进制表示)
- 当需要传输数据时(如 LIST、RETR、STOR),服务器主动从自己的 20 端口连接客户端的 高端口
- 数据传输完成,数据连接关闭(控制连接继续保持)
优点:服务器端配置简单(固定 20 端口)
缺点:客户端必须开放高端口入站 → 大多数客户端防火墙/NAT会阻断 → 几乎无法穿越 NAT 和防火墙
3.2 被动模式(Passive Mode / PASV mode)—— 现代默认
流程:
- 客户端向服务器 21 端口发起控制连接
- 客户端发送 PASV 命令(“请进入被动模式”)
- 服务器随机开一个高端口(>1024,例如 30021),并回复:
227 Entering Passive Mode (h1,h2,h3,h4,p1,p2)- 告诉客户端:我的 IP 是 X.X.X.X,数据端口是 30021
- 客户端主动向服务器的这个高端口发起数据连接
- 数据传输完成,数据连接关闭
优点:客户端只发起出站连接 → 能很好穿越客户端防火墙和 NAT
缺点:服务器必须开放大量高端口(通常 30000–31000 或更大范围),服务器防火墙需放行
现代结论:
几乎所有 FTP 客户端(FileZilla、WinSCP、浏览器等)默认使用被动模式。
4. 常见 FTP 命令(控制连接上发送)
| 命令 | 含义 | 示例 | 常见响应码 |
|---|---|---|---|
| USER | 发送用户名 | USER admin | 331 |
| PASS | 发送密码 | PASS 123456 | 230 |
| PWD | 显示当前工作目录 | PWD | 257 |
| CWD | 改变工作目录 | CWD /pub | 250 |
| LIST | 列出目录内容(长格式) | LIST | 150 → 226 |
| NLST | 列出目录内容(短格式) | NLST | 150 → 226 |
| RETR | 下载文件(get) | RETR file.txt | 150 → 226 |
| STOR | 上传文件(put) | STOR file.txt | 150 → 226 |
| DELE | 删除文件 | DELE old.txt | 250 |
| MKD | 创建目录 | MKD newdir | 257 |
| RMD | 删除目录 | RMD olddir | 250 |
| TYPE | 设置传输模式(A=ASCII, I=Binary) | TYPE I | 200 |
| PASV | 进入被动模式 | PASV | 227 |
| PORT | 指定主动模式数据端口 | PORT 192,168,1,100,195,136 | 200 |
| QUIT | 退出 | QUIT | 221 |
常见响应码(前三位):
- 1xx:初步应答(数据连接建立中)
- 2xx:成功
- 3xx:需要进一步命令(如登录过程)
- 5xx:错误
5. FTP 的优缺点总结
优点:
- 简单、历史悠久、兼容性极好
- 支持大文件传输、断点续传(部分客户端)
- 很多老系统、嵌入式设备仍然使用
缺点(非常明显):
- 明文传输 → 密码和数据极易被嗅探
- 两个连接设计 → 防火墙/NAT 穿透困难
- 没有统一的安全机制
- 目录列表效率低(LIST 命令慢)
- 不支持压缩、加密、完整性校验
6. 现代替代方案(强烈推荐)
| 协议 | 端口 | 加密 | 推荐场景 | 备注 |
|---|---|---|---|---|
| FTPS | 21(显式)/990(隐式) | TLS/SSL | 需要兼容老 FTP 系统 | FTP + TLS |
| SFTP | 22 | SSH | 安全性要求高 | 最常用替代,基于 SSH |
| SCP | 22 | SSH | 简单文件拷贝 | 不支持交互式目录浏览 |
| WebDAV | 80/443 | HTTP/HTTPS | 通过浏览器或挂载盘访问 | 企业常用 |
| rsync | 873 | 可选 SSH | 增量同步、大规模传输 | 适合备份 |
7. 小结口诀
- FTP = 控制 21 + 数据(20 或 随机端口)
- 主动模式:服务器主动连客户端(防火墙难过)
- 被动模式:客户端主动连服务器(现代默认)
- PORT 命令 → 主动模式
- PASV 命令 → 被动模式
- 安全第一:生产环境不要用普通 FTP,优先 SFTP / FTPS
如果你想深入某个部分(比如 FTP 主动/被动模式抓包分析、常见错误码排查、vsftpd 配置、SFTP 与 FTP 对比),可以告诉我,我继续展开讲解!