FTP協議詳解
簡介
FTP(File Transfer Protocol)是應用層的一個文件傳輸協議。其主要作用是在服務器和客戶端之間實現文件的傳輸和共享。FTP協議運行在TCP連接上,保證了文件傳輸的可靠性(運行在UDP協議上的是TFTP協議)
與Http協議區別
Http和FTP都是文件傳輸協議,都是運行在tcp上面,但是他們也有一些重要的區別,FTP使用了兩個並行的tcp來傳輸文件:一個是控制連接(port:21),一個是數據連接(port:20),控制連接用於在兩個主機之間傳輸控制信息,如口令,用戶標識,存放、獲取文件等命令。數據連接用於實際發送一個文件,發送完文件之后數據連接后會關閉。因為ftp協議使用一個獨立的控制連接,所以,也稱ftp的控制信息是帶外(out-of-band)傳送的。而Http協議是在傳輸文件的同一個tcp連接中發送請求和相應首部行的。因此,Http也可以說是帶內(in-band)發送控制信息。
FTP的兩種傳輸方式
FTP支持兩種方式的傳輸:文本(ASCII)方式和二進制(Binary)方式。通常文本文件的傳輸采用ASCII方式,而圖象、聲音文件、加密和壓縮文件等非文本文件采用二進制方式傳輸,如果為了從一個系統上傳輸文件而使用了與本地系統不同的計算機字節位數,那么就必須使用Tenex模式。FTP以ASCII方式作為默認的文件傳輸方式。
FTP的兩種傳輸模式
FTP有兩種傳輸模式:主動(FTP Port)模式和被動(FTP Passive)模式。由於主動模式存在着安全問題,最近幾年,大部分的TFP客戶端開始默認使用被動模式。
主動模式(Port)
主動模式的核心是TFP客戶端告訴服務端自己開發那個端口作為數據端口,然后讓服務端來連接自己。
主動模式的連接建立一般是通過一些幾個步驟:
- 客戶端隨機打開一個本地大於1024的端口P1
- 客戶端通過端口P1向服務器控制端口(端口21)發起連接請求
- 服務器進行認證成功,請求建立
- 客戶端對本地端口P2進行監聽並向服務器發送“Port P1+1”告訴服務器,客戶端的數據監聽端口。
- 服務器收到端口后,從自己的數據端口(端口20)發起連接,連接到客戶端指定的數據端口P1+1.
被動方式(Passive)
由於主動方式中,服務端需要主動連客戶端,對於客戶端的防火牆來說,屬於外部連接內部,會出現被阻塞的情況。被動方式解決了這個問題。被動連接的核心是控制連接請求和數據連接請求都是由客戶端發起。被動方式的步驟如下:
- 客戶端任意打開大約1024的兩個本地端口(P1和P1+1)
- P1端口發送請求連接服務器的21端口(控制連接端口)同時提交PASV命令。
- 服務器收到請求后,會開啟任意一個大約1024的端口P2,然后返回如下格式內容:
227 entering passive mode(h1,h2,h3,h4,p1,p2) - 客戶端收到服務端返回的內容后,計算出服務端開放的數據連接端口
- 客戶端通過P1+1端口向服務端的發送連接請求。進行數據傳輸。
關於服務端返回的報文格式(h1,h2,h3,h4,p1,p2)具體含義如下:
- h1,h2,h3,h4代表服務器的ip地址;
- p1,p2代表服務器監聽的數據連接端口地址。計算方法為P1*256+P2
FTP的限制
對於FTP服務器來講,他必須在整個會話期間保持用戶的狀態(state),特別是,服務器必須把特定的用戶賬戶與控制聯系起來,用戶在遠程目錄樹上不斷跳轉時,服務器必須追蹤到用戶在遠程樹上的當前位置,換句話說,當客戶端用戶數量不斷增多,FTP服務器所要維持的會話總數,也會迅速增長。着會大大限制FTP服務器的性能。
FTP中的命令與應答
命令
FTP協議的命令是認可讀的,每個命令由4個大寫的ASCII字符組成,有些還可帶一些可選參數,命令后面跟回車符換行。
一下問幾個常用的命令:
命令 | 解釋 |
---|---|
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協議詳解》