💌 所属专栏:【网络通信】
😀 作 者:兰舟比特 🐾
🚀 个人简介:热爱开源系统与嵌入式技术,专注 Linux、网络通信、编程技巧、面试总结与软件工具分享,持续输出实用干货!
💡 欢迎大家:这里是兰舟比特的技术小站,喜欢的话请点赞、收藏、评论三连击!有问题欢迎留言交流😘😘😘
📚 一、FTP 命令基础
FTP 使用 文本命令 + 参数 的方式通信,通过 控制连接(端口 21) 发送命令,数据连接(端口 20 或动态端口) 传输文件或目录列表。
每个命令都有一个 3位响应码,如:
220:服务就绪226:传输完成550:文件不可用230:登录成功
🔤 二、常用 FTP 命令详解(含 RETR)
| 命令 | 全称 | 含义 | 语法 | 示例 |
|---|---|---|---|---|
USER | User | 指定用户名 | USER <username> | USER alice |
PASS | Password | 发送密码 | PASS <password> | PASS secret123 |
QUIT | Quit | 退出会话 | QUIT | QUIT |
RETR | Retrieve | 下载文件(从服务器取回) | RETR <filename> | RETR report.pdf |
STOR | Store | 上传文件(保存到服务器) | STOR <filename> | STOR photo.jpg |
LIST | List | 列出当前目录内容 | LIST [pathname] | LIST /docs |
NLST | Name List | 仅列出文件名(简洁格式) | NLST [dirname] | NLST |
CWD | Change Working Directory | 切换当前目录 | CWD <directory> | CWD /upload |
CDUP | Change to Parent Directory | 返回上级目录 | CDUP | CDUP |
PWD | Print Working Directory | 显示当前目录 | PWD | PWD → 257 "/home/alice" |
MKD | Make Directory | 创建目录 | MKD <dirname> | MKD backups |
RMD | Remove Directory | 删除目录 | RMD <dirname> | RMD old_files |
DELE | Delete | 删除文件 | DELE <filename> | DELE temp.txt |
RNFR / RNTO | Rename From / To | 重命名文件 | RNFR old.txtRNTO new.txt | 先发 RNFR,再发 RNTO |
TYPE | Type | 设置传输类型 | TYPE A(ASCII)TYPE I(二进制) | TYPE I |
PORT | Port | 主动模式:客户端告诉服务器“来连我这个IP和端口” | PORT h1,h2,h3,h4,p1,p2 | PORT 192,168,1,100,200,50 → 端口 200×256+50=51250 |
PASV | Passive | 被动模式:服务器返回一个端口,让客户端去连接 | PASV | 227 Entering Passive Mode (192,168,1,10,230,50) |
NOOP | No Operation | 心跳命令,保持连接 | NOOP | NOOP → 200 OK |
📥 三、重点命令详解:RETR 和 STOR
1. RETR filename —— 下载文件
- 作用:从服务器下载指定文件。
- 流程:
- 客户端发送:
RETR myfile.zip - 服务器准备数据连接(通过
PASV或PORT) - 服务器通过数据连接发送文件内容
- 传输完成后返回
226 Transfer complete
- 客户端发送:
⚠️ 如果文件不存在,返回
550 File not found
2. STOR filename —— 上传文件
- 作用:将本地文件上传到服务器。
- 流程:
- 客户端发送:
STOR backup.tar.gz - 服务器准备接收数据(建立数据连接)
- 客户端通过数据连接发送文件内容
- 传输完成后服务器返回
226 Transfer complete
- 客户端发送:
⚠️ 如果目录不可写或磁盘满,返回
553 Could not create file或451 Transfer aborted
🔄 四、数据连接模式:PORT vs PASV
| 模式 | 说明 | 使用场景 |
|---|---|---|
| PORT(主动模式) | 客户端告诉服务器:“请连接我这个 IP 和端口” | 客户端有公网 IP,无防火墙限制 |
| PASV(被动模式) | 服务器告诉客户端:“你来连接我这个端口” | 客户端在 NAT/防火墙后(如家庭网络) |
✅ 现代 FTP 客户端默认使用 PASV 模式,避免客户端被防火墙拦截。
🧪 五、手动使用 FTP 命令示例(命令行)
你可以用 telnet 手动测试 FTP 命令(仅用于学习):
telnet ftp.example.com 21
然后输入:
USER myuser
PASS mypass
PWD
CWD /uploads
PASV
RETR README.txt
QUIT
你会看到类似:
220 FTP Server Ready
331 Password required
230 Login successful
257 "/"
250 Directory changed
227 Entering Passive Mode (192,168,1,10,200,100)
150 Opening data connection
226 Transfer complete
221 Goodbye
🛠️ 六、编程中如何使用这些命令?
在代码中(如 Python、C#、SecureBlackbox),你不需要手动发送 RETR 或 STOR,而是调用高级 API:
Python 示例(ftplib)
from ftplib import FTP
ftp = FTP('192.168.1.10')
ftp.login('user', 'pass')
# 下载文件(自动使用 RETR)
with open('local.zip', 'wb') as f:
ftp.retrbinary('RETR remote.zip', f.write)
# 上传文件(自动使用 STOR)
with open('upload.txt', 'rb') as f:
ftp.storbinary('STOR upload.txt', f)
ftp.quit()
C# / SecureBlackbox
ftpClient.GetFile("remote.txt", "local.txt"); // 内部发送 RETR
ftpClient.PutFile("local.jpg", "remote.jpg"); // 内部发送 STOR
✅ 七、常见问题提示
| 问题 | 可能命令 | 错误码 |
|---|---|---|
| 文件下载失败 | RETR | 550(文件不存在) |
| 上传失败 | STOR | 553(无权限)或 425(无法打开数据连接) |
| 目录列表失败 | LIST | 425(数据连接失败) |
| 登录失败 | USER/PASS | 530(登录失败) |
📝 总结
| 命令 | 用途 |
|---|---|
RETR | 下载文件 |
STOR | 上传文件 |
LIST | 列出文件 |
CWD/PWD | 切换和查看目录 |
PASV/PORT | 控制数据连接方式 |
✅ 记住:
RETR = 下载,STOR = 上传,这是最常用的两个文件传输命令。
版权声明:
本文为 兰舟比特 原创内容,如需转载,请注明出处及作者,禁止未经授权的引用或商用。
6万+

被折叠的 条评论
为什么被折叠?



