首页/网络/协议速查/FTP 主动模式(PORT)

FTP 主动模式(PORT)

服务器主动回连客户端的数据端口:客户端先声明「连我哪个地址端口」,服务器从自己的 20 端口发起数据连接。

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

主动模式是怎么回事

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 关闭被动模式,切换后现象变化即可定位方向问题。

易错点

  • 服务端未放行出站 20 到客户端高端口,登录成功但 LIST 与 RETR 一直卡住
  • 客户端在 NAT 后仍强制主动模式,表现为连接超时且服务端日志只有 PORT 一行
  • 只放行 21 端口就以为 FTP 全通,忽略数据连接走的是完全不同的端口与方向
  • 把 EPRT 与 PORT 混用在同一策略里,IPv6 场景下端口计算方式不同导致失败

数据来源与参考

  • RFC 959 §3.2(PORT)

相关工具

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