主动模式是怎么回事
FTP 把控制连接与数据连接分开:控制连接是客户端主动连服务端的 21 端口,数据连接的方向则有讲究。主动模式(PORT)里客户端先把自己的地址和端口告诉服务端,再由服务端从自己的 20 端口回连客户端,因此得名主动;它要求客户端所在网络允许被外部主动连入。
基本信息
| 控制端口 | TCP 21(客户端连服务端) |
|---|---|
| 数据端口 | 服务端出站用 TCP 20,客户端侧端口由客户端指定 |
| 命令 | IPv4 用 PORT,IPv6 用 EPRT |
| 适用 | 两端都在同一内网、无 NAT、防火墙可控的场景 |
| 现代默认 | 主流客户端默认改用被动模式(PASV) |
典型使用场景
- 内网老式 FTP 服务或老设备只支持主动模式时的兼容对接
- 需要服务端固定源端口(20)便于防火墙策略的场景
- 与被动模式对照验证,快速定位卡在数据连接方向而非认证
- 排查公网客户端连不上:确认是否被 NAT 把私网地址发给了服务端
PORT 命令交互
PORT 命令交互
C: PORT 192,168,1,20,195,80 # 请连 192.168.1.20:50000(195*256+80)
S: 200 PORT command successful
C: RETR file.zip
S: 150 Opening BINARY mode data connection
(服务端从 20 端口回连客户端 50000 端口)
S: 226 Transfer complete
C: QUIT
S: 221 Goodbye两种模式对照
| 对比项 | 主动模式 PORT | 被动模式 PASV |
|---|---|---|
| 连接发起方 | 服务端发起数据连接 | 客户端发起数据连接 |
| 服务端端口 | 固定 20 | 临时高端口,范围可配 |
| 客户端 NAT 影响 | 私网地址发给服务端,回连常失败 | 客户端主动连出,穿透友好 |
| 防火墙要点 | 放行服务端出站 20 | 放行服务端被动端口范围 |
客户端在 NAT 后面时,PORT 命令里填的是自己的私网地址,服务端根本无法回连:这是主动模式在公网几乎不可用的根本原因,不要靠改客户端地址参数硬凑。
curl 与 lftp 都支持切换模式对照验证:curl 用 -P 指定源地址接口,lftp 用 set ftp:passive-mode off 关闭被动模式,切换后现象变化即可定位方向问题。