FTP协议有两种工作方式:主动式和被动式,也就是PORT方式和PASV方式。FTP协议要比HTTP复杂。复杂的因素是因为FTP协议要用两个TCP进行连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。
PORT(主动)方式的连接过程是:服务器打开21端口,通知客户端连接,服务端接受连接,建立一条命令链路。在进行传送数据的情况时,客户端就用PORT命令告诉服务器:“****端口被我打开了 ,你可以过来了”。接下来服务器就会从20端口向客户端的****随机端口下达连接指令,建立一条数据链路来传送数据。
PASV(被动)方式的连接过程是:客户端向服务器的FTP21端口下达连接指令,服务器接受指令,建立一条命令链路。在进行传送数据的情况时,服务器就用PASV命令传达给客户端:“我把****随机端口打开了,你可以过来了”的信息。接下来客户端向服务器的****端口下达连接指令,建立一条数据链路来传送数据。
这两种方式的命令链路连接方式是类似的,而数据链路的建立的方式却天差地别,也是表示FTP的复杂性就在这里。