FTP(File Transfer Protocol),即文件傳輸協議,是Internet中相當重要的應用之一。
其功能是用户可以通過FTP協議從FTP服務器下載或者上傳文件,它被整合在瀏覽器中,用户可以利用瀏覽器通過超鏈接,下載服務器開放的任意文件,達到資源共享的目的。
FTP是一種C/S結構,但是與一般的Socket網絡應用程序的最大差別是在於其定義了服務器端與客户端的行為模式,即相關指令、響應、傳輸的數據類型。
在其RFC(RFC959 File Transfer Protocol)中強調FTP的目的為:文件共享,通過應用程序直接或者間接使用遠程主機,提供一致性的協議,提供可靠及有效率的數據傳輸。

FTP結構
一般的c/s結構,只會在服務器端與客户端建立一條socket連接,在此基礎上處理各種操作。而FTP則是在服務器與客户端之間建立兩個socket連接,一個以FTP默認端口21作為兩者間的通信連接,而另一個則用於客户端傳輸指令與服務器端相應結果。

  • FTP服務器端分為ProtocolInterpreter(PI)與Data Transfer Process(DTP)兩個模塊。
  • FTP服務器端PI用來建立服務器socket連接以及監聽並接受處理FTP客户端的連接請求,此鏈接會一直持續到客户端結束FTP應用程序為止。
  • FTP服務器端的DTP專門用來處理FTP所定義的特殊指令,並將執行結果或信息返回到客户端。它主要是負責傳輸數據。
  • FTP客户端分為Protocol Interpreter(PI)、Data Transfer Process(DTP)及User Interface(UI)三部分。
  • FTP客户端PI是用來與服務器建立連接的。
  • FTP客户端DTP用來將用户輸入的FTP指令傳輸到服務器端處理,並且接受服務器端響應。
  • FTP客户端UI只是用户與PI的交互界面。

FTP指令

FTP命令包括訪問命令、文件管理命令、數據格式命令、端口定義命令、文件傳輸命令和雜項傳輸命令。

  • 訪問命令
  • USER-向遠程主機表明自己的身份,需要口令時,必須輸入口令。格式為user user-name[password][account]。
  • PASS-要求輸入密碼,表示為PASS xxxx。
  • ACCT-賬號。
  • REIN-重新初始化,即重置所有參數,重新開始。
  • QUIT-結束與服務器的FTP會話並退出FTP環境。 
  • ABOR-通知服務終止以前的ftp命令和與之相關的數據傳送。
  • 文件管理命令
  • CWD 目錄名-改變工作目錄。
  • CDUP-回到上一層目錄。
  • DELE 文件名-刪除。
  • LIST 目錄名-列舉子目錄和文件。
  • NLST 目錄名-列舉子目錄和文件。
  • PWD-顯示當前路徑。
  • MKD 目錄名-在指定路徑下創建目錄。
  • RMD 目錄名-刪除指定目錄。
  • RNFR 舊文件名-標註被改文件名。
  • RNTO 新文件名-更改文件名。
  • SMNT 文件目錄名-結構加載。
  • 數據格式命令
  • TYPE A(ASCII) or E(EBCDIC) or N(Nonprint) or T(TELNET)-定義文件類型和打印格式。
  • STRU F(File) or R(Record),P(Page)-定義數據的組織形式。
  • MODE S(Stream) or B(Block) or C(Compressed)-定義傳輸模式。
  • 端口定義命令
  • PORT a,b,c,d,e,f-abcd組成ip地址,,後兩位是端口地址,端口=e*256+f。
  • PASV 主機和端口地址-要求服務器DTP在指定的端口偵聽。
  • 文件傳輸命令
  • RETR 文件名-使服務器DTP傳送指定路徑內的文件副本到服務器或用户DTP。
  • STOR 文件名-使服務器DTP接收數據,並將數據保存在服務器文件中。
  • APPE 文件名-如果文件存在,則數據附加在文件之後。
  • ALLO 文件名-在服務器上分配文件的空間。
  • REST 文件名-重新開始傳輸文件。
  • STAR 文件名-返回控制連接狀態。
  • 雜項傳輸命令
  • HELP-獲取幫助。
  • NOOP-使服務器返回OK。
  • SITE-提供服務器系統信息。
  • SYST-確定服務器上的操作系統。

常用命令

  • 登錄
  • 方法一:輸入命令 ftp hostname;命令提示符由C:\>變為ftp>。
  • 方法二:先輸入命令 ftp 啓動FTP,再用命令 open hostname 命令登錄服務器。
  • 查看
  • dir-顯示目錄和文件列表。
  • ls-顯示簡易的文件列表。
  • 格式
  • type-查看當前的傳輸方式。
  • ascii-設定傳輸方式為ASCII碼方式。
  • binary-設定傳輸方式為二進制方式。
  • 下載
  • get-get filename [newname],可以不寫newname,文件會用原名保存,下載單個文件。
  • mget-mget filename [filename ……],下載多個文件。
  • 上傳
  • put-put filename [newname],上傳指定文件。
  • 結束
  • close-結束與服務器的FTP會話。
  • quit-結束與服務器的FTP會話並退出FTP環境。

注意:

  1. 如果由於用户名或密碼錯誤導致登錄失敗,可以用user命令重新登錄。  
  2. 在輸入密碼時,屏幕是不會顯示輸入的密碼的,直接回車就行了,密碼正確或者失敗都會有提示。
  3. mget和dir命令可以使用通配符“*”和“?”。
  4. FTP的傳輸類型分為ASCII碼方式和二進制方式兩種,默認情況下,FTP為ASCII碼傳輸方式。
  1. .txt、.htm等文件應採用ASCII碼方式傳輸。
  2. .exe或圖片、視頻、音頻等文件應採用二進制方式傳輸。
  1. 下載的文件將保存在默認路徑下(即進入ftp之前的路徑),也可以使用 lcd 命令重新設置下載目錄。
  2. 如果將本機設置為ftp服務器,使用本機連接自己,那麼hostname可以是localhost,也可以是127.0.0.1,也可以是自己的ip地址,如果端口更改了(不是21),那在hostname後加上更改後的端口號。

FTP響應碼説明

  • 1系列(信息已被服務器正確接收,但被處理。)
  • 110 新文件指示器上的重啓標記
  • 120 服務器準備就緒的時間(分鐘數)
  • 125 打開數據連接,開始傳輸
  • 150 打開連接
  • 2系列(信息已被服務器處理完畢。)
  • 200 成功
  • 202 命令沒有執行
  • 211 系統狀態回覆
  • 212 目錄狀態回覆
  • 213 文件狀態回覆
  • 214 幫助信息回覆
  • 215 系統類型回覆
  • 220 服務就緒
  • 221 退出網絡
  • 225 打開數據連接
  • 226 結束數據連接
  • 227 進入被動模式(IP 地址、ID 端口)
  • 230 登錄因特網
  • 250 文件行為完成
  • 257 路徑名建立
  • 3系列(信息已被服務器正確接收,正在處理。)
  • 331 要求密碼
  • 332 要求帳號
  • 350 文件行為暫停
  • 4系列(信息處理暫時錯誤。)
  • 421 服務關閉
  • 425 無法打開數據連接
  • 426 結束連接
  • 450 文件不可用
  • 451 遇到本地錯誤
  • 452 磁盤空間不足
  • 5系列(信息處理永久錯誤。)
  • 500 無效命令
  • 501 錯誤參數
  • 502 命令沒有執行
  • 503 錯誤指令序列
  • 504 無效命令參數
  • 530 未登錄網絡
  • 532 存儲文件需要帳號
  • 550 文件不可用
  • 551 不知道的頁類型
  • 552 超過存儲分配
  • 553 文件名不允許

FTP流程
(1)用户身份驗證(2)數據傳輸(3)結束FTP

使用FTP之前,必要的是將計算機設置為FTP服務器,可以藉助一些軟件來實現,比如Serv-U,但是這個的參數設置比較複雜,網上也有很多網友寫的小軟件,

至於Serv-U的使用指南,網上很多:http://www.wangyeba.com/Article/rjjx/wlgj/200811/20081126161518.shtml等。

 現在就來試一試,設置如下:

codesys使用 FTP 協議_文件名

其中用户名為sky,密碼為123。

並在D盤下新建一個文件夾(用來測試),文件名為“test”,文件夾中新建一個txt文檔,名為“test.txt”。

codesys使用 FTP 協議_服務器_02

打開命令提示符,準備連接ftp服務器(其實就是本機)。

codesys使用 FTP 協議_codesys使用 FTP 協議_03

這裏顯示的目錄就是默認的下載目標路徑。

使用open localhost登錄ftp服務器

codesys使用 FTP 協議_客户端_04

查看文件目錄並下載test.txt

codesys使用 FTP 協議_codesys使用 FTP 協議_05

關閉ftp連接

codesys使用 FTP 協議_codesys使用 FTP 協議_06

查看下載的文件。

codesys使用 FTP 協議_codesys使用 FTP 協議_07

至此,一次完整的ftp操作完成了。