FTP(File Transfer Protocol),主要功能是完成从一个系统到另一个系统完整的文件拷贝。FTP协议要用到两个TCP连接,一个是控制连接,用来在FTP客户端与服务器之间传递命令;另一个是数据连接,用来上传或下载数据。
整个FTP建立连接的过程有以下几步:
第一步:对于一个FTP服务器来说他会自动对默认端口进行监听(默认端口是可以修改的,一般为21),当某个客户机向这个专用端口请求建立连接时便激活了服务器上的控制进程,通过这个控制进程进行用户名密码及权限的验证。
第二步:当验证完成后服务器和客户机之间还会建立另外一条专有连接进行文件数据的传输。
第三步:在传输过程中服务器上的控制进程将一直工作,并不断发出指令操作整个FTP传输,传输完毕后控制进程发送给客户机结束指令。
FTP自身有两种工作模式,也就是说在第二步中提示“建立另外一条专有数据连接方式”的方法有两种。习惯上我们称为主动模式和被动模式:PORT方式和PASV方式。
PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据。
PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。
从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同了。在建立数据连接的过程中,客户控制进程反客为主,成为连接的接受者,而服务器数据传输进程成了连接的请求者。作为新的子进程,服务器传输进程可以申请一个新的端口号建立关联(一般是20端口),但是它向哪个客户端口发送连接请求呢?因为客户是没有公认端口的,这时就要用到控制连接。客户控制进程通过控制连接告诉服务器控制进程自己的数据连接端口号;服务器控制进程将它转告自己的数据传输进程,服务器便利用这个端口与客户建立数据连接。