大多数的TCP服务是使用单个端口的连接,一般是用户向服务器的一个某个端口发起连接,然后使用这个连接进行通讯。但FTP协议却是例外,它使用双向的多个连接
,而且使用的端口很难预计。
FTP连接包括:一个控制连接 (control
connection)
这个连接用于传递客户端的命令和服务器端对命令的响应。它使用周知的TCP21端口,生存期是整个FTP会话时间。
N个数据连接 (data
connection)这些连接用于传输文件和其它数据,例如:目录列表等。这种连接在需要数据传输时建立,而一旦数据传输完毕就关闭,每次使用的端口也不一定相同。而且,这种数据
连接既可能是客户端发起的,也可能是服务器端发起的。
FTP协议使用一个标准的端口20作为ftp-data端口,但是这个端口只用于连接的源地址是服务器端的情况,在这个端口上根本就没有监听进程。
主动与被动模式
FTP的数据连接和控制连接的方向一般是相反的,即服务器向客户端发起一个用于数据传输的连接。连接的端口是由服务器端和客户端协商确定的,这就是vsftpd的主动模式(port
mod)。FTP协议的这个特征对iptables防火墙和NAT的配置增加了很多困难。在FTP被动模式 (passive
mod)下,数据连接是由客户程序发起的,和主动模式相反。
选择模式的原则
1、client 没有防火墙时,用主动模式连接即可
2、server 没有防火墙时,用被动模式即可
3、双方都有防火墙时,vsftpd 设置被动模式高端口范围,server 打开那段范围,