FTP(File Transfer Protocol)的缩写,即文件传输协议。其是TCP/IP协议族中的一种具体应用,它工作在OSI模型的第七层,即应用层上,其使用TCP协议传输,即FTP传输的所有文件都是通过“三次握手”实现,也就是说当客户端与服务器端之间的数据包传输,一旦出现丢包现象,会重新传输,以保证数据的可靠。
FTP协议要使用两个TCP连接传送数据,一个是命令连接,用来在FTP客户端与服务器之间传递命令;另一个是数据连接,用来上传或下载数据。这就直接导致FTP需要2个端口,一个端口用于控制连接,即21端口,发送指令给服务器以及等待服务器响应;另一个端口是数据传输端口,端口号为20,是用来建立数据传输通道。
FTP的连接模式有两种,PORT(主动模式)和PASV(被动模式),主动模式的连接过程是:客户端动态的选择一个端口(这个端口号一定是1024以上的,因为1024以前的端口都已经预先被定义好)向服务器端的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一个命令连接。当需要传送数据时或者列出服务器的文件列表时(通常使用ls或dir命令),客户端通过命令连接告诉服务器(使用PORT命令):“我已经打开了XX端口,请你过来连接”。于是服务器使用20端口向客户端的XX端口发送连接请求,建立一条数据连接来传送数据。
被动模式:客户端首先使用与主动连接模式相同的方法与服务器建立命令连接。当需要传送数据时,客户端通过命令连接告诉服务器(使用PASV命令)“我要连接你的XX端口,请问是否空闲”,如果恰好该端口空闲,服务器会告诉客户端:“你请求的端口空闲,可以建立连接(ACK确认信息)”,否则服务器会说“该端口已经占用,请换个端口(UNACK信息)”。如果客户端得到的是空闲的提示,就会利用该端口建立连接,否则就换个端口重新尝试,这也就是所谓的连接建立的协商过程。
区分主动模式和被动模式的主要目的是:并不是所有的FTP服务都支持这两种连接模式,例如:微软自带的FTP命令客户端就不支持被动模式,如果设置错了客户将无法连接。