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步驟。
1.由客戶端發送PORT命令,同時自己随機生成一個數據端口,并将該端口信息通過控制鍊路發送給服務器;
2.服務器收到PORT命令之後,此時就知道自己是處于主動模式,并開始與客戶端進行TCP連接;
3.TCP連接成功後,服務器主動通過控制鍊路告訴客戶端自己已經準備就緒,可以發起數據連接;
4.客戶端開始發送LIST命令查詢文件列表信息;
5.服務器回複了相應文件信息,并開始準備從數據連接發送文件;
6.服務器開始發送文件過程,發送過程中均有TCP的确認産生;
7.文件發送完成終止數據連接過程(詳細參考被動連接17-19部分);
8 .終止FTP回話與被動終止方式相同(詳細參考被動連接20-22部分)。
,