简而言之:
sysctl -a | grep ip_local_port_range)主动模式FTP
客户端通过端口 21 连接到服务器并建立命令流:
client:32198 -> server:21
客户端必须发送或接收一些数据,因此它通知服务器在某个端口上连接回它。为此,它会发送一个类似于以下内容的 PORT 命令:
PORT 1,2,3,4,5,6
这是客户端通知服务器服务器可以连接回客户端(在端口 (5 * 256) + 6 = 1286 上的地址 1.2.3.4。
server:20 -> client:1286
通常,这是您看到主动模式 FTP 会话终止的地方;对于防火墙和负载均衡器,通常从客户端 -> 服务器流出的流量是预期的,但是服务器发起到客户端的连接经常被拒绝(负载均衡器通常足够聪明,可以将此数据流与现有命令流相关联) )。
您对需要在防火墙上打开端口范围以促进此行为的理解是绝对正确的。
被动模式FTP
在这种情况下,客户端像以前一样建立命令会话:
client:56221 -> server:21
但是当数据被传送时,客户端发送一个PASV命令原语。服务器使用客户端应该连接回的 IP:Port 组合进行响应(与PORT之前的请求格式类似。因此,客户端然后按如下方式连接到服务器:
client:12347 -> server:4566
这绕过了上述主动模式的防火墙问题,因为连接是以传统和预期的方式建立的。
被动模式的缺点是它在服务器上消耗更多的套接字。PASV在重载环境中频繁发布原语最终可能导致端口耗尽。(套接字将在TIME_WAIT操作系统定义的一段时间内保持某种状态(我认为在 Redhat 系统上大约为 2 分钟)。
关于你的问题
除非您真的遇到端口耗尽问题,否则被动模式会失败而主动模式会更频繁地成功是非常不寻常的。通常是相反的。如果您能够发布更多关于偶尔收到的错误的信息,我们可以进一步调试。
我建议尽可能使用被动模式,因此我建议在承认使用主动模式 FTP 之前查看被动模式特定的故障以找到问题的根本原因。
| 归档时间: |
|
| 查看次数: |
3060 次 |
| 最近记录: |