FTP的主、被动模式
最近通过FTP服务器进行文件传输,总是被防火墙拦截,稍微研究了一下FTP访问过程中的两种模式:主动模式、被动模式。FTP只通过TCP连接,但不同于其他服务的是它使用了两个端口, 一个数据端口和一个命令端口(或称为控制端口)。通常21端口是命令端口,20端口是数据端口。(也存在配置新的端口作为命令、数据端口)
主动模式
连接过程: FTP客户端,从任意的非特殊端口Nc(Nc>=1024)前往访问FTP服务器命令端口Ns=21,然后客户端指定端口Nc+1进行监听,等待FTP服务器数据端口的主动请求连接。
请求过程如下图所示:
Nc=1026,Ns=21,数据端口20
问题: FTP 的客户端并不会主动连接到服务器的数据端口,而是是告诉服务器它正在监听哪个端口,然后服务器发起连接到客户端上指定的端口(上图过程3)。但是,这样的连接有时候会被客户端的防火墙阻止。
被动模式
连接过程: FTP 的被动模式,缩写作 PASV,它工作的前提是客户端明确告知 FTP 服务器它使用被动模式。
客户端在本地打开两个随机的非系统端口 Nc 和 Nc + 1(Nc >= 1024)。端口 Nc连接服务器上的 21 端口(默认端口),但是客户端这次将会发出 PASV 命令,也就是不允许服务器连接回其数据端口 Nc + 1。这样,服务器随后会打开一个随机的非系统端口 P (P >= 1024),并将 P 发送给客户端作为 PASV 命令的响应。然后客户端启动从端口 Nc+1 到端口 P 的连接来传输数据。
流程如下图所示:
这样就变成了由客户端发起的主动连接,从FTP服务器来看就是被动连接。
总结
根据主、被动模式的不同,使用被动模式的时候可以避免客户端防火墙问题,但需要开通对服务器的某个大段的端口访问权限。