ftp-data 是什么
20 是 FTP 主动模式下的数据通道端口。FTP 用两条连接工作:21 传控制命令,数据传输另开一条连接。主动模式下服务器从自己的 20 端口主动连回客户端指定的随机端口,因此客户端侧的防火墙必须允许入站;被动模式则由客户端连到服务器随机开放的高位端口,对客户端更友好,也是现代默认选择。
基本信息
| 服务 | FTP 数据通道(主动模式) |
|---|---|
| 协议 | TCP,源端口固定为 20 |
| 规范 | RFC 959 |
| 控制通道 | 21/tcp |
| 现状 | 被动模式下不再使用 20 |
典型使用场景
- 老系统对接:设备或软件只实现了 FTP 主动模式
- 抓包判定:确认实际生效的是主动还是被动模式
- 排查传输失败:能登录但列不出目录,多半是数据通道被拦
- 防火墙梳理:确认被动模式的端口范围是否已放行
- 迁移评估:把明文 FTP 换成加密形态或更现代的传输方式
主动 / 被动模式对照
| 模式 | 数据连接方向 | 防火墙友好度 |
|---|---|---|
| 主动 PORT | 服务器 20 端口到客户端随机端口 | 差,客户端需放行入站 |
| 被动 PASV | 客户端到服务器随机高位端口 | 好,现代默认 |
| 被动端口范围 | 由服务器配置固定 | 需在服务端与防火墙同步 |
| 加密形态 | FTPS 显式 21 / 隐式 990 | SFTP 属 SSH,与 FTP 无关 |
模式判定与端口核对
模式判定与端口核对
sudo tcpdump -ni eth0 'tcp port 21 or tcp port 20' -c 20 # 看数据连接方向
ftp -p 192.0.2.10 # 强制被动模式
curl --ftp-port - ftp://192.0.2.10/ # 强制主动模式做对比
ss -lntp | grep -E ':(20|21)\b'排查 FTP 传输失败时,先确认数据通道模式与防火墙策略,再看 20 端口是否存在监听;能登录、能改目录却不能列目录,是最典型的数据通道被拦症状。
不要把 SFTP 与 FTP 混为一谈:SFTP 走 SSH,端口与 20/21 无关;把 SFTP 当加密版 FTP 配置,会在防火墙与客户端设置上同时走偏。
运维建议
- 新部署一律走被动模式并固定端口范围
- 服务端与防火墙同步维护端口范围,避免范围变更后中断
- 能用 SFTP 或对象存储替代的流程优先替换加密形态
- 保留传输日志,便于区分是权限问题还是通道问题