FTP數(shù)據(jù)發(fā)送雙方建立控制命令通道和數(shù)據(jù)傳輸通道后,雙方就可以發(fā)送數(shù)據(jù)。在數(shù)據(jù)傳輸中,F(xiàn)TP協(xié)議又規(guī)定了三種模式,分別是流模式,塊模式和壓縮模式。
第一種流模式其實就是簡單的將要傳輸?shù)臄?shù)據(jù)比特以一種連續(xù)的非結(jié)構(gòu)化的方式在TCP協(xié)議的幫助下發(fā)送給對方,這里它就是一段數(shù)據(jù),不存在包頭或字段這類有關(guān)數(shù)據(jù)組織結(jié)構(gòu)的信息。由于被傳輸?shù)男畔⑹锹銛?shù)據(jù),沒有任何結(jié)構(gòu)化組織,因此發(fā)送的準(zhǔn)確性完全依賴于傳輸方和下層協(xié)議的穩(wěn)定性,特別是數(shù)據(jù)傳輸完成就得依靠關(guān)閉數(shù)據(jù)通道來表示。
相比于其他兩種模式,流模式的特點是效率高,因此在協(xié)議的實現(xiàn)中使用廣泛。同時它實現(xiàn)簡單,并且它將所有要傳輸?shù)臄?shù)據(jù)進行無差別對待,別管要傳輸?shù)臄?shù)據(jù)結(jié)構(gòu)如何,它通通將其看做為字節(jié)流,因此就能隔離數(shù)據(jù)結(jié)構(gòu)的復(fù)雜性對傳輸協(xié)議實現(xiàn)的影響。由此效率高,實現(xiàn)簡單,傳輸數(shù)據(jù)復(fù)雜性隔離這三個特點使得這種傳輸模式成為FTP的實現(xiàn)主流。
第二種塊模式是指,將要傳輸?shù)臄?shù)據(jù)切割成長度固定的若干各部分,每個部分在發(fā)送時使用包頭等字段進行封裝,使得發(fā)送的數(shù)據(jù)塊相互間形成獨立的數(shù)據(jù)包。包頭含有三字節(jié)字段,分別表示塊的長度以及其他相關(guān)數(shù)據(jù)。同時還有一種特別的算法用于對數(shù)據(jù)塊進行追蹤,如果數(shù)據(jù)塊傳輸出現(xiàn)問題算法還能中斷或者重啟傳輸流程。
第三種是壓縮模式。它使用游程編碼對發(fā)送數(shù)據(jù)進行壓縮,同時將壓縮相關(guān)信息以包頭字段的方式進行組織,這樣對方收到后知道如何對數(shù)據(jù)進行解壓縮,因此壓縮模式使用包頭+數(shù)據(jù)體的方式進行數(shù)據(jù)的組織發(fā)送。壓縮模式由于實現(xiàn)的復(fù)雜性,在FTP協(xié)議中很少使用,除非在特定網(wǎng)絡(luò)條件下需要盡可能減少數(shù)據(jù)傳輸量以保證效率和準(zhǔn)確性時,該模式才會被采用。
文件傳輸類似ctrl+c和ctrl+v,區(qū)別在于復(fù)制操作是在同一臺電腦內(nèi)將數(shù)據(jù)從一個目錄轉(zhuǎn)移到另一個目錄,文件傳輸是將數(shù)據(jù)從一臺電腦轉(zhuǎn)移到另一臺電腦。但這是這一區(qū)別產(chǎn)生了一些問題,例如在windows上文本文件的結(jié)尾使用CR+LF表示,但在Mac系統(tǒng)上文本文件結(jié)尾使用CR表示,于是把一個文本文件從Mac拷貝到windows,在文件末尾處就容易出問題,為此FTP協(xié)議在傳輸數(shù)據(jù)時對數(shù)據(jù)類型增加了若干考慮。
首先FTP協(xié)議把數(shù)據(jù)分成4種形式加以考慮,一是ASCII,也就是文本為字符形式;二是EBCDIC,這類文件也是字符形式只不過字符來自IBM的EBCDIC字符集;三是圖像,這類文件可以不用考慮不同系統(tǒng)之間的區(qū)別;四是局部形式,這類文件的特點是,一個字節(jié)長度不是由8個比特組成,某些特殊操作系統(tǒng)就有這種特性。我們在實踐中只考慮情況一和三,對于情況一,協(xié)議要負(fù)責(zé)把文件結(jié)尾的符號根據(jù)系統(tǒng)進行修改,情況二中的圖像文件不僅僅包括圖像,像zip文件這類有同一格式的文件都屬于圖像。
在傳輸ASCII文件時,發(fā)送方每讀取一行內(nèi)容后就在后面添加字符CR+LF,接收方讀取到這兩個字符組合后知道這是一行結(jié)束,然后根據(jù)當(dāng)前所在系統(tǒng)修改,如果接收方是Mac系統(tǒng),那么就將這兩個字符改為CR。由于FTP會對傳輸數(shù)據(jù)進行修改,因此在傳輸一定不能把”圖像“類型的文件設(shè)置成ASCII類型,要不然”圖像“類型文件中的二進制字符被修改后在接收方就無法打開文件。
接下來我們看看協(xié)議的數(shù)據(jù)包格式,特別是控制命令的數(shù)據(jù)包格式。FTP的控制命令有3種,第一種是接入控制命令,他對應(yīng)用戶登錄和認(rèn)證。第二種是傳輸控制命令,它用于雙方協(xié)定數(shù)據(jù)如何傳輸,例如設(shè)置傳輸文件的類型,設(shè)定主動或被動傳輸模式;第三是FTP服務(wù)命令,這些命令用于發(fā)起數(shù)據(jù)傳輸,修改或刪除文件等等。FTP在傳輸控制命令時使用Telnet協(xié)議,因此命令會以純字符的形式進行發(fā)送,下面我們以列表方式對命令內(nèi)容進行描述:
命令碼 命令 描述
USER 用戶名 在建立連接時發(fā)生用戶名
PASS 密碼 在用戶登錄時提供密碼
ACCT 賬戶類型 用于設(shè)定用戶權(quán)限,通常FTP武定服務(wù)器會根據(jù)用戶名來直接指定其權(quán)限
CWD 更改當(dāng)前目錄 設(shè)定用戶登錄后對應(yīng)的武定服務(wù)器目錄
CDUP 回到上一層目錄 將當(dāng)前目錄的上一層目錄作為數(shù)據(jù)傳輸目錄
SMNT 結(jié)構(gòu)掛載 讓武定服務(wù)器掛載上新的文件系統(tǒng)以便讀取特定文件
REIN 重新初始化 將連接重啟,他會將當(dāng)前控制參數(shù)全部清除,類似于系統(tǒng)重啟
QUIT 退出登錄 當(dāng)數(shù)據(jù)發(fā)送完畢后用戶退出登錄
接下來我們看看控制命令相關(guān)說明:
命令碼 命令 描述
PORT 建立數(shù)據(jù)傳輸端口 這個端口將被客戶端用于和服務(wù)器建立數(shù)據(jù)傳輸連接
PASV 消極模式 該命令讓客戶端向服務(wù)器主動發(fā)起連接
TYPE 文件類型 用于設(shè)定要傳輸?shù)奈募愋?br/>STRU 文件結(jié)構(gòu) 通常情況下該命令不會被使用
MODE 傳輸模式 設(shè)定數(shù)據(jù)如何傳輸,是以流模式,塊模式,還是壓縮模式
接下來我們看看服務(wù)命令的說明:
命令碼 命令 描述
RETR 獲取數(shù)據(jù) 通知服務(wù)器向客戶端發(fā)送文件數(shù)據(jù)
STOR 存儲 客戶端要發(fā)送文件給服務(wù)器
STOU 唯一存儲 要求服務(wù)器在確保當(dāng)前目錄下所傳輸?shù)奈募荒苡幸环?br/>APPEN 內(nèi)容添加 如果當(dāng)前傳輸?shù)奈募谀夸浵掠型募?,那么將傳輸?shù)膬?nèi)容添加到同名文件末尾而不是覆蓋同名文件
ALLO 分配內(nèi)存 要求服務(wù)器為將要發(fā)送的文件提前分配存儲空間
REST 重啟 重啟文件傳輸流程,該命令只用在塊傳輸或壓縮傳輸方式
RNFR 重命名文件 指定將要被重命名的文件名
RNTO 文件重命名 將指定文件改名為指定名稱
ABOR 取消命令 通知服務(wù)器取消執(zhí)行上一次發(fā)送的命令
DELE 刪除 通知服務(wù)器刪除某個文件
RMD 刪除目錄 通知服務(wù)器刪除整個目錄
MKD 創(chuàng)建目錄 通知服務(wù)器創(chuàng)建一個新目錄
PWD 顯示當(dāng)前目錄 通知服務(wù)器告知用戶當(dāng)前所在目錄
LIST 列表 獲得當(dāng)前目錄的所有文件名以及文件相關(guān)信息例如修改時間等
NLST 命名列表 僅僅獲得當(dāng)前目錄下的文件名
SYST 系統(tǒng) 要求服務(wù)器返回它所在的操作系統(tǒng)信息
STAT 狀態(tài) 要求服務(wù)器返回指定文件的當(dāng)前狀態(tài)或是當(dāng)前數(shù)據(jù)傳輸?shù)臓顟B(tài)
HELP 幫助 要求服務(wù)器返回幫助信息以便客戶端決定如何使用服務(wù)器
NOOP 無操作 該命令表示什么操作都不做,服務(wù)器會返回”O(jiān)K"命令從而確保連通正常
以上文章來源于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系創(chuàng)一網(wǎng)的客服處理。謝謝!