簡介
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 未執行請求的操作:文件名不合法