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