天天看點

《計算機網絡:自頂向下方法(原書第6版)》一2.3 檔案傳輸協定:FTP

本節書摘來華章計算機《計算機網絡:自頂向下方法(原書第6版)》一書中的第2章 ,第2.3節,(美)james f.kurose keith w.ross 著 陳 鳴 譯 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

在一個典型的ftp會話中,使用者坐在一台主機(本地主機)前面,向一台遠端主機傳輸(或接收來自遠端主機的)檔案。為使使用者能通路它的遠端賬戶,使用者必須提供一個使用者辨別和密碼。在提供了這種授權資訊後,使用者就能從本地檔案系統向遠端主機檔案系統傳送檔案,反之亦然。如圖2-14所示,使用者通過一個ftp使用者代理與ftp互動。該使用者首先提供遠端主機的主機名,使本地主機的ftp客戶程序建立一個到遠端主機ftp伺服器程序的tcp連接配接。該使用者接着提供使用者辨別和密碼,作為ftp指令的一部分在該tcp連接配接上傳送。一旦該伺服器向該使用者授權,使用者可以将存放在本地檔案系統中的一個或者多個檔案複制到遠端檔案系統(反之亦然)。

《計算機網絡:自頂向下方法(原書第6版)》一2.3 檔案傳輸協定:FTP

http和ftp都是檔案傳輸協定,并且有很多共同的特點,例如,它們都運作在tcp上。然而,這兩個應用層協定也有一些重要的差別。其中最顯著的就是ftp使用了兩個并行的tcp連接配接來傳輸檔案,一個是控制連接配接(control connection),一個是資料連接配接(data connection)。控制連接配接用于在兩主機之間傳輸控制資訊,如使用者辨別、密碼、改變遠端目錄的指令以及“存放(put)”和“擷取(get)”檔案的指令。資料連接配接用于實際發送一個檔案。因為ftp協定使用一個獨立的控制連接配接,是以我們也稱ftp的控制資訊是帶外(out-of-band)傳送的。如你所知,http協定是在傳輸檔案的同一個tcp連接配接中發送請求和響應首部行的。是以,http也可以說是帶内(in-band)發送控制資訊的。ftp協定的控制連接配接和資料連接配接如圖2-15所示。

 

《計算機網絡:自頂向下方法(原書第6版)》一2.3 檔案傳輸協定:FTP

當使用者主機與遠端主機開始一個ftp會話時,ftp的客戶(使用者)端首先在伺服器21号端口與伺服器(遠端主機)端發起一個用于控制的tcp連接配接。ftp的用戶端也通過該控制連接配接發送使用者的辨別和密碼,發送改變遠端目錄的指令。當ftp的伺服器端從該連接配接上收到一個檔案傳輸的指令後(無論是向還是來自遠端主機),就發起一個到用戶端的tcp資料連接配接。ftp在該資料連接配接上準确地傳送一個檔案,然後關閉該連接配接。在同一個會話期間,如果使用者還需要傳輸另一個檔案,ftp則打開另一個資料連接配接。因而對ftp傳輸而言,控制連接配接貫穿了整個使用者會話期間,但是對會話中的每一次檔案傳輸都需要建立一個新的資料連接配接(即資料連接配接是非持續的)。

ftp伺服器必須在整個會話期間保留使用者的狀态(state)。特别是,伺服器必須把特定的使用者賬戶與控制連接配接聯系起來,随着使用者在遠端目錄樹上徘徊,伺服器必須追蹤使用者在遠端目錄樹上的目前位置。對每個進行中的使用者會話的狀态資訊進行追蹤,大大限制了ftp同時維持的會話總數。而另一方面,前面講過http是無狀态的,即它不必對任何使用者狀态進行追蹤。

ftp指令和回答

我們通過簡要地讨論幾個常見的ftp指令和回答來結束本節。從客戶到伺服器的指令和從伺服器到客戶的回答,都是以7比特ascii格式在控制連接配接上傳送的。是以,與http協定的指令類似,ftp協定的指令也是人可讀的。為了區分連續的指令,每個指令後跟回車換行符。每個指令由4個大寫字母ascii字元組成,有些還具有可選參數。一些較為常見的指令如下:

user username:用于向伺服器傳送使用者辨別。

pass password:用于向伺服器發送使用者密碼。

list:用于請求伺服器回送目前遠端目錄中的所有檔案清單。該檔案清單是經一個(建立且非持續連接配接)資料連接配接傳送的,而不是在控制tcp連接配接上傳送。

retr filename:用于從遠端主機目前目錄檢索(即get)檔案。該指令引起遠端主機發起一個資料連接配接,并經該資料連接配接發送所請求的檔案。

stor filename:用于在遠端主機的目前目錄上存放(即put)檔案。

貫穿控制連接配接,在使用者發出的指令和ftp發送的指令之間通常有一一對應關系。每個指令都對應着一個從伺服器發向客戶的回答。回答是一個3位的數字,後跟一個可選資訊。這與http響應封包狀态行的狀态碼和狀态資訊的結構相同。一些典型的回答連同它們可能的封包如下所示:

331 username ok,password required(使用者名ok,需要密碼)。

125 data connection already open;transfer starting(資料連接配接已經打開,開始傳送)。

425 can’t open data connection(無法打開資料連接配接)。

452 error writing file(寫檔案差錯)。

有興趣學習其他ftp指令和回答的讀者請閱讀rfc 959。

繼續閱讀