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