一、FTP概述
- FTP(File Transfer Protocol,文件传输协议)用于客户端与服务端之间共享、上传、下载文件。
- 基于 TCP 协议,使用两个连接:
- 控制连接:传输FTP命令,默认端口 21。
- 数据连接:上传/下载数据,默认端口 20。
- 两种工作模式:主动模式、被动模式。
二、被动模式(Passive Mode)
流程:
- 客户端连接服务器 21 端口(命令端口)。
- 客户端发送 PASV 命令,请求服务器进入被动模式。
- 服务器打开一个监听端口(如 13365),并通知客户端。
- 客户端主动连接服务器的监听端口,建立数据连接。
- 进行文件传输(如 dir、get 等命令)。
- 传输完成后,四次挥手断开连接。
被动模式 (PASV):客户端主动连接服务器
客户端(随机端口) ---> 服务器(21端口) [建立命令通道]客户端发送 PASV 命令,请求服务器开启一个数据端口。服务器通过命令通道回复:"我开了一个数据端口(比如端口 20010),你主动连我吧!"客户端(新随机端口) ---> 服务器(20010 端口) [建立数据通道]
特点:
- 服务器被动等待客户端连接数据端口。
- 适用于客户端有防火墙或NAT环境,因为数据连接由客户端发起。
三、主动模式(Active Mode)
流程:
- 客户端连接服务器 21 端口(命令端口)。
- 客户端打开一个监听端口,通过 PORT 命令告知服务器。
- 服务器通过 20 端口主动连接客户端的监听端口,建立数据连接。
- 进行文件传输。
- 传输完成后,四次挥手断开连接。
主动模式 (PORT):服务器主动连接客户端
客户端(随机端口) ---> 服务器(21 端口) [建立命令通道]客户端通过命令通道告诉服务器:"我开了一个数据端口(比如端口 5000),你主动连我吧!"服务器(20 端口) ---> 客户端(5000 端口) [建立数据通道]
特点:
- 服务器主动连接客户端数据端口。
- 适用于服务器端防火墙简单,客户端端口开放的环境。
四、FTP常用命令
- 目录操作:dir、ls、cd、pwd
- 文件操作:rename、delete、get、put、mget、mput
- 会话管理:close、quit、bye
- 帮助:help [cmd]
五、服务器回应不可路由的地址。使用服务器地址代替
原因是 FTP 服务器配置错了,它在被动模式下,把自己的内网IP地址发给了你的客户端,这个地址在公网上无法路由,所以客户端就用服务器的公网地址重试了。
很多 FTP 服务器(比如 ProFTPD、Pure-FTPd)在配置时,默认会读取服务器网卡上配置的IP地址。如果服务器位于一个NAT(网络地址转换)网络环境中(例如云服务器),它的网卡上配置的通常是私有 IP(如 192.168.x.x、172.16.x.x )。当它把这个私有IP回复给你时,你的客户端在公网上自然无法连接,于是报错“不可路由的地址”。
像 FileZilla 这样的智能客户端,会检测到这个错误,并自动用你最初连接的服务器公网地址去尝试连接(这就是提示里“使用服务器地址代替”的部分),如果端口也能通,那么连接可能最终会成功。
六、为什么会有这两种模式?
这主要是为了适应不同的网络环境,尤其是防火墙的存在。
主动模式的困境
在主动模式下,服务器需要主动连接客户端的一个随机端口。
问题:现在绝大多数的客户端都处于路由器或防火墙后面(NAT 环境)。路由器通常只允许内部发起的连接返回数据,而会拦截外部主动发起的连接。结果:当服务器(公网)试图主动连接客户端电脑(内网,如 192.168.1.5)的端口 5000 时,客户端的路由器会因为没有这条"连接记录"而直接拒绝服务器的连接请求。这就是主动模式在现代网络环境下常常失败的原因。
被动模式的优势
在被动模式下,整个过程都是由客户端主动发起连接。
优势:防火墙和路由器通常被配置为允许内部发起的对外连接以及对应的返回数据。既然数据连接也是由客户端主动发起的,它看起来就像正常的网页浏览请求一样,能够顺利通过防火墙。结果:只要服务器允许客户端连接它的数据端口,传输就能成功。
总结:
- 被动模式更常用,适合客户端有防火墙或 NAT 的场景。
- 主动模式适合服务器端管理简单,客户端端口开放的场景。
(内容由 AI 汇总生成,请留意)