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端口),但是它向哪個客戶端口發送連接請求呢?因為客戶是沒有公認端口的,這時就要用到控制連接。客戶控制進程通過控制連接告訴服務器控制進程自己的數據連接端口號;服務器控制進程將它轉告自己的數據傳輸進程,服務器便利用這個端口與客戶建立數據連接。