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號端口的連接,然后向服務器發送一個應答,告訴服務器它已經建立好了一個連接。
編輯本段協議結構
|
命令
|
描述
|
|
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>>
|
系統登錄的用戶名
|
|
響應代碼
|
解釋說明
|
|
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.
