文件傳輸協議---FTP


簡介

FTP是File Transfer Protocol(文件傳輸協議)的英文簡稱,建立在TCP協議之上,用於Internet上文件的雙向傳輸。同時,它也是一個應用程序。用戶可以通過它把自己的PC機與世界各地所有運行FTP協議的服務器相連,訪問服務器上的大量程序和信息。FTP的主要作用是:讓用戶連接上一個遠程計算機(這些計算機上運行着FTP服務器程序)察看遠程計算機有哪些文件,然后把文件從遠程計算機上拷到本地計算機,或把本地計算機的文件送到遠程計算機去。

 

幾款開源的FTP服務端軟件

  • Tinyftpd是用C語言實現的簡單、快速、高效的Linux FTP服務器,只需簡單的配置,就可快速的將主機變成高效的FTP服務器。下載地址:https://github.com/vbirds/Tinyftp
  • ftpd是一款功能強大、性能穩定、安全可靠、使用簡單等優點,並能夠進行web管理的ftp server軟件。直接百度就可以下載,可以交叉編譯到單板上。

 

端口

FTP協議主要使用的端口有兩個,控制端口21,數據端口20,21端口主要用於傳輸控制命令,20端口主要用於傳輸數據。

 

傳輸格式

主要使用的傳輸格式和TFTP協議類似,二進制傳輸格式和文件傳輸格式,默認是二進制傳輸格式。

 

傳輸模式

傳輸模式主要分為兩種,主動模式和被動模式,主動模式是在進行數據連接時,服務端主動連接客戶端;被動模式是在進行數據連接時,客戶端主動連接服務端。在客戶端有防火牆的情況下,建議使用被動模式,因為在主動模式下,服務端連接客戶端時,由於連接的客戶端端口大於1024,有可能被客戶端的防火牆擋住,導致連接失敗。    

協議格式

FTP的控制幀格式由一段文本結構組成,一般結構如下:命令 + 空格 + 內容 + \r\n。根據命令的不同,報文中的內容字段也有細微的區別,下面介紹一些常用的命令及其格式:

登錄類:

  • USER 賬號\r\n 登錄賬號
  • PASS 密碼\r\n 登錄密碼
  • REIN\r\n 想重新登錄,連接不會關閉,下一條命令USER 可重新連接
  • QUIT\r\n 退出

建立文件傳輸套接字通信類

  • PASV\r\n 被動模式,服務端會回復一個IP 地址和端口,然后你再連接.(一般使用被動模式)
  • PORT 表示IP 端口的特殊格式\r\n 主動模式,讓服務端主動來連接你的文件監聽套接字

操作文件類

  • STOR 文件名\r\n 上傳文件
  • APPE 文件名\r\n 上傳文件,如果文件名已存在,把數據插入尾部
  • DELE 文件名\r\n 刪除指定文件
  • REST 字節個數\r\n 跳過字節數,短點續傳,下載文件前使用,使RETR 命令僅下載偏移后的部分
  • RETR 文件名\r\n 下載文件
  • ABOR\r\n 放棄傳輸一個文件,將關閉文件套接字通信
  • CWD 目錄名\r\n 改變當前目錄到指定目錄
  • CDUP\r\n 返回上一次目錄,當到根目錄時,不變
  • LIST\r\n 顯示當前目錄下的文件,包括長度,文件類型(如目錄)與權限(表示類型:drwxr-xr-x)
  • LIST 目錄名\r\n 顯示指定目錄下的文件,包括長度,文件類型(如目錄)與權限(表示類
  • 型:drwxr-xr-x)
  • MKD 目錄名\r\n 創建一個目錄
  • PWD\r\n 顯示當前目錄的路徑
  • RMD 目錄名\r\n 刪除目錄
  • RNFR 文件或目錄名\r\n 將某文件或目錄重命名,接下來要使用RNTO 指定新名稱
  • RNTO 文件或目錄名\r\n 重命名為....
  • NLST\r\n僅顯示當前目錄下的文件,以\r\n 表示下一個
  • NLST 目錄\r\n 僅顯示指定目錄下的文件,以\r\n 表示下一個

模式與類型

  • TYPE 字符\r\n 選擇傳輸類型
    • A 為文本模式
    • I 為二進制模式
    • E 為EBCDIC
    • N 為Nonprint 非打印模式
    • T 為Telnet 格式控制符

參數信息

  • SYST\r\n 獲取服務端系統信息(NT 或Unix)
  • STAT 文件或文件夾\r\n 獲取相關信息

其他不常用的命令

  • ACCT 用戶帳號\r\n 發送PASS 命令並接收到332 代碼之后才應發送
  • SMNT 另一個文件數據系統的路徑\r\n 允許用戶裝配另一個文件系統的數據結構而無需改變登錄
  • MODE 字符\r\n 指定傳輸類型:默認為流模式(S 為流)(B 為塊)(C 為經過壓縮)
  • STRU 字符\r\n 指定結構類型:F 為文件結構(默認值,就是流式傳輸)
  • ALLO 邏輯字節數\r\n 上傳文件前,使用此命令申請內存
  • NOOP 測試通信
  • HELP 幫助,會列出有效命令

FTP錯誤碼

錯誤一般是3個數字,2開頭的數字一般表示成功,3開頭的數字一般表示權限問題,4開頭的數字一般表示文件問題,5開頭的數組一般表示服務器問題,具體錯誤碼的含義如下:

  • 150 文件狀態良好,打開數據連接
  • 200 命令成功
  • 212 目錄狀態
  • 213 文件狀態
  • 110 重新啟動標記應答
  • 500 格式錯誤,命令不可識別
  • 501 參數語法錯誤
  • 502 命令未實現
  • 120 在X 分鍾內准備好
  • 125 連接打開准備傳送
  • 214 幫助信息,信息僅對人類用戶有用
  • 215 名字系統類型
  • 220 對新用戶服務准備好
  • 221 服務關閉控制連接,可以退出登錄
  • 202 命令未實現
  • 211 系統狀態或系統幫助響應
  • 225 數據連接打開,無傳輸正在進行
  • 226 關閉數據連接,請求的文件操作成功
  • 227 進入被動模式
  • 230 用戶登錄
  • 331 用戶名正確,需要口令
  • 332 登錄時需要帳戶信息
  • 350 請求的文件操作需要進一步命令
  • 421 連接用戶過多
  • 425 不能打開數據連接
  • 426 關閉連接,中止傳輸
  • 450 請求的文件操作未執行
  • 451 中止請求的操作:有本地錯誤
  • 452 未執行請求的操作:系統存儲空間不足
  • 250 請求的文件操作完成
  • 257 創建"PATHNAME"
  • 503 命令順序錯誤
  • 504 此參數下的命令功能未實現
  • 530 賬號或密碼錯誤
  • 532 存儲文件需要帳戶信息
  • 550 未執行請求的操作
  • 551 請求操作中止:頁類型未知
  • 552 請求的文件操作中止,存儲分配溢出
  • 553 未執行請求的操作:文件名不合法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM