FTP概述
FTP(File Transfer Protocol)文件傳輸協(xié)議,在TCP/IP協(xié)議族中屬于應(yīng)用層協(xié)議運(yùn)行于TCP協(xié)議之上是一種可靠的傳輸協(xié)議,主要功能用于實(shí)現(xiàn)用戶間文件分發(fā)共享,以及網(wǎng)絡(luò)管理者在進(jìn)行設(shè)備版本升級(jí)、日志下載和配置保存等業(yè)務(wù)操作時(shí),均會(huì)使用到FTP功能。
搭建FTP站點(diǎn)
FTP協(xié)議采用C/S結(jié)構(gòu),通常我們?cè)趯?shí)現(xiàn)FTP功能時(shí)需要在服務(wù)器上配置IIS來(lái)實(shí)現(xiàn)FTP-Server端的配置,這種配置方式適合于比較了解操作系統(tǒng)的用戶去操作;對(duì)于大部分非專業(yè)用戶來(lái)說(shuō)推薦使用相應(yīng)的FTP軟件來(lái)實(shí)現(xiàn)FTP-Server端的搭建。
常見(jiàn)的FTP-Server軟件有Serv-U、FileZilla 、VsFTP 等。FTP-Server搭建完成之后,Client訪問(wèn)時(shí)可以通過(guò)ftp://x.x.x.x方式訪問(wèn),也可以通過(guò)第三方軟件訪問(wèn)。如:SmartFTP、FireFTP、8UFTP。
關(guān)于具體的FTP-Server搭建操作步驟不再詳細(xì)贅述。
FTP的兩個(gè)TCP連接:
控制連接(TCP 21端口)主要用于實(shí)現(xiàn)FTP協(xié)議控制信令傳送,服務(wù)器端打開TCP 21端口被動(dòng)等待客戶端發(fā)起連接命令;客戶端則以主動(dòng)方式打開隨機(jī)端口,發(fā)起連接的建立請(qǐng)求。
數(shù)據(jù)連接(TCP 20端口)主要用于實(shí)現(xiàn)應(yīng)用數(shù)據(jù)傳送,服務(wù)器的數(shù)據(jù)連接端使用端口20。服務(wù)器執(zhí)行主動(dòng)打開數(shù)據(jù)連接,通常也執(zhí)行主動(dòng)關(guān)閉數(shù)據(jù)連接 。
FTP連接建立方式
一、主動(dòng)方式
主動(dòng)方式也稱為PORT方式,是FTP協(xié)議最初定義的數(shù)據(jù)傳輸連接方式,主要特點(diǎn)是:
FTP客戶端通過(guò)向FTP服務(wù)器發(fā)送PORT命令,告訴服務(wù)器該客戶端用于傳輸數(shù)據(jù)的臨時(shí)端口號(hào)當(dāng)需要傳送數(shù)據(jù)時(shí),服務(wù)器通過(guò)TCP端口號(hào)20與客戶端的臨時(shí)端口建立數(shù)據(jù)傳輸通道,完成數(shù)據(jù)傳輸。在建立數(shù)據(jù)連接的過(guò)程中,由服務(wù)器主動(dòng)發(fā)起連接,因此被稱為主動(dòng)方式。
主動(dòng)方式FTP建立交互過(guò)程
二、被動(dòng)方式
被動(dòng)方式也稱為PASV方式,被動(dòng)方式的主要特點(diǎn)是:
FTP客戶端通過(guò)向FTP服務(wù)器發(fā)送PASV命令,告訴服務(wù)器進(jìn)入被動(dòng)方式。服務(wù)器選擇臨時(shí)端口號(hào)并告知客戶端當(dāng)需要傳送數(shù)據(jù)時(shí),客戶端主動(dòng)與服務(wù)器的臨時(shí)端口號(hào)建立數(shù)據(jù)傳輸通道,完成數(shù)據(jù)傳輸。在整個(gè)過(guò)程中,由于服務(wù)器總是被動(dòng)接收客戶端的數(shù)據(jù)連接,因此被稱為被動(dòng)方式。
被動(dòng)方式FTP建立交互過(guò)程
FTP主動(dòng)、被動(dòng)方式的選擇
當(dāng)FTP服務(wù)器與FTP客戶端均處于同一局域網(wǎng)內(nèi),即兩者之間互訪不存在防火墻或其他安全設(shè)備時(shí),主動(dòng)方式、被動(dòng)方式均可實(shí)現(xiàn)FTP文件分發(fā)共享。
如果FTP服務(wù)器處于路由器,防火墻或其他NAT設(shè)備之后,建議使用被動(dòng)模式(passive mode)。因?yàn)樵谥鲃?dòng)模式下傳輸數(shù)據(jù)時(shí),由FTP發(fā)起的數(shù)據(jù)傳輸一般會(huì)被客戶端網(wǎng)關(guān)的防火墻阻斷。
關(guān)于主動(dòng)與被動(dòng)FTP優(yōu)缺點(diǎn)的簡(jiǎn)要總結(jié):
主動(dòng)FTP對(duì)FTP服務(wù)器的管理有利,但對(duì)客戶端的管理不利。因?yàn)镕TP服務(wù)器企圖與客戶端的高位隨機(jī)端口建立連接,而這個(gè)端口很有可能被客戶端的防火墻阻塞掉。
被動(dòng)FTP對(duì)FTP客戶端的管理有利,但對(duì)服務(wù)器端的管理不利。因?yàn)榭蛻舳艘c服務(wù)器端建立兩個(gè)連接,其中一個(gè)連到一個(gè)高位隨機(jī)端口,而這個(gè)端口很有可能被服務(wù)器端的防火墻阻塞掉。
針對(duì)上述防火墻帶來(lái)的問(wèn)題,有折衷的辦法。既然FTP服務(wù)器的管理員需要他們的服務(wù)器有最多的客戶連接,那么必須得支持被動(dòng)FTP。我們可以通過(guò)為FTP服務(wù)器指定一個(gè)有限的端口范圍來(lái)減小服務(wù)器高位端口的暴露。這樣,不在這個(gè)范圍的任何端口會(huì)被服務(wù)器的防火墻阻塞。雖然這沒(méi)有消除所有針對(duì)服務(wù)器的危險(xiǎn),但它大大減少了危險(xiǎn)。
下述內(nèi)容通過(guò)實(shí)驗(yàn)詳細(xì)介紹了兩種方式的建立過(guò)程:
FTP被動(dòng)模式
如圖示192.168.1.1為FTP-Server,192.168.1.2為FTP-Client,使用被動(dòng)方式建立過(guò)程如下:
首先FTP在進(jìn)行控制連發(fā)起前,需要先進(jìn)行基本用戶登錄認(rèn)證以及文件列表獲取等操作;
1.由客戶端發(fā)起FTP連接請(qǐng)求,F(xiàn)TP協(xié)議基于TCP,于是先進(jìn)行TCP三次握手連接,連接服務(wù)器21端口;
2.TCP三次握手建立成功后,服務(wù)器也知道了客戶端需要請(qǐng)求FTP服務(wù),于是要求客戶端提供相應(yīng)的用戶名(客戶端在進(jìn)行FTP連接時(shí)需要發(fā)送用戶名和密碼信息);
3.客戶端收到服務(wù)器的驗(yàn)證需求后,立即發(fā)送用戶名 user = 1;
4.服務(wù)器收到后,確認(rèn)用戶名OK,此時(shí)需要客戶端提供password;
5.客戶端發(fā)送password=1;
6.服務(wù)器端用戶名密碼驗(yàn)證成功允許用戶登錄;
7. 客戶端登錄到服務(wù)器之后開始發(fā)送查詢命令 “PWD”查詢FTP文件路徑;
8.服務(wù)器回復(fù)客戶端“PWD”查詢,反饋文件路徑信息;
9.客戶端開始請(qǐng)求查詢服務(wù)器發(fā)送文件的方式 ASCII/二進(jìn)制;
10.服務(wù)器對(duì)客戶端發(fā)送的文件類型查詢進(jìn)行響應(yīng),回復(fù)文件傳輸方式為ASCII;
上述1-10步完成了FTP在進(jìn)行控制連接操作前,基本用戶登錄認(rèn)證以及文件列表獲取等內(nèi)容;
11. FTP被動(dòng)方式,由客戶端發(fā)送“PASV”命令;
12.服務(wù)器收到PASV命令后,知道自己此時(shí)為被動(dòng)方式,則開始生成隨機(jī)的數(shù)據(jù)端口,以提供給客戶端進(jìn)行數(shù)據(jù)連接的時(shí)候使用;
13.客戶端開始發(fā)送LIST命令查詢文件列表信息;
14.在文件數(shù)據(jù)傳輸之前,先建立數(shù)據(jù)傳輸時(shí)的TCP三次握手;
15.數(shù)據(jù)傳輸?shù)娜挝帐殖晒螅?wù)器開始向客戶端通知自己已經(jīng)準(zhǔn)備就緒,馬上開始文件傳輸;
16.文件開始傳輸,在傳輸過(guò)程中有TCP對(duì)文件傳輸進(jìn)行確認(rèn);
17.客戶端文件接收完畢 通過(guò)控制鏈路告知服務(wù)器;
18.服務(wù)器收到之后認(rèn)為文件傳輸完成,此時(shí)關(guān)閉數(shù)據(jù)連接并告知客戶端;
19.客戶端收到服務(wù)器發(fā)送來(lái)的關(guān)閉數(shù)據(jù)連接信息后,則向服務(wù)器在進(jìn)行確認(rèn)FTP控制連接斷開過(guò)程;
20.由客戶端發(fā)起端開請(qǐng)求命令 QUIT;
21.服務(wù)器收到請(qǐng)求后同意斷開 向客戶端發(fā)送goodbye;
22.TCP會(huì)話也斷開;
FTP 主動(dòng)模式
連接建立發(fā)起前,基本用戶登錄認(rèn)證以及文件列表獲取等內(nèi)容與被動(dòng)方式相同參考上述1-10步驟。
1.由客戶端發(fā)送PORT命令,同時(shí)自己隨機(jī)生成一個(gè)數(shù)據(jù)端口,并將該端口信息通過(guò)控制鏈路發(fā)送給服務(wù)器;
2.服務(wù)器收到PORT命令之后,此時(shí)就知道自己是處于主動(dòng)模式,并開始與客戶端進(jìn)行TCP連接;
3.TCP連接成功后,服務(wù)器主動(dòng)通過(guò)控制鏈路告訴客戶端自己已經(jīng)準(zhǔn)備就緒,可以發(fā)起數(shù)據(jù)連接;
4.客戶端開始發(fā)送LIST命令查詢文件列表信息;
5.服務(wù)器回復(fù)了相應(yīng)文件信息,并開始準(zhǔn)備從數(shù)據(jù)連接發(fā)送文件;
6.服務(wù)器開始發(fā)送文件過(guò)程,發(fā)送過(guò)程中均有TCP的確認(rèn)產(chǎn)生;
7.文件發(fā)送完成終止數(shù)據(jù)連接過(guò)程(詳細(xì)參考被動(dòng)連接17-19部分);
8 .終止FTP回話與被動(dòng)終止方式相同(詳細(xì)參考被動(dòng)連接20-22部分)。