理论课40分钟

30课:FTP文件传输

文件的上传与下载

教学目标

1理解FTP的工作模式
2掌握主动模式和被动模式
3了解SFTP和FTPS的区别

📖 课前导入

你有没有想过:网站的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

⚠️ 问题:客户端有NAT/防火墙时,服务器主动连接会被拒绝!因为防火墙默认阻止外部主动连入的连接。

被动模式(Passive,PASV命令)✅推荐

1. 客户端连接服务器端口21(控制连接)

2. 客户端发PASV命令

3. 服务器回复:"我开了端口30000,你来连我"

4. 客户端主动连接服务器的端口30000

✅ 两条连接都是客户端主动发起,完美穿越客户端防火墙!但服务器需要开放被动端口范围。

🌐 FTP主动模式 vs 被动模式

→ :21 控制→ :21 + :30000
FTP客户端客户端
防火墙/NAT
服务器防火墙
FTP服务器:21
FTP客户端客户端
防火墙/NAT
服务器防火墙
FTP服务器:21
上:主动模式——服务器:20 → 客户端:5001(被防火墙拦截❌)
下:被动模式——客户端 → 服务器:30000(客户端发起,穿越防火墙✅)
对比项主动模式(PORT)被动模式(PASV)
数据连接发起方服务器→客户端客户端→服务器
服务器数据端口固定端口20随机高端口(如30000-31000)
客户端防火墙❌ 可能拦截✅ 不受影响
服务器防火墙✅ 只需开放20,21需开放被动端口范围
适用场景内网环境互联网环境(推荐)

📚 三、FTP命令与响应码

Windows命令行FTP完整操作
// 模拟终端 - 点击"执行下一条"或按回车运行命令
// 共 7 条命令,已执行 0
C:\>

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

↑ 密码完全暴露!任何同网段的人都能看到

方案端口加密连接数优缺点
FTP21+20❌ 无双连接速度快,但不安全
SFTP ✅22✅ SSH加密单连接最安全,防火墙友好,推荐首选
FTPS990/21✅ TLS/SSL双连接兼容FTP工具,但防火墙配置复杂
SCP22✅ SSH加密单连接简单快速,无法浏览远程目录
Linux SFTP/SCP命令示例
// 模拟终端 - 点击"执行下一条"或按回车运行命令
// 共 2 条命令,已执行 0
C:\>

FTP文件传输实战

使用FileZilla连接FTP服务器,演示主动/被动模式切换、文件上传下载、排查常见连接问题,对比SFTP安全传输

15:00
FTP文件传输实战推荐视频15:00

使用FileZilla连接FTP服务器,演示主动/被动模式切换、文件上传下载、排查常见连接问题,对比SFTP安全传输

✅ 课堂小测

随堂测验

1/6

FTP使用哪两个端口?

📋 本课小结

1

FTP双连接:控制连接(21)始终保持 + 数据连接(20/随机)临时建立。

2

主动vs被动:主动=服务器连客户端(防火墙问题);被动=客户端连服务器(推荐)。

3

传输模式:binary模式传所有文件不会损坏,ASCII模式仅用于纯文本。

4

安全选型:SFTP(首选)> FTPS > SCP。FTP明文传输绝不用于敏感数据。

🤔 课后思考与实践

动手实验

  1. 在Windows上用命令行FTP连接一个公共FTP服务器(如 ftp ftp.gnu.org,匿名登录),练习ls、cd、get命令。
  2. 如果有Linux服务器,尝试用SFTP连接并传输文件,对比和FTP的体验差异。

思考题

  1. 为什么FTP要设计"双连接"而不是像HTTP那样用单连接?这种设计有什么优势和劣势?
  2. 如果公司服务器在防火墙后面只开放了端口22,你会选择哪种文件传输方案?为什么?
  3. HTTP也可以下载文件,FTP相比HTTP在文件传输上有什么优势?