2009年3月12日星期四

FTP工作原理及使用事项浅析

基础知识

FTP是File Transfer Protocol(文件传输协议)的缩写,用来在两台计算机之间互相传送文件。FTP是TCP/IP的一种古老应用,它工作在OSI模型的第七层,TCP模型的第四层上,即应用层,使用TCP传输而不是UDP,这样FTP客户在和服务器建立连接前就要经过一个被广为熟知的"三次握手"的过程,它带来的意义在于客户与服务器之间的连接是可靠的,而且是面向连接,为数据的传输提供了可靠的保证。 相比于HTTP,FTP协议要复杂些。复杂的原因,是因为FTP协议要用到两个TCP连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。FTP客户连接服务器的整个过程中,命令链路是一直保持连接的,而数据链路是临时建立的。

FTP协议有两种工作方式( 这里都是相对于服务器而言的):
PORT(主动)方式的连接过程是:客户端动态的选择一个1024以上的端口向服务器FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口(大于1024的随机的没有使用的端口),你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据。
PASV(被动)方式的连接过程是:客户端动态的选择一个1024以上的端口向服务器FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口(大于1024的随机的没有使用的端口),你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。


使用事项

从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。而FTP的复杂性就在于此。 PORT模式建立数据传输通道是由服务器端发起的,服务器使用20端口连接客户端的某一个大于1024的端口;在PASV模式中,数据传输的通道的建立是由FTP客户端发起的,他使用一个大于1024的端口连接服务器的1024以上的某一个端口。如果从C/S模型这个角度来说,PORT对于服务器来说是OUTBOUND,而PASV模式对于服务器是INBOUND。

服务器端如果安装了防火墙,请记住要在防火墙上打开FTP端口(默认是21)。为了PASV方式能正常工作,需要在FTP服务器软件上为PASV方式指定可用的端口范围。当客户端以PASV方式连接服务器的时候,服务器就会在这个端口范围里挑选一个端口出来,给客户端连接。不过因为现在的防火墙大多是状态防火墙,能对FTP的连接进行跟踪,临时打开并及时关闭相关数据连接,使得无论FTP工作在何种模式,在防火墙里只要开放FTP控制端口21的访问就能正常进行数据传输。只有在使用非默认的FTP控制端口时才需要作详细的设置,这是需要指定FTP服务器的端口范围并在防火墙里开放这个端口范围。

FTP客户端只有内网IP,没有公网IP时,FTP将无法连接客户端建立数据链路。因此,在这种情况下,客户端必须要用PASV方式,才能连接FTP服务器。比如IE默认使用PORT方式,需要更改。客户端有公网IP但安装了防火墙如果用PASV方式登录FTP服务器,因为建立数据链路的时候,是由客户端向服务器发送连接请求,没有问题。反过来,如果用PORT方式登录FTP服务,因为建立数据链路的时候,是由服务器向客户端发送连接请求,此时连接请求可能会被防火墙拦截。

没有评论:

发表评论