教学目标
📖 课前导入
你有没有想过:网站的HTML/CSS/JS文件是怎么传到服务器上去的?运维人员怎么把几GB的数据库备份从服务器下载回来?
FTP(文件传输协议)诞生于1971年,是互联网上最古老的协议之一,比HTTP还早20年。虽然今天有很多替代方案,但FTP的双连接设计思想影响了后来很多协议。
🎯 本课目标:理解FTP双连接模型,区分主动/被动模式及其防火墙影响,掌握FTP命令行操作,了解FTP响应码含义,对比SFTP/FTPS/SCP安全方案的选型。
📚 一、FTP协议概述
FTP的核心特点
FTP(File Transfer Protocol)基于TCP可靠传输,最独特的设计是使用两条TCP连接分离"命令"和"数据"。
这就像打电话时一边说话协调(控制连接),一边用另一条线传送文件(数据连接)——互不干扰。
FTP的双连接模型 ⭐
控制连接(端口21)
传输FTP命令和响应(登录、切换目录、列出文件等)。
在整个FTP会话期间始终保持,直到用户退出。
类比:电话里的对话——协调工作
数据连接(端口20或随机)
传输实际的文件内容和目录列表。
每次传输数据时临时建立,传完即断开。
类比:快递员送货——送完就走
FTP传输模式
ASCII模式(文本模式)
适合纯文本文件(.txt, .html, .csv)。会自动转换换行符(Windows的\r\n ↔ Linux的\n)。
⚠️ 传二进制文件会损坏!
Binary模式(二进制模式)✅推荐
适合所有文件(图片、压缩包、程序等)。原样传输,不做任何转换。
✅ 安全不会损坏文件,建议始终使用
📚 二、主动模式与被动模式 ⭐核心
主动模式(Active,PORT命令)
1. 客户端用随机端口连接服务器端口21(控制连接)
2. 客户端发PORT命令:"请连接我的端口5001传数据"
3. 服务器从端口20主动连接客户端的端口5001
被动模式(Passive,PASV命令)✅推荐
1. 客户端连接服务器端口21(控制连接)
2. 客户端发PASV命令
3. 服务器回复:"我开了端口30000,你来连我"
4. 客户端主动连接服务器的端口30000
🌐 FTP主动模式 vs 被动模式
下:被动模式——客户端 → 服务器:30000(客户端发起,穿越防火墙✅)
| 对比项 | 主动模式(PORT) | 被动模式(PASV) |
|---|---|---|
| 数据连接发起方 | 服务器→客户端 | 客户端→服务器 |
| 服务器数据端口 | 固定端口20 | 随机高端口(如30000-31000) |
| 客户端防火墙 | ❌ 可能拦截 | ✅ 不受影响 |
| 服务器防火墙 | ✅ 只需开放20,21 | 需开放被动端口范围 |
| 适用场景 | 内网环境 | 互联网环境(推荐) |
📚 三、FTP命令与响应码
FTP常用命令
| 命令 | 作用 |
|---|---|
| ls / dir | 列出远程文件 |
| cd / lcd | 切换远程/本地目录 |
| get / put | 下载/上传单个文件 |
| mget / mput | 批量下载/上传 |
| binary / ascii | 切换传输模式 |
| pwd | 显示远程当前目录 |
| mkdir / rmdir | 创建/删除远程目录 |
| delete | 删除远程文件 |
| bye / quit | 断开连接 |
FTP响应码(类似HTTP状态码)
| 响应码 | 含义 |
|---|---|
| 220 | 服务就绪,欢迎 |
| 230 | 登录成功 |
| 331 | 需要密码 |
| 150 | 打开数据连接,准备传输 |
| 226 | 传输完成,关闭数据连接 |
| 530 | 登录失败(用户名/密码错误) |
| 550 | 文件不存在或无权限 |
| 425 | 无法建立数据连接 |
规律:2xx=成功,3xx=需要进一步信息,4xx/5xx=错误
🔧 四、FTP常见问题排查
❌ 问题:连接成功但ls没有结果 / 提示"425 Can't open data connection"
原因:主动模式下客户端防火墙阻止了服务器发来的数据连接。
解决:切换到被动模式(在FTP客户端设置PASV),或开放客户端防火墙。
❌ 问题:下载的图片/压缩包打不开、文件损坏
原因:使用了ASCII模式传输二进制文件,换行符被转换导致文件损坏。
解决:先执行 binary 命令再传输。好习惯:连接后第一件事就切binary。
❌ 问题:提示"530 Login incorrect"
原因:用户名或密码错误,或FTP服务器未配置该用户。
解决:确认账户信息,检查FTP服务器的用户配置(vsftpd.conf/proftpd.conf)。
❌ 问题:上传提示"550 Permission denied"
原因:FTP用户对目标目录没有写入权限。
解决:检查服务器上目录的文件权限(chmod)和FTP配置的写入权限(write_enable=YES)。
📚 五、FTP的安全替代方案
FTP的致命安全问题
FTP是明文传输——用户名、密码和文件内容都未加密!用Wireshark抓包可直接看到密码:
// Wireshark抓到的FTP登录包:
Request: USER admin
Request: PASS MySecretP@ss123
↑ 密码完全暴露!任何同网段的人都能看到
| 方案 | 端口 | 加密 | 连接数 | 优缺点 |
|---|---|---|---|---|
| FTP | 21+20 | ❌ 无 | 双连接 | 速度快,但不安全 |
| SFTP ✅ | 22 | ✅ SSH加密 | 单连接 | 最安全,防火墙友好,推荐首选 |
| FTPS | 990/21 | ✅ TLS/SSL | 双连接 | 兼容FTP工具,但防火墙配置复杂 |
| SCP | 22 | ✅ SSH加密 | 单连接 | 简单快速,无法浏览远程目录 |
FTP文件传输实战
使用FileZilla连接FTP服务器,演示主动/被动模式切换、文件上传下载、排查常见连接问题,对比SFTP安全传输
使用FileZilla连接FTP服务器,演示主动/被动模式切换、文件上传下载、排查常见连接问题,对比SFTP安全传输
✅ 课堂小测
随堂测验
第 1/6 题FTP使用哪两个端口?
📋 本课小结
FTP双连接:控制连接(21)始终保持 + 数据连接(20/随机)临时建立。
主动vs被动:主动=服务器连客户端(防火墙问题);被动=客户端连服务器(推荐)。
传输模式:binary模式传所有文件不会损坏,ASCII模式仅用于纯文本。
安全选型:SFTP(首选)> FTPS > SCP。FTP明文传输绝不用于敏感数据。
🤔 课后思考与实践
动手实验
- 在Windows上用命令行FTP连接一个公共FTP服务器(如
ftp ftp.gnu.org,匿名登录),练习ls、cd、get命令。 - 如果有Linux服务器,尝试用SFTP连接并传输文件,对比和FTP的体验差异。
思考题
- 为什么FTP要设计"双连接"而不是像HTTP那样用单连接?这种设计有什么优势和劣势?
- 如果公司服务器在防火墙后面只开放了端口22,你会选择哪种文件传输方案?为什么?
- HTTP也可以下载文件,FTP相比HTTP在文件传输上有什么优势?