一、FTP 是什么
FTP(File Transfer Protocol,文件传输协议),是一套应用层协议,专门用于在网络上传输文件。
它可以在两台主机之间上传、下载、重命名、删除文件与目录,早期广泛用于网站代码发布、文件共享。
前置:FTP 基于 TCP 协议,是面向连接、可靠传输,默认不加密。
二、FTP 双端口模型(重点)
FTP 最特别的地方:使用两条独立的 TCP 连接
- 控制连接(命令通道)
- 默认端口:21
- 作用:持续保持连接,传输命令和响应(登录、列出目录、上传/下载指令)
- 生命周期:从客户端连接服务器开始,直到整个FTP会话结束才断开。
- 数据连接(数据通道)
- 端口:主动模式下服务器用 20;被动模式由服务器随机开放高位端口
- 作用:只用来传输文件内容、目录列表
- 生命周期:临时连接,每次文件传输完成,数据连接就关闭。
一句话记忆:21端口发命令,20端口传数据(主动模式)
三、两种工作模式:主动模式 vs 被动模式
1. 主动模式(PORT模式)
- 客户端先建立到服务器21端口的控制连接;
- 客户端开放一个本地高位端口,把自己IP+端口通过PORT命令发给服务端;
- 由服务器主动发起TCP连接,从服务器20端口连到客户端这个端口,建立数据通道。
- 问题:客户端如果在防火墙/NAT内网,服务器主动连客户端大概率被防火墙拦截。
现在内网环境,主动模式很少用。
2. 被动模式(PASV模式)【最常用】
- 控制连接依然是客户端连服务器21端口;
- 客户端发送 PASV 命令;
- 服务器在本机开放一个随机高位端口,告诉客户端;
- 由客户端主动发起连接,连接服务器这个随机端口,建立数据通道。
- 优点:全部连接都是客户端向外发起,更容易穿过防火墙、NAT,现在FTP客户端默认都是被动模式。
四、FTP 常见命令(控制通道交互)
客户端向FTP服务器发送文本命令,服务器返回数字状态码+描述。
| 命令 | 作用 |
|---|---|
| USER | 输入用户名 |
| PASS | 输入密码 |
| LIST | 列出当前目录下文件 |
| CWD | 切换目录 |
| PUT | 上传文件 |
| GET | 下载文件 |
| DELE | 删除文件 |
| QUIT | 退出,关闭控制连接 |
常见响应码:
200 OK:命令执行成功220:服务器就绪,欢迎登录331:用户名正确,需要输入密码530:登录失败(账号密码错误)
五、FTP 优缺点
✅ 优点
- 专门为文件传输设计,支持断点续传(部分客户端支持)、批量文件;
- 支持目录操作,权限管理;
- 基于TCP,传输可靠,不会丢包。
❌ 缺点
- 明文传输:账号、密码、文件内容全部裸奔,很容易被抓包窃取;
- 双连接模式,防火墙/NAT配置麻烦;
- 现在逐渐被更安全的方案替代。
六、FTPS / SFTP(容易混淆,区分清楚)
很多人把这几个搞混:
- FTP:原始FTP,明文,端口21;
- FTPS(FTP over SSL/TLS):FTP + SSL加密,依然是FTP协议,加密传输,端口21(也可990);
- SFTP(SSH File Transfer Protocol):不是FTP! 是SSH协议自带的文件传输子系统,基于SSH(22端口),加密,运维现在最推荐使用SFTP,替代传统FTP。
重点:SFTP ≠ FTP,底层是SSH,不是FTP协议。
七、简单工作流程示例(被动模式)
- 客户端 TCP 连接服务器 21端口,建立控制连接;
- 客户端发送 USER、PASS 完成身份认证;
- 客户端发送 PASV,服务器返回一个随机端口;
- 客户端新建TCP连接,连接服务器该随机端口(数据通道);
- 客户端发送 LIST,服务器通过数据通道返回目录列表;
- 客户端发送 GET,开始下载文件;文件传输完毕,数据连接关闭;
- 可以继续执行其他命令;最后发送 QUIT,关闭控制连接,会话结束。
八、小结
- FTP 应用层协议,基于TCP;控制连接21端口,数据连接分主动/被动模式;
- 主动模式:服务器主动连客户端;被动模式:客户端主动连服务器(推荐);
- FTP明文不安全,新项目优先使用 SFTP;
- FTP有两条独立TCP连接:控制连接长期存活,数据连接用完即关。
思考题:为什么FTP要设计两条独立连接,而不是像HTTP只用一条连接传输命令+数据?
0 条笔记