【网络通信】FTP的基础与核心命令

💌 所属专栏:【网络通信】
😀 作  者:兰舟比特 🐾
🚀 个人简介:热爱开源系统与嵌入式技术,专注 Linux、网络通信、编程技巧、面试总结与软件工具分享,持续输出实用干货!
💡 欢迎大家:这里是兰舟比特的技术小站,喜欢的话请点赞、收藏、评论三连击!有问题欢迎留言交流😘😘😘


📚 一、FTP 命令基础

FTP 使用 文本命令 + 参数 的方式通信,通过 控制连接(端口 21) 发送命令,数据连接(端口 20 或动态端口) 传输文件或目录列表。

每个命令都有一个 3位响应码,如:

  • 220:服务就绪
  • 226:传输完成
  • 550:文件不可用
  • 230:登录成功

🔤 二、常用 FTP 命令详解(含 RETR)

命令全称含义语法示例
USERUser指定用户名USER <username>USER alice
PASSPassword发送密码PASS <password>PASS secret123
QUITQuit退出会话QUITQUIT
RETRRetrieve下载文件(从服务器取回)RETR <filename>RETR report.pdf
STORStore上传文件(保存到服务器)STOR <filename>STOR photo.jpg
LISTList列出当前目录内容LIST [pathname]LIST /docs
NLSTName List仅列出文件名(简洁格式)NLST [dirname]NLST
CWDChange Working Directory切换当前目录CWD <directory>CWD /upload
CDUPChange to Parent Directory返回上级目录CDUPCDUP
PWDPrint Working Directory显示当前目录PWDPWD257 "/home/alice"
MKDMake Directory创建目录MKD <dirname>MKD backups
RMDRemove Directory删除目录RMD <dirname>RMD old_files
DELEDelete删除文件DELE <filename>DELE temp.txt
RNFR / RNTORename From / To重命名文件RNFR old.txt
RNTO new.txt
先发 RNFR,再发 RNTO
TYPEType设置传输类型TYPE A(ASCII)
TYPE I(二进制)
TYPE I
PORTPort主动模式:客户端告诉服务器“来连我这个IP和端口”PORT h1,h2,h3,h4,p1,p2PORT 192,168,1,100,200,50 → 端口 200×256+50=51250
PASVPassive被动模式:服务器返回一个端口,让客户端去连接PASV227 Entering Passive Mode (192,168,1,10,230,50)
NOOPNo Operation心跳命令,保持连接NOOPNOOP200 OK

📥 三、重点命令详解:RETRSTOR

1. RETR filename —— 下载文件

  • 作用:从服务器下载指定文件。
  • 流程
    1. 客户端发送:RETR myfile.zip
    2. 服务器准备数据连接(通过 PASVPORT
    3. 服务器通过数据连接发送文件内容
    4. 传输完成后返回 226 Transfer complete

⚠️ 如果文件不存在,返回 550 File not found

2. STOR filename —— 上传文件

  • 作用:将本地文件上传到服务器。
  • 流程
    1. 客户端发送:STOR backup.tar.gz
    2. 服务器准备接收数据(建立数据连接)
    3. 客户端通过数据连接发送文件内容
    4. 传输完成后服务器返回 226 Transfer complete

⚠️ 如果目录不可写或磁盘满,返回 553 Could not create file451 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),你不需要手动发送 RETRSTOR,而是调用高级 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

✅ 七、常见问题提示

问题可能命令错误码
文件下载失败RETR550(文件不存在)
上传失败STOR553(无权限)或 425(无法打开数据连接)
目录列表失败LIST425(数据连接失败)
登录失败USER/PASS530(登录失败)

📝 总结

命令用途
RETR下载文件
STOR上传文件
LIST列出文件
CWD/PWD切换和查看目录
PASV/PORT控制数据连接方式

✅ 记住:RETR = 下载STOR = 上传,这是最常用的两个文件传输命令。


版权声明:

本文为 兰舟比特 原创内容,如需转载,请注明出处及作者,禁止未经授权的引用或商用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兰舟比特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值