1. 程式人生 > 其它 >【轉載】淺談FTP協議的工作方式

【轉載】淺談FTP協議的工作方式

轉載至:https://zhuanlan.zhihu.com/p/34109504

FTP概述:

FTP(File Transfer Protocol)檔案傳輸協議,在TCP/IP協議族中屬於應用層協議運行於TCP協議之上是一種可靠的傳輸協議,主要功能用於實現使用者間檔案分發共享,以及網路管理者在進行裝置版本升級、日誌下載和配置儲存等業務操作時,均會使用到FTP功能。

搭建FTP站點:

FTP協議採用C/S結構,通常我們在實現FTP功能時需要在伺服器上配置IIS來實現FTP-Server端的配置,這種配置方式適合於比較瞭解作業系統的使用者去操作;對於大部分非專業使用者來說推薦使用相應的FTP軟體來實現FTP-Server端的搭建。

常見的FTP-Server軟體有Serv-U、FileZilla 、VsFTP 等。FTP-Server搭建完成之後,Client訪問時可以通過ftp://x.x.x.x方式訪問,也可以通過第三方軟體訪問。如:SmartFTP、FireFTP、8UFTP。

關於具體的FTP-Server搭建操作步驟不再詳細贅述。

FTP的兩個TCP連線:

控制連線(TCP 21埠)主要用於實現FTP協議控制信令傳送,伺服器端開啟TCP 21埠被動等待客戶端發起連線命令;客戶端則以主動方式開啟隨機埠,發起連線的建立請求。

資料連線(TCP 20埠)主要用於實現應用資料傳送,伺服器的資料連線端使用埠20。伺服器執行主動開啟資料連線,通常也執行主動關閉資料連線 。

FTP連線建立方式:

一、主動方式

主動方式也稱為PORT方式,是FTP協議最初定義的資料傳輸連線方式,主要特點是:

FTP客戶端通過向FTP伺服器傳送PORT命令,告訴伺服器該客戶端用於傳輸資料的臨時埠號當需要傳送資料時,伺服器通過TCP埠號20與客戶端的臨時埠建立資料傳輸通道,完成資料傳輸。在建立資料連線的過程中,由伺服器主動發起連線,因此被稱為主動方式。

主動方式FTP建立互動過程

二、被動方式

被動方式也稱為PASV方式,被動方式的主要特點是:

FTP客戶端通過向FTP伺服器傳送PASV命令,告訴伺服器進入被動方式。伺服器選擇臨時埠號並告知客戶端當需要傳送資料時,客戶端主動與伺服器的臨時埠號建立資料傳輸通道,完成資料傳輸。在整個過程中,由於伺服器總是被動接收客戶端的資料連線,因此被稱為被動方式。

被動方式FTP建立互動過程

FTP主動、被動方式的選擇:

當FTP伺服器與FTP客戶端均處於同一區域網內,即兩者之間互訪不存在防火牆或其他安全裝置時,主動方式、被動方式均可實現FTP檔案分發共享。

如果FTP伺服器處於路由器,防火牆或其他NAT裝置之後,建議使用被動模式(passive mode)。因為在主動模式下傳輸資料時,由FTP發起的資料傳輸一般會被客戶端閘道器的防火牆阻斷。

關於主動與被動FTP優缺點的簡要總結:

 主動FTP對FTP伺服器的管理有利,但對客戶端的管理不利。因為FTP伺服器企圖與客戶端的高位隨機埠建立連線,而這個埠很有可能被客戶端的防火牆阻塞掉。

被動FTP對FTP客戶端的管理有利,但對伺服器端的管理不利。因為客戶端要與伺服器端建立兩個連線,其中一個連到一個高位隨機埠,而這個埠很有可能被伺服器端的防火牆阻塞掉。

針對上述防火牆帶來的問題,有折衷的辦法。既然FTP伺服器的管理員需要他們的伺服器有最多的客戶連線,那麼必須得支援被動FTP。我們可以通過為FTP伺服器指定一個有限的埠範圍來減小伺服器高位埠的暴露。這樣,不在這個範圍的任何埠會被伺服器的防火牆阻塞。雖然這沒有消除所有針對伺服器的危險,但它大大減少了危險。

下述內容通過實驗詳細介紹了兩種方式的建立過程:

FTP被動模式

如圖示192.168.1.1為FTP-Server,192.168.1.2為FTP-Client,使用被動方式建立過程如下:

首先FTP在進行控制連發起前,需要先進行基本使用者登入認證以及檔案列表獲取等操作;

1.由客戶端發起FTP連線請求,FTP協議基於TCP,於是先進行TCP三次握手連線,連線伺服器21埠;

2.TCP三次握手建立成功後,伺服器也知道了客戶端需要請求FTP服務,於是要求客戶端提供相應的使用者名稱(客戶端在進行FTP連線時需要傳送使用者名稱和密碼資訊);

3.客戶端收到伺服器的驗證需求後,立即傳送使用者名稱 user = 1;

4.伺服器收到後,確認使用者名稱OK,此時需要客戶端提供password;

5.客戶端傳送password=1;

6.伺服器端使用者名稱密碼驗證成功允許使用者登入;

7. 客戶端登入到伺服器之後開始傳送查詢命令 “PWD”查詢FTP檔案路徑;

8.伺服器回覆客戶端“PWD”查詢,反饋檔案路徑資訊;

9.客戶端開始請求查詢伺服器傳送檔案的方式 ASCII/二進位制;

10.伺服器對客戶端傳送的檔案型別查詢進行響應,回覆檔案傳輸方式為ASCII;

上述1-10步完成了FTP在進行控制連線操作前,基本使用者登入認證以及檔案列表獲取等內容;

11. FTP被動方式,由客戶端傳送“PASV”命令;

12.伺服器收到PASV命令後,知道自己此時為被動方式,則開始生成隨機的資料埠,以提供給客戶端進行資料連線的時候使用;

13.客戶端開始傳送LIST命令查詢檔案列表資訊;

14.在檔案資料傳輸之前,先建立資料傳輸時的TCP三次握手;

15.資料傳輸的三次握手成功後,伺服器開始向客戶端通知自己已經準備就緒,馬上開始檔案傳輸;

16.檔案開始傳輸,在傳輸過程中有TCP對檔案傳輸進行確認;

17.客戶端檔案接收完畢 通過控制鏈路告知伺服器;

18.伺服器收到之後認為檔案傳輸完成,此時關閉資料連線並告知客戶端;

19.客戶端收到伺服器傳送來的關閉資料連線資訊後,則向伺服器在進行確認FTP控制連線斷開過程;

20.由客戶端發起端開請求命令 QUIT;

21.伺服器收到請求後同意斷開 向客戶端傳送goodbye;

22.TCP會話也斷開;

FTP主動模式

連線建立發起前,基本使用者登入認證以及檔案列表獲取等內容與被動方式相同參考上述1-10步驟。

11.由客戶端傳送PORT命令,同時自己隨機生成一個數據埠,並將該埠資訊通過控制鏈路傳送給伺服器;

12.伺服器收到PORT命令之後,此時就知道自己是處於主動模式,並開始與客戶端進行TCP連線;

13.TCP連線成功後,伺服器主動通過控制鏈路告訴客戶端自己已經準備就緒,可以發起資料連線;

14.客戶端開始傳送LIST命令查詢檔案列表資訊;

15.伺服器回覆了相應檔案資訊,並開始準備從資料連線傳送檔案;

16.伺服器開始傳送檔案過程,傳送過程中均有TCP的確認產生;

17檔案傳送完成終止資料連線過程(詳細參考被動連線17-19部分);

18 終止FTP回話與被動終止方式相同(詳細參考被動連線20-22部分)。