http://blog.csdn.net/xwdpepsi/article/details/9269787
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
|
文件名不允許
|