三位码怎么读
FTP 对每个命令都返回三位应答码:第一位是结果大类(1 表示预备、2 表示成功、3 表示还需要更多信息、4 表示临时失败可以重试、5 表示永久失败),第二位表示子类,第三位是细分。看懂首答码就能判断卡在登录、目录切换还是数据传输这一步。
后两位提供什么信息
第二位与第三位把同一大类拆得更细:5xx 里 50x 多指语法或命令本身有问题,53x 与登录和权限相关,55x 则是文件系统层面的拒绝。同一个前缀下末位不同,往往对应同一类问题的不同成因。
基本信息
| 编码规则 | 首位表示结果类别,中间位与末位表示子类 |
|---|---|
| 4xx | 临时失败,稍后重试有意义 |
| 5xx | 永久失败,重试通常无意义 |
| 常见成功码 | 220 欢迎、230 登录成功、213 文件状态、226 传输完成 |
典型使用场景
- 排查上传失败:先看 530 判断登录状态,再看 550 判断权限或路径
- 排查数据连接:150 之后长时间不动多半是数据通道没建起来
- 判断服务端是否强制加密:534 与 535 常出现在强制 TLS 的场景
- 对接老旧系统时快速识别其行为差异
观察应答码
观察应答码
ftp -v ftp.example.com # 交互登录并显示每一步应答码
quote SYST # 查看服务器系统类型,返回 215
quote FEAT # 查看服务器支持的扩展特性
quote SIZE filename # 用 213 应答确认文件大小FTP 应答码
| 码 | 含义 | 场景 |
|---|---|---|
| 120 | 服务就绪(稍后) | 少见首答 |
| 125 与 150 | 数据连接已打开或将打开 | 列目录与取文件前的预告 |
| 200 | 命令成功 | 类型或端口设置 |
| 202 | 命令冗余未执行 | 无实际动作 |
| 211 与 212 | 系统状态与目录状态 | 状态查询应答 |
| 213 | 文件状态 | 大小与修改时间查询常用 |
| 214 | 帮助文本 | 帮助命令应答 |
| 215 | 系统类型 | 系统标识查询应答 |
| 220 | 服务就绪(欢迎) | 连接后的首答 |
| 221 | 退出登录 | 退出应答 |
| 226 | 数据连接完成 | 传输成功的收尾码 |
| 227 | 进入被动模式 | 被动模式应答,含地址与端口 |
| 229 | 进入扩展被动模式 | 扩展被动模式应答 |
| 230 | 登录成功 | 口令校验之后 |
| 234 | 安全升级就绪 | 请求 TLS 升级后的应答 |
| 331 | 需要口令 | 用户名之后 |
| 332 | 需要账号 | 特殊计费场景 |
| 350 | 等待进一步命令 | 重命名第一步之后 |
| 421 | 服务不可用,关闭控制连接 | 临时性失败 |
| 425 与 426 | 数据连接无法打开或连接中断 | 被动模式失败或传输被中断 |
| 450 与 451 与 452 | 临时失败、本地错误、空间不足 | 稍后重试 |
| 500 | 语法错误 | 命令拼写问题 |
| 501 | 参数错误 | 参数格式不对 |
| 502 | 命令未实现 | 扩展不支持 |
| 503 | 命令顺序错误 | 未登录先取文件 |
| 504 | 参数未实现 | 参数本身不受支持 |
| 530 | 未登录 | 需要先完成登录 |
| 534 与 535 | 策略拒绝、拒绝明文口令 | 强制加密场景 |
| 550 | 动作未执行(权限或不存在) | 最常见的拒绝码 |
| 552 | 存储超限 | 超出配额 |
| 553 | 文件名不允许 | 非法文件名 |
升级到加密传输后遇到 534 与 535,先确认服务端是否强制 TLS:强制加密的服务器会拒绝任何明文登录尝试。
把 425 当成认证问题查会白费功夫:它表示数据连接建不起来,排查方向在被动端口范围与地址映射上,与账号无关。