首页/网络/协议速查/FTP 会话全流程

FTP 会话全流程

一次登录下载的完整剧本:欢迎 220 → USER/PASS → 331/230 → TYPE/PASV → RETR(150) → 226 → QUIT(221)。

协议速查网络更新于 2026-10-13

一次 FTP 会话的完整剧本

FTP 是双连接协议:控制连接上全是文本命令与三位应答码,一条命令一次应答;数据连接在真正传文件时才建立。读得懂这条命令应答流水,就能在没有任何图形客户端的情况下判断问题出在认证、模式协商还是数据通道。

基本信息

控制端口TCP 21(FTPS 显式升级仍从 21 开始)
应答码1xx 中间态、2xx 成功、3xx 需更多信息、4xx 暂时失败、5xx 永久失败
关键命令USER/PASS、TYPE、PASV/PORT、RETR/STOR、QUIT
能力发现FEAT 列出服务端支持的扩展,如 AUTH TLS、UTF8、MLSD
传输模式TYPE I 二进制、TYPE A 文本(换行转换)

典型使用场景

  • 服务器无图形客户端时手工登录排查传输异常
  • 对接老式设备或脚本前先确认服务端支持哪些扩展能力
  • 抓包后按应答码顺序还原会话,定位是认证还是数据连接失败
  • 迁移前评估服务端是否支持 UTF-8 文件名与 FTPS

完整会话

完整会话
S: 220 FTP server ready
C: USER alice
S: 331 Password required
C: PASS ****
S: 230 Login successful.
C: FEAT
S: 211-Features:
S:  AUTH TLS
S:  UTF8
S: 211 End
C: TYPE I
S: 200 Switching to Binary mode.
C: PASV
S: 227 Entering Passive Mode (10,0,0,5,195,80)
C: RETR report.xlsx
S: 150 Opening BINARY mode data connection
S: 226 Transfer complete.
C: QUIT
S: 221 Goodbye.

常用应答码逐列读法

应答码含义排障含义
220 / 221服务就绪 / 正常退出欢迎与收尾,正常
331 / 230需要口令 / 登录成功331 停在认证,多为口令或账号问题
227 / 229被动模式地址与端口227 是 IPv4,229 是扩展被动 EPSV
150 / 226数据连接已开 / 传输完成只出 150 无 226 说明数据连接断了
530 / 550未登录 / 请求被拒550 常为路径不存在或权限不足
FEAT 的输出就是服务端能力清单:要用 UTF-8 文件名先看 UTF8 行,要显式加密看 AUTH TLS 行,要看文件修改时间看 MLST 行;能力缺失时应改用兼容命令。

手工复现要点

  • 用 nc host 21 连接后逐条敲命令,服务端每步应答都会原样打印,不需要抓包也能看流程
  • 涉及 TLS 的服务端要先 AUTH TLS 再登录,否则多数实现直接拒绝 USER
  • 传文件前先 TYPE I,尤其是压缩包、镜像与可执行文件
  • 结束务必发 QUIT(期望 221),直接断开会让服务端等待超时并留下半开会话
PASV 应答里的数字是 IP 与端口的十进制编码,例如 10,0,0,5,195,80 表示 10.0.0.5 的 195*256+80=50000 端口;服务端若返回内网地址,客户端在公网就会连不上。

易错点

  • 登录后直接传文件而跳过 TYPE I,服务端按 ASCII 处理,二进制大文件可能被改坏
  • PASV 返回私网地址时只怀疑客户端防火墙,实际要在服务端配置对外通告地址
  • 把 150 当成功就结束排查,最终 226 未到说明数据连接中途断开
  • 在 993/995 这类端口习惯性用明文工具连 21,忽略服务端可能已强制 FTPS

数据来源与参考

  • RFC 959
  • RFC 2389(FEAT/OPTS)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌