FTP協議有兩種工作方式:主動式和被動式,也就是PORT方式和PASV方式。FTP協議要比HTTP復雜。復雜的因素是因為FTP協議要用兩個TCP進行連接,一個是命令鏈路,用來在FTP客戶端與服務器之間傳遞命令;另一個是數據鏈路,用來上傳或下載數據。
PORT(主動)方式的連接過程是:服務器打開21端口,通知客戶端連接,服務端接受連接,建立一條命令鏈路。在進行傳送數據的情況時,客戶端就用PORT命令告訴服務器:“****端口被我打開了 ,你可以過來了”。接下來服務器就會從20端口向客戶端的****隨機端口下達連接指令,建立一條數據鏈路來傳送數據。
PASV(被動)方式的連接過程是:客戶端向服務器的FTP21端口下達連接指令,服務器接受指令,建立一條命令鏈路。在進行傳送數據的情況時,服務器就用PASV命令傳達給客戶端:“我把****隨機端口打開了,你可以過來了”的信息。接下來客戶端向服務器的****端口下達連接指令,建立一條數據鏈路來傳送數據。
這兩種方式的命令鏈路連接方式是類似的,而數據鏈路的建立的方式卻天差地別,也是表示FTP的復雜性就在這里。