|
在上篇文章中,我們基本了解了下MQTT協(xié)議,本文呢?咱們來深入探討下FTP協(xié)議。 文件傳輸協(xié)議FTP(File Transfer Protocol)是因特網(wǎng)中使用最廣泛的文件傳輸協(xié)議。FTP使用交互式的訪問,允許客戶指定文件的類型和格式(如指明是否使用ASCII碼),并允許文件具有存取權(quán)限(如訪問文件的用戶必須經(jīng)過授權(quán),并輸入有效的口令)。 文件傳輸協(xié)議有基于TCP的FTP和基于UDP的簡單文件傳輸協(xié)議TFTP,它們都是文件共享協(xié)議中的一大類,即復制整個文件,其特點是:若要存取一個文件,就必須先獲得一個本地的文件副本。如果要修改文件,只能對文件的副本進行修改,然后再將修改后的文件傳回到原節(jié)點。 FTP基本工作原理FTP屏蔽了各計算機系統(tǒng)的細節(jié),因而適合在異構(gòu)網(wǎng)絡(luò)中任意計算機之間傳送文件。FTP只提供文件傳送的一些基本服務,它使用TCP可靠地運輸服務,F(xiàn)TP主要功能是減小或消除在不同系統(tǒng)下處理文件的不兼容性。 FTP使用客戶端-服務器模型,一個FTP服務器進程可以為多個客戶進程提供服務。FTP服務器有兩大部分組成:一個主進程,負責接受新的請求;還有若干從屬進程,負責處理單個請求。主進程工作步驟
FTP工作時情況 FTP控制連接在整個會話期間都保持打開,只用來發(fā)送連接/傳送請求。當客戶進程向服務器發(fā)送連接請求時,尋找連接服務器進程的熟知端口21,同時還要告訴服務器進程自己的另一個端口號碼,用于建立數(shù)據(jù)傳送連接。接著,服務器進程用自己傳送數(shù)據(jù)的熟知端口20與客戶進程所提供的端口號碼建立數(shù)據(jù)傳送連接,F(xiàn)TP使用了2個不同的端口號,所以數(shù)據(jù)連接和控制連接不會混亂。 1.1 FTP數(shù)據(jù)表示 FTP協(xié)議規(guī)定了控制協(xié)議傳送與存儲的多種選擇,在以下4個方面必須做出一個選擇。
1.2 FTP命令和應答 命令和應答在客戶和服務器的控制連接上以 NVT ASCII碼形式傳送。這就要求在每行結(jié)尾都要返回C R、 L F對(也就是每個命令或每個應答)。這些命令都是3或4個字節(jié)的大寫ASCII字符,其中一些帶選項參數(shù)。從客戶向服務器發(fā)送的FTP命令超過30種。下圖是比較常用的幾種命令: 應答都是A S C I I碼形式的3位數(shù)字,并跟有報文選項。其原因是軟件系統(tǒng)需要根據(jù)數(shù)字代碼來決定如何應答,而選項串是面向人工處理的。由于客戶通常都要輸出數(shù)字應答和報文串,一個可交互的用戶可以通過閱讀報文串(而不必記憶所有數(shù)字回答代碼的含義)來確定應答的含義。 2 FTP工作模式FTP有兩種工作模式,分別是主動模式(PORT)和被動模式(PASV)兩種模式,這兩種模式是按照FTP服務器的“角度”來說的,更通俗一點說就是:在傳輸數(shù)據(jù)時,如果是服務器主動連接客戶端,那就是主動模式;如果是客戶端主動連接服務器,那就是被動模式。關(guān)于主動模式和被動模式更具體的講解請點擊:圖解FTP的主動模式與被動模式以及客戶端設(shè)置。 3 關(guān)于FTP經(jīng)典的問題3.1 如何知道FTP傳送一個文件結(jié)束? 這個問題比較經(jīng)典,也是一次面試被問到的問題。前面說過,通用傳輸方式是流方式,并且文件的結(jié)尾是以關(guān)閉數(shù)據(jù)連接為標志,這意味著對每一個文件傳輸或目錄列表來說都要建立一個全新的數(shù)據(jù)連接。其一般過程如下:
圖27- 4給出了第 3步執(zhí)行時的連接狀態(tài)。假設(shè)客戶用于控制連接的臨時端口是 11 7 3,客戶用于數(shù)據(jù)連接的臨時端口是 11 7 4??蛻舭l(fā)出的命令是PORT命令,其參數(shù)是6個ASCII中的十進制數(shù)字,它們之間由逗點隔開。前面 4個數(shù)字指明客戶上的 I P地址,服務器將向它發(fā)出主動打開(本例中是 140.252.13.34),而后兩位指明16 bit端口地址。由于16 bit端口地址是從這兩個數(shù)字中得來,所以其值在本例中就是 4×256+150=1174。 圖27-5給出了服務器向客戶所在數(shù)據(jù)連接端發(fā)布主動打開時的連接狀態(tài)。服務器的端點是端口2 0。 服務器總是執(zhí)行數(shù)據(jù)連接的主動打開。通常服務器也執(zhí)行數(shù)據(jù)連接的主動關(guān)閉,除非當客戶向服務器發(fā)送流形式的文件時,需要客戶來關(guān)閉連接(它給服務器一個文件結(jié)束的通知)。 |
|
|