FTP文件傳輸協議兩種模式 ftp協議集,錯誤碼集,ftp客戶端命令集


TCP/IP協議中,FTP標准命令TCP端口號為21,Port方式數據端口為20。FTP協議的任務是從一台計算機將文件傳送到另一台計算機,它與這兩台計算機所處的位置、聯接的方式、甚至是是否使用相同的操作系統無關。假設兩台計算機通過ftp協議對話,並且能訪問Internet, 你可以用ftp命令來傳輸文件。每種操作系統使用上有某一些細微差別,但是每種協議基本的命令結構是相同的。
 

  FTP的傳輸有兩種方式:ASCII傳輸模式和二進制數據傳輸模式。

 

  1.ASCII傳輸方式:假定用戶正在拷貝的文件包含的簡單ASCII碼文本,如果在遠程機器上運行的不是UNIX,當文件傳輸時ftp通常會自動地調整文件的內容以便於把文件解釋成另外那台計算機存儲文本文件的格式。

 

  但是常常有這樣的情況,用戶正在傳輸的文件包含的不是文本文件,它們可能是程序,數據庫,字處理文件或者壓縮文件(盡管字處理文件包含的大部分是文本,其中也包含有指示頁尺寸,字庫等信息的非打印字符)。在拷貝任何非文本文件之前,用binary 命令告訴ftp逐字拷貝,不要對這些文件進行處理,這也是下面要講的二進制傳輸。

 

  2.二進制傳輸模式:在二進制傳輸中,保存文件的位序,以便原始和拷貝的是逐位一一對應的。即使目的地機器上包含位序列的文件是沒意義的。例如,macintosh以二進制方式傳送可執行文件到Windows系統,在對方系統上,此文件不能執行。

 

  如果你在ASCII方式下傳輸二進制文件,即使不需要也仍會轉譯。這會使傳輸稍微變慢 ,也會損壞數據,使文件變得不能用。(在大多數計算機上,ASCII方式一般假設每一字符的第一有效位無意義,因為ASCII字符組合不使用它。如果你傳輸二進制文件,所有的位都是重要的。)如果你知道這兩台機器是同樣的,則二進制方式對文本文件和數據文件都是有效的。

 

  5. FTP的工作方式

 

  FTP支持兩種模式,一種方式叫做Standard (也就是 PORT方式,主動方式),一種是 Passive (也就是PASV,被動方式)。 Standard模式 FTP的客戶端發送 PORT 命令到FTP服務器。Passive模式FTP的客戶端發送 PASV命令到 FTP Server。

 

  下面介紹一個這兩種方式的工作原理:

 

  Port模式FTP 客戶端首先和FTP服務器的TCP 21端口建立連接,通過這個通道發送命令,客戶端需要接收數據的時候在這個通道上發送PORT命令。 PORT命令包含了客戶端用什么端口接收數據。在傳送數據的時候,服務器端通過自己的TCP 20端口連接至客戶端的指定端口發送數據。 FTP server必須和客戶端建立一個新的連接用來傳送數據。

 

  Passive模式在建立控制通道的時候和Standard模式類似,但建立連接后發送的不是Port命令,而是Pasv命令。FTP服務器收到Pasv命令后,隨機打開一個臨時端口(也叫自由端口,端口號大於1023小於65535)並且通知客戶端在這個端口上傳送數據的請求,客戶端連接FTP服務器此端口,然后FTP服務器將通過這個端口進行數據的傳送,這個時候FTP server不再需要建立一個新的和客戶端之間的連接。

 

  很多防火牆在設置的時候都是不允許接受外部發起的連接的,所以許多位於防火牆后或內網的FTP服務器不支持PASV模式,因為客戶端無法穿過防火牆打開FTP服務器的高端端口;而許多內網的客戶端不能用PORT模式登陸FTP服務器,因為從服務器的TCP 20無法和內部網絡的客戶端建立一個新的連接,造成無法工作。

 

  FTP軟件可以更好的幫助你管理FTP目錄 提供更系統的工具

 

  FTP工具推薦使用 cuteftp

 

  主動和被動模式FTP有兩種使用模式:主動和被動。主動模式要求客戶端和服務器端同時打開並且監聽一個端口以建立連接。在這種情況下,客戶端由於安裝了防火牆會產生一些問題。所以,創立了被動模式。被動模式只要求服務器端產生一個監聽相應端口的進程,這樣就可以繞過客戶端安裝了防火牆的問題。

 

  一個主動模式的FTP連接建立要遵循以下步驟:

 

  客戶端打開一個隨機的端口(端口號大於1024,在這里,我們稱它為x),同時一個FTP進程連接至服務器的21號命令端口。此時,源端口為隨機端口x,在客戶端,遠程端口為21,在服務器。

 

  客戶端開始監聽端口(x+1),同時向服務器發送一個端口命令(通過服務器的21號命令端口),此命令告訴服務器客戶端正在監聽的端口號並且已准備好從此端口接收數據。這個端口就是我們所知的數據端口。

 

  服務器打開20號源端口並且建立和客戶端數據端口的連接。此時,源端口為20,遠程數據端口為(x+1)。

 

  客戶端通過本地的數據端口建立一個和服務器20號端口的連接,然后向服務器發送一個應答,告訴服務器它已經建立好了一個連接。

FTP有兩種使用模式:主動和被動。主動模式要求客戶端和服務器端同時打開並且監聽一個端口以建立連接。在這種情況下,客戶端由於安裝了防火牆會產生一些問題。所以,創立了被動模式。被動模式只要求服務器端產生一個監聽相應端口的進程,這樣就可以繞過客戶端安裝了防火牆的問題。 [4]
一個主動模式的FTP連接建立要遵循以下步驟:
1.客戶端打開一個隨機的端口(端口號大於1024,在這里,我們稱它為x),同時一個FTP進程連接至服務器的21號命令端口。此時,源端口為隨機端口x,在客戶端,遠程端口為21,在服務器。
2.客戶端開始監聽端口(x+1),同時向服務器發送一個端口命令(通過服務器的21號命令端口),此命令告訴服務器客戶端正在監聽的端口號並且已准備好從此端口接收數據。這個端口就是我們所知的數據端口。
3.服務器打開20號源端口並且建立和客戶端數據端口的連接。此時,源端口為20,遠程數據端口為(x+1)。
4.客戶端通過本地的數據端口建立一個和服務器20號端口的連接,然后向服務器發送一個應答,告訴服務器它已經建立好了一個連接。
被動模式FTP:
為了解決服務器發起到客戶的連接的問題,人們開發了一種不同的FTP連接方式。這就是所謂的被動方式,或者叫做PASV,當客戶端通知服務器它處於被動模式時才啟用。
在被動方式FTP中,命令連接和數據連接都由客戶端發起,這樣就可以解決從服務器到客戶端的數據端口的入方向連接被防火牆過濾掉的問題。
當開啟一個 FTP連接時,客戶端打開兩個任意的非特權本地端口(N > 1024和N+1)。第一個端口連接服務器的21端口,但與主動方式的FTP不同,客戶端不會提交PORT命令並允許服務器來回連它的數據端口,而是提交 PASV命令。這樣做的結果是服務器會開啟一個任意的非特權端口(P > 1024),並發送PORT P命令給客戶端。然后客戶端發起從本地端口N+1到服務器的端口P的連接用來傳送數據。
對於服務器端的防火牆來說,必須允許下面的通訊才能支持被動方式的FTP:
1. 從任何大於1024的端口到服務器的21端口 (客戶端的初始化連接)
2.服務器的21端口到任何大於1024的端口 (服務器響應到客戶端的控制端口的連接)
3. 從任何大於1024端口到服務器的大於1024端口 (客戶端初始化數據連接到服務器指定的任意端口)
4.服務器的大於1024端口到遠程的大於1024的端口(服務器發送ACK響應和數據到客戶端的數據端口)

編輯本段協議結構

命令
描述
ABOR
中斷數據連接程序
ACCT <account>
系統特權帳號
ALLO <bytes>
為服務器上的文件存儲器分配字節
APPE <filename>
添加文件到服務器同名文件
CDUP <dir path>
改變服務器上的父目錄
CWD <dir path>
改變服務器上的工作目錄
DELE <filename>
刪除服務器上的指定文件
HELP <command>
返回指定命令信息
LIST <name>
如果是文件名列出文件信息,如果是目錄則列出文件列表
MODE <mode>
傳輸模式(S=流模式,B=塊模式,C=壓縮模式)
MKD <directory>
在服務器上建立指定目錄
NLST <directory>
列出指定目錄內容
NOOP
無動作,除了來自服務器上的承認
PASS <password>
系統登錄密碼
PASV
請求服務器等待數據連接
PORT <address>
IP 地址和兩字節的端口 ID
PWD
顯示當前工作目錄
QUIT
從 FTP 服務器上退出登錄
REIN
重新初始化登錄狀態連接
REST <offset>
由特定偏移量重啟文件傳遞
RETR <filename>
從服務器上找回(復制)文件
RMD <directory>
在服務器上刪除指定目錄
RNFR <old path>
對舊路徑重命名
RNTO <new path>
對新路徑重命名
SITE <params>
由服務器提供的站點特殊參數
SMNT <pathname>
掛載指定文件結構
STAT <directory>
在當前程序或目錄上返回信息
STOR <filename>
儲存(復制)文件到服務器上
STOU <filename>
儲存文件到服務器名稱上
STRU <type>
數據結構(F=文件,R=記錄,P=頁面)
SYST
返回服務器使用的操作系統
TYPE <data type>
數據類型(A=ASCII,E=EBCDIC,I=binary)
USER <username>>
系統登錄的用戶名
標准 FTP 信息如下
響應代碼
解釋說明
110
新文件指示器上的重啟標記
120
服務器准備就緒的時間(分鍾數)
125
打開數據連接,開始傳輸
150
打開連接
200
成功
202
命令沒有執行
211
系統狀態回復
212
目錄狀態回復
213
文件狀態回復
214
幫助信息回復
215
系統類型回復
220
服務就緒
221
退出網絡
225
打開數據連接
226
結束數據連接
227
進入被動模式(IP 地址、ID 端口)
230
登錄因特網
250
文件行為完成
257
路徑名建立
331
要求密碼
332
要求帳號
350
文件行為暫停
421
服務關閉
425
無法打開數據連接
426
結束連接
450
文件不可用
451
遇到本地錯誤
452
磁盤空間不足
500
無效命令
501
錯誤參數
502
命令沒有執行
503
錯誤指令序列
504
無效命令參數
530
未登錄網絡
532
存儲文件需要帳號
550
文件不可用
551
不知道的頁類型
552
超過存儲分配
553
文件名不允許

FTP內部命令:

FTP的命令行格式為: ftp -v -d -i -n -g [主機名] ,其中   -v 顯示遠程服務器的所有響應信息;   -n 限制ftp的自動登錄,即不使用;    .n etrc文件;   -d 使用調試方式;   -g 取消全局文件名。   ftp使用的內部命令如下(中括號表示可選項):   
  1.![cmd[args]]:在本地機中執行交互shell,exit回到ftp環境,如: !ls*.zip.   
     2.$ macro-ame[args]:執行宏定義macro-name.   
     3.account[password]:提供登錄遠程系統成功后訪問系統資源所需的補 充口令。   
     4.append local-file[remote-file]:將本地文件追加到遠程系統主機, 若未指定遠程系統文件名,則使用本地文件名。     
     5
.ascii:使用ascii類型傳輸方式。 
     6.bell:每個命令執行完畢后計算機響鈴一次。   

  7.bin:使用二進制文件傳輸方式。   
  8.bye:退出ftp會話過程。   
  9.case:在使用mget時,將遠程主機文件名中的大寫轉為小寫字母。   
  10.cd remote-dir:進入遠程主機目錄。   
  11.cdup:進入遠程主機目錄的父目錄。   
  12.chmod mode file-name:將遠程主機文件file-name的存取方式設置為 mode,如: chmod 777 a.out 。   
  13.close:中斷與遠程服務器的ftp會話(與open對應)。   
  14.cr:使用asscii方式傳輸文件時,將回車換行轉換為回行。   
  15.delete remote-file:刪除遠程主機文件。   
  16.debug[debug-value]:設置調試方式, 顯示發送至遠程主機的每條命 令,如: deb up 3,若設為0,表示取消debug。
  17.dir[remote-dir][local-file]:顯示遠程主機目錄,並將結果存入本 地文件local-file。   
  18.disconnection:同close。   
  19.form format:將文件傳輸方式設置為format,缺省為file方式。   

    20.get remote-file[local-file]: 將遠程主機的文件remote-file傳至 本地硬盤的local-file。  
  21.glob:設置mdelete,mget,mput的文件名擴展,缺省時不擴展文件名, 同命令行的-g參數。   
  22.hash:每傳輸1024字節,顯示一個hash符號(#)。   
  23.help[cmd]:顯示ftp內部命令cmd的幫助信息,如:help get。   
  24.idle[seconds]:將遠程服務器的休眠計時器設為[seconds]秒。   
  25.image:設置二進制傳輸方式(同binary)。  
  26.lcd[dir]:將本地工作目錄切換至dir。   
  27.ls[remote-dir][local-file]:顯示遠程目錄remote-dir, 並存入本 地文件local-file。   
  28.macdef macro-name:定義一個宏,遇到macdef下的空行時,宏定義結 束。   29.mdelete[remote-file]:刪除遠程主機文件。   
  30.mdir remote-files local-file:與dir類似,但可指定多個遠程文件, 如: mdir *.o.*.zipoutfile 。   
  31.mget remote-files:傳輸多個遠程文件。   
  32.mkdir dir-name:在遠程主機中建一目錄。   
  33.mls remote-file local-file:同nlist,但可指定多個文件名。   
  34.mode[modename]:將文件傳輸方式設置為modename, 缺省為stream方 式。   35.modtime file-name:顯示遠程主機文件的最后修改時間。   
  36.mput local-file:將多個文件傳輸至遠程主機。   
  37.newer file-name: 如果遠程機中file-name的修改時間比本地硬盤同 名文件的時間更近,則重傳該文件。   
  38.nlist[remote-dir][local-file]:顯示遠程主機目錄的文件清單,並 存入本地硬盤的local-file。  

39.nmap[inpattern outpattern]:設置文件名映射機制, 使得文件傳輸 時,文件中的某些字符相互轉換,如:nmap $1.$2.$3[$1, $2].[$2,$3],則 傳輸文件a1.a2.a3時,文件名變為a1,a2。該命令特別適用於遠程主機為非UNIX 機的情況。   40.ntrans[inchars[outchars]]:設置文件名字符的翻譯機制,如ntrans 1R,則文件名LLL將變為RRR。   
  41.open host[port]:建立指定ftp服務器連接,可指定連接端口。   
  42.passive:進入被動傳輸方式。   
  43.prompt:設置多個文件傳輸時的交互提示。   
  44.proxy ftp-cmd:在次要控制連接中,執行一條ftp命令, 該命令允許 連接兩個ftp服務器,以在兩個服務器間傳輸文件。第一條ftp命令必須為open, 以首先建立兩個服務器間的連接。   
  45.put local-file[remote-file]:將本地文件local-file傳送至遠程主 機。   46.pwd:顯示遠程主機的當前工作目錄。   
  47.quit:同bye,退出ftp會話。   
  48.quote arg1,arg2...:將參數逐字發至遠程ftp服務器,如: quote syst.   49.recv remote-file[local-file]:同get。   
  50.reget remote-file[local-file]:類似於get,但若local-file存在, 則從上次傳輸中斷處續傳。
  51.rhelp[cmd-name]:請求獲得遠程主機的幫助。   
  52.rstatus[file-name]:若未指定文件名,則顯示遠程主機的狀態,否 則顯示文件狀態。   
  53.rename[from][to]:更改遠程主機文件名。   
  54.reset:清除回答隊列。   
  55.restart marker:從指定的標志marker處,重新開始get或put,如: restart 130。   
  56.rmdir dir-name:刪除遠程主機目錄。   
  57.runique:設置文件名唯一性存儲,若文件存在,則在原文件后加后綴 .1,.2等。 58.send local-file[remote-file]:同put。   
  59.sendport:設置PORT命令的使用。   
  60.site arg1,arg2...:將參數作為SITE命令逐字發送至遠程ftp主機。   
  61.size file-name:顯示遠程主機文件大小,如:site idle 7200。   
  62.status:顯示當前ftp狀態。   
  63.struct[struct-name]:將文件傳輸結構設置為struct-name, 缺省時 使用stream結構。   
  64.sunique:將遠程主機文件名存儲設置為唯一(與runique對應)。   
  65.system:顯示遠程主機的操作系統類型。   
  66.tenex:將文件傳輸類型設置為TENEX機的所需的類型。   
  67.tick:設置傳輸時的字節計數器。   
  68.trace:設置包跟蹤。   
  69.type[type-name]:設置文件傳輸類型為type-name,缺省為ascii,如: type binary,設置二進制傳輸方式。   
  70.umask[newmask]:將遠程服務器的缺省umask設置為newmask,如: umask 3。   71.user user-name[password][account]:向遠程主機表明自己的身份, 需要口令時,必須輸入口令,如:user anonymous my@email。   
  72.verbose:同命令行的-v參數,即設置詳盡報告方式,ftp服務器的所有 響應都將顯示給用戶,缺省為on.   
  73.?[cmd]:同help.


免責聲明!

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



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