FTP(文件傳輸協(xié)議)是互聯(lián)網(wǎng)上使用最廣泛的文件傳輸協(xié)議,。使用FTP的交互式訪問允許客戶指定文件的類型和格式(如指明是否使用ASCII碼),,并允許文件具有訪問權(quán)限(如訪問文件的用戶必須獲得授權(quán)并輸入有效密碼)。
文件傳輸協(xié)議有基于TCP的FTP和基于UDP的TFTP,,是文件共享協(xié)議的一大類,,也就是拷貝整個文件,。它們的特點是:如果你想訪問一個文件,你必須首先獲得該文件的本地副本,。如果要修改文件,,只能修改文件的副本,然后將修改后的文件發(fā)送回原節(jié)點,。
FTP屏蔽了每個計算機(jī)系統(tǒng)的細(xì)節(jié),因此適合在異構(gòu)網(wǎng)絡(luò)中的任何計算機(jī)之間傳輸文件。FTP只提供一些基本的文件傳輸服務(wù),。它使用TCP來可靠地傳輸服務(wù),。FTP的主要作用是減少或消除不同系統(tǒng)處理文件的不兼容性,。
使用FTP客戶端-服務(wù)器模型,一個FTP服務(wù)器進(jìn)程可以為多個客戶端進(jìn)程提供服務(wù),。FTP服務(wù)器由兩部分組成:一個主進(jìn)程,,負(fù)責(zé)接受新的請求;還有幾個從屬進(jìn)程,,負(fù)責(zé)處理單個請求,。主要流程工作步驟
打開熟悉的端口(21),讓客戶端進(jìn)程可以連接,,等待客戶端進(jìn)程發(fā)送連接請求,。啟動從屬進(jìn)程處理客戶端進(jìn)程發(fā)送的連接請求,在從屬進(jìn)程處理完請求后結(jié)束,。在運行過程中,,從進(jìn)程可以根據(jù)需要創(chuàng)建其他子進(jìn)程返回等待狀態(tài),繼續(xù)接受其他客戶端進(jìn)程發(fā)起的請求,。主進(jìn)程和從進(jìn)程的處理是并發(fā)的,。
FTP的工作條件
FTP連接在整個會話期間保持打開,僅用于發(fā)送連接/傳輸請求,。當(dāng)客戶機(jī)進(jìn)程向服務(wù)器發(fā)送連接請求時,,它尋找連接到服務(wù)器進(jìn)程的眾所周知的端口21,同時告訴服務(wù)器進(jìn)程它的另一個端口號,,用于建立數(shù)據(jù)傳輸連接,。然后,服務(wù)器進(jìn)程使用其自己的眾所周知的用于數(shù)據(jù)傳輸?shù)亩丝?0來與客戶端進(jìn)程提供的端口號建立數(shù)據(jù)傳輸連接,。FTP使用兩個不同的端口號,,所以數(shù)據(jù)連接和控制連接不會混淆,。
1.1 FTP數(shù)據(jù)表示
FTP協(xié)議規(guī)定了多種控制協(xié)議傳輸和存儲的選項,,必須在以下四個方面做出選擇,。
文件類型:ASCII碼文件(默認(rèn))/鏡像文件類型(二進(jìn)制)/本地文件類型(用于在不同字節(jié)大小的主機(jī)之間傳輸二進(jìn)制數(shù)據(jù))格式控制:該選項適用于ASCII類型文件,非打印(默認(rèn)選擇,,文件不包含垂直格式信息)/Telnet格式控制結(jié)構(gòu):文件結(jié)構(gòu)(默認(rèn)選擇,,文件被認(rèn)為是連續(xù)的字節(jié)流,,沒有內(nèi)部文件結(jié)構(gòu))/記錄結(jié)構(gòu)(對于文本文件)傳輸模式:流模式(模式選擇,, 文件以字節(jié)流模式傳輸,對于文件結(jié)構(gòu),,發(fā)送方在文件末尾提示關(guān)閉數(shù)據(jù)連接,,對于記錄結(jié)構(gòu),有專門的雙字節(jié)序列碼記錄結(jié)束,,文件結(jié)束)/塊模式(文件以一系列塊的形式傳輸,,每個塊前面有一個或多個頭字節(jié))/壓縮模式,。
1.2 FTP命令和響應(yīng)
并且命令響應(yīng)在客戶端和服務(wù)器之間的控制連接上以NVT ASCII碼傳輸,。這要求C R和L F對(即每個命令或每個回復(fù))應(yīng)該在每行的末尾返回。這些命令都是3或4字節(jié)的大寫ASCII字符,,其中一些有選項參數(shù),。有30多條FTP命令從客戶端發(fā)送到服務(wù)器。下圖是一些常見的命令:
響應(yīng)都是S . C . I . I代碼形式的3位數(shù)字,,后跟消息選項。原因是軟件系統(tǒng)需要根據(jù)數(shù)字代碼決定如何回答,,選項串面向手工處理,。因為客戶通常輸出數(shù)字答案和消息串,,所以交互式用戶可以通過讀取消息串來確定答案的含義(而無需記住所有數(shù)字答案代碼的含義),。
FTP有兩種工作模式,,即主動模式(端口)和被動模式(PASV),。這兩種模式都是根據(jù)FTP服務(wù)器的“角度”。更通俗的說,,傳輸數(shù)據(jù)時,,如果服務(wù)器主動連接客戶端,,就是主動模式,;如果客戶端主動連接到服務(wù)器,則是被動模式,。有關(guān)主動模式和被動模式的更詳細(xì)說明,,請單擊:說明FTP的主動模式和被動模式以及客戶端設(shè)置,。
3.1如何知道文件的FTP傳輸結(jié)束,?
這是一個經(jīng)典的問題,,也是面試中被問到的問題,。如前所述,,一般的傳輸方式是流模式,通過關(guān)閉數(shù)據(jù)連接來標(biāo)記文件的結(jié)束,,這意味著每次文件傳輸或目錄列表都要建立一個全新的數(shù)據(jù)連接,。一般流程如下:
因為是客戶發(fā)出建立數(shù)據(jù)連接的命令,所以數(shù)據(jù)連接是在客戶的控制下建立的,。通常,,客戶在客戶主機(jī)上為數(shù)據(jù)連接端選擇一個臨時端口號??蛻舳藦脑摱丝诎l(fā)出被動打開,。客戶端通過使用端口命令將端口號碼從控制連接發(fā)送到服務(wù)器,。服務(wù)器接收控制連接上的端口號,,并主動打開客戶端主機(jī)上的端口。服務(wù)器的數(shù)據(jù)連接端總是使用端口2 0,。
圖27- 4顯示了執(zhí)行步驟3時的連接狀態(tài),。假設(shè)客戶用于控制連接的臨時端口是11 7 3,客戶用于數(shù)據(jù)連接的臨時端口是11 7 4,??蛻舭l(fā)出的命令是PORT命令,它的參數(shù)是ASCII中的六位十進(jìn)制數(shù)字,,用逗號分隔,。前四位數(shù)字表示客戶的I P地址,服務(wù)器將向其發(fā)送一個活動的開放地址(本例中為140.252.13.34),,后兩位數(shù)字表示16位端口地址,。由于16位端口地址源自這兩個數(shù)字,因此在本例中其值為4256 150=1174,。
圖27-5顯示了服務(wù)器向客戶端所在的數(shù)據(jù)連接終端發(fā)出主動打開時的連接狀態(tài),。服務(wù)器的端點是端口2 0,。
服務(wù)器總是主動打開數(shù)據(jù)連接。通常,,服務(wù)器還執(zhí)行數(shù)據(jù)連接的主動關(guān)閉,,除非當(dāng)客戶端以流形式向服務(wù)器發(fā)送文件時,,要求客戶端關(guān)閉連接(它向服務(wù)器發(fā)出文件結(jié)束的通知),。
參考資料:
1.《計算機(jī)網(wǎng)絡(luò)》 FTP協(xié)議章節(jié)
2.《TCP/IP協(xié)議詳解》 FTP協(xié)議章節(jié)
3.說明FTP的主動模式和被動模式以及客戶端設(shè)置。
官方微信
TOP