文件傳輸協議FTP(File Transfer Protocol)是因特網中使用最普遍的文件傳輸協議。FTP使用交互式的訪問,容許客戶指定文件的類型和格式(如指明是否使用ASCII碼),並容許文件具備存取權限(如訪問文件的用戶必須通過受權,並輸入有效的口令)。html
文件傳輸協議有基於TCP的FTP和基於UDP的簡單文件傳輸協議TFTP,它們都是文件共享協議中的一大類,即複製整個文件,其特色是:若要存取一個文件,就必須先得到一個本地的文件副本。若是要修改文件,只能對文件的副本進行修改,而後再將修改後的文件傳回到原節點。面試
FTP屏蔽了各計算機系統的細節,於是適合在異構網絡中任意計算機之間傳送文件。FTP只提供文件傳送的一些基本服務,它使用TCP可靠地運輸服務,FTP主要功能是減少或消除在不一樣系統下處理文件的不兼容性。服務器
FTP使用客戶端-服務器模型,一個FTP服務器進程能夠爲多個客戶進程提供服務。FTP服務器有兩大部分組成:一個主進程,負責接受新的請求;還有若干從屬進程,負責處理單個請求。主進程工做步驟網絡
FTP工做時狀況併發
FTP控制鏈接在整個會話期間都保持打開,只用來發送鏈接/傳送請求。當客戶進程向服務器發送鏈接請求時,尋找鏈接服務器進程的熟知端口21,同時還要告訴服務器進程本身的另外一個端口號碼,用於創建數據傳送鏈接。接着,服務器進程用本身傳送數據的熟知端口20與客戶進程所提供的端口號碼創建數據傳送鏈接,FTP使用了2個不一樣的端口號,因此數據鏈接和控制鏈接不會混亂。計算機網絡
FTP協議規定了控制協議傳送與存儲的多種選擇,在如下4個方面必須作出一個選擇。htm
命令和應答在客戶和服務器的控制鏈接上以 NVT ASCII碼形式傳送。這就要求在每行結尾都要返回C R、 L F對(也就是每一個命令或每一個應答)。這些命令都是3或4個字節的大寫ASCII字符,其中一些帶選項參數。從客戶向服務器發送的FTP命令超過30種。下圖是比較經常使用的幾種命令:blog
應答都是A S C I I碼形式的3位數字,並跟有報文選項。其緣由是軟件系統須要根據數字代碼來決定如何應答,而選項串是面向人工處理的。因爲客戶一般都要輸出數字應答和報文串,一個可交互的用戶能夠經過閱讀報文串(而沒必要記憶全部數字回答代碼的含義)來肯定應答的含義。進程
FTP有兩種工做模式,分別是主動模式(PORT)和被動模式(PASV)兩種模式,這兩種模式是按照FTP服務器的「角度」來講的,更通俗一點說就是:在傳輸數據時,若是是服務器主動鏈接客戶端,那就是主動模式;若是是客戶端主動鏈接服務器,那就是被動模式。關於主動模式和被動模式更具體的講解請點擊:圖解FTP的主動模式與被動模式以及客戶端設置。get
這個問題比較經典,也是一次面試被問到的問題。前面說過,通用傳輸方式是流方式,而且文件的結尾是以關閉數據鏈接爲標誌,這意味着對每個文件傳輸或目錄列表來講都要創建一個全新的數據鏈接。其通常過程以下:
圖27- 4給出了第 3步執行時的鏈接狀態。假設客戶用於控制鏈接的臨時端口是 11 7 3,客戶用於數據鏈接的臨時端口是 11 7 4。客戶發出的命令是PORT命令,其參數是6個ASCII中的十進制數字,它們之間由逗點隔開。前面 4個數字指明客戶上的 I P地址,服務器將向它發出主動打開(本例中是 140.252.13.34),然後兩位指明16 bit端口地址。因爲16 bit端口地址是從這兩個數字中得來,因此其值在本例中就是 4×256+150=1174。
圖27-5給出了服務器向客戶所在數據鏈接端發佈主動打開時的鏈接狀態。服務器的端點是端口2 0。
服務器老是執行數據鏈接的主動打開。一般服務器也執行數據鏈接的主動關閉,除非當客戶向服務器發送流形式的文件時,須要客戶來關閉鏈接(它給服務器一個文件結束的通知)。
參考資料:
一、《計算機網絡》FTP協議章節
二、《TCP/IP協議詳解》FTP協議章節