FTP工作原理:
通过FTP传输文件,双方需要建立两个TCP连接,一个是控制连接,一个是数据连接。
控件连接用于传输FTP命令。数据连接用于传输文件。
建立控制连接后,用户通过客户机进程向服务器进程发送命令,服务器执行命令,然后将执行结果返回到客户端。
FTP数据连接,服务器向客户端发起一个用于数据传输的连接,连接的端口是由服务器端和客户端协商确定的。
以下载为例:
客户端首先与服务器的21端口建立控制连接,然后提供用户名和密码,经服务器验证认为合法后,客户端将自己监听的端口号告诉服务器,服务器再与客户端建立连接。此后,客户端通过控制连接向服务器发送下载文件的命令,服务器接收到命令后,如果执行成功,通过控制连接向客户端发送响应码,并将文件数据通过数据连接返回给客户端。
FTP的数据传输方式:一是使用ASCII传输方式,二是二进制传输方式。ASCII仅适用于传输包含英文的命令和参数。二进制可传输含中文信息。
文件传输模式:一种是主动模式(Port),二是被动模式(PASV)
主动模式是从服务器向客户端发起数据连接请求。
被动模式是客户端向服务器发起数据连接请求。
主动模式:FTP客户端先用一个端口N(N>1024)向服务器的21号端口发起控制连接,连接成功后,再发出PORT N+1 命令告诉服务器自己监听的端口号为N+1。服务器到该命令后,用一个新的数据端口(一般是20)与客户端的端口N+1建立连接,然后进行文件数据传输,而客户端则通过监听N+1端口接收文件数据。
被动模式:控制连接请求和数据连接请求都是由客户端发起。FTP客户端先随机开启一个端口N向服务器的21号端口发起控制连接,然后向服务器发送PASV命令,服务器收到此命令后,会用一个新的端口P(P>1024)进行监听,同时将该端口号告诉客户端,客户端收到响应命令后,再通过新的端口号N+1连接服务器的端口P,然后进行文件传输。