FTP(File Transfer Protocol)是應用層的一個文件傳輸協議。其主要做用是在服務器和客戶端之間實現文件的傳輸和共享。FTP協議運行在TCP鏈接上,保證了文件傳輸的可靠性(運行在UDP協議上的是TFTP協議)安全
Http和FTP都是文件傳輸協議,都是運行在tcp上面,可是他們也有一些重要的區別,FTP使用了兩個並行的tcp來傳輸文件:一個是控制鏈接(port:21),一個是數據鏈接(port:20),控制鏈接用於在兩個主機之間傳輸控制信息,如口令,用戶標識,存放、獲取文件等命令。數據鏈接用於實際發送一個文件,發送完文件以後數據鏈接後會關閉。由於ftp協議使用一個獨立的控制鏈接,因此,也稱ftp的控制信息是帶外(out-of-band)傳送的。而Http協議是在傳輸文件的同一個tcp鏈接中發送請求和相應首部行的。所以,Http也能夠說是帶內(in-band)發送控制信息。服務器
FTP支持兩種方式的傳輸:文本(ASCII)方式和二進制(Binary)方式。一般文本文件的傳輸採用ASCII方式,而圖象、聲音文件、加密和壓縮文件等非文本文件採用二進制方式傳輸,若是爲了從一個系統上傳輸文件而使用了與本地系統不一樣的計算機字節位數,那麼就必須使用Tenex模式。FTP以ASCII方式做爲默認的文件傳輸方式。網絡
FTP有兩種傳輸模式:主動(FTP Port)模式和被動(FTP Passive)模式。因爲主動模式存在着安全問題,最近幾年,大部分的TFP客戶端開始默認使用被動模式。tcp
主動模式的核心是TFP客戶端告訴服務端本身開發那個端口做爲數據端口,而後讓服務端來鏈接本身。
主動模式的鏈接創建通常是經過一些幾個步驟:性能
因爲主動方式中,服務端須要主動連客戶端,對於客戶端的防火牆來講,屬於外部鏈接內部,會出現被阻塞的狀況。被動方式解決了這個問題。被動鏈接的核心是控制鏈接請求和數據鏈接請求都是由客戶端發起。被動方式的步驟以下:ui
關於服務端返回的報文格式(h1,h2,h3,h4,p1,p2)具體含義以下:加密
對於FTP服務器來說,他必須在整個會話期間保持用戶的狀態(state),特別是,服務器必須把特定的用戶帳戶與控制聯繫起來,用戶在遠程目錄樹上不斷跳轉時,服務器必須追蹤到用戶在遠程樹上的當前位置,換句話說,當客戶端用戶數量不斷增多,FTP服務器所要維持的會話總數,也會迅速增加。着會大大限制FTP服務器的性能。計算機網絡
FTP協議的命令是承認讀的,每一個命令由4個大寫的ASCII字符組成,有些還可帶一些可選參數,命令後面跟回車符換行。
一下問幾個經常使用的命令:ip
命令 | 解釋 |
---|---|
USER username | 用於向服務器傳輸用戶標識 |
PASS password | 用於向服務器發送用戶口令 |
LIST | 請求服務器全部文件列表,文件列表是在(新建且非持續鏈接)數據鏈接上傳遞 |
RETR filename | 用於從遠程主機當前目錄檢索(get)文件。該命令引發遠程主機發起一個數據鏈接,並經數據鏈接發送所請求的文件。 |
STOR filename | 用於在遠程主機的當前目錄上存放(put)文件 |
FTP客戶端每一個發出的命令都會對應一個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命令和應答比較簡單,若是想詳細瞭解相關的命令和應答,能夠查閱RFC959 相關文檔
參考資料: 《計算機網絡自頂向下方法》 《TCP/IP協議詳解》