您的當前位置: 首頁>>新聞中心>>行業資訊

java實現FTP協議,需要的數據傳輸模型和相關命令

瀏覽量(79848) 時間:2020-09-09

    FTP數據發送雙方建立控制命令通道和數據傳輸通道后,雙方就可以發送數據。在數據傳輸中,FTP協議又規定了三種模式,分別是流模式,塊模式和壓縮模式。

第一種流模式其實就是簡單的將要傳輸的數據比特以一種連續的非結構化的方式在TCP協議的幫助下發送給對方,這里它就是一段數據,不存在包頭或字段這類有關數據組織結構的信息。由于被傳輸的信息是裸數據,沒有任何結構化組織,因此發送的準確性完全依賴于傳輸方和下層協議的穩定性,特別是數據傳輸完成就得依靠關閉數據通道來表示。

相比于其他兩種模式,流模式的特點是效率高,因此在協議的實現中使用廣泛。同時它實現簡單,并且它將所有要傳輸的數據進行無差別對待,別管要傳輸的數據結構如何,它通通將其看做為字節流,因此就能隔離數據結構的復雜性對傳輸協議實現的影響。由此效率高,實現簡單,傳輸數據復雜性隔離這三個特點使得這種傳輸模式成為FTP的實現主流。

第二種塊模式是指,將要傳輸的數據切割成長度固定的若干各部分,每個部分在發送時使用包頭等字段進行封裝,使得發送的數據塊相互間形成獨立的數據包。包頭含有三字節字段,分別表示塊的長度以及其他相關數據。同時還有一種特別的算法用于對數據塊進行追蹤,如果數據塊傳輸出現問題算法還能中斷或者重啟傳輸流程。

第三種是壓縮模式。它使用游程編碼對發送數據進行壓縮,同時將壓縮相關信息以包頭字段的方式進行組織,這樣對方收到后知道如何對數據進行解壓縮,因此壓縮模式使用包頭+數據體的方式進行數據的組織發送。壓縮模式由于實現的復雜性,在FTP協議中很少使用,除非在特定網絡條件下需要盡可能減少數據傳輸量以保證效率和準確性時,該模式才會被采用。

文件傳輸類似ctrl+c和ctrl+v,區別在于復制操作是在同一臺電腦內將數據從一個目錄轉移到另一個目錄,文件傳輸是將數據從一臺電腦轉移到另一臺電腦。但這是這一區別產生了一些問題,例如在windows上文本文件的結尾使用CR+LF表示,但在Mac系統上文本文件結尾使用CR表示,于是把一個文本文件從Mac拷貝到windows,在文件末尾處就容易出問題,為此FTP協議在傳輸數據時對數據類型增加了若干考慮。

首先FTP協議把數據分成4種形式加以考慮,一是ASCII,也就是文本為字符形式;二是EBCDIC,這類文件也是字符形式只不過字符來自IBM的EBCDIC字符集;三是圖像,這類文件可以不用考慮不同系統之間的區別;四是局部形式,這類文件的特點是,一個字節長度不是由8個比特組成,某些特殊操作系統就有這種特性。我們在實踐中只考慮情況一和三,對于情況一,協議要負責把文件結尾的符號根據系統進行修改,情況二中的圖像文件不僅僅包括圖像,像zip文件這類有同一格式的文件都屬于圖像。

在傳輸ASCII文件時,發送方每讀取一行內容后就在后面添加字符CR+LF,接收方讀取到這兩個字符組合后知道這是一行結束,然后根據當前所在系統修改,如果接收方是Mac系統,那么就將這兩個字符改為CR。由于FTP會對傳輸數據進行修改,因此在傳輸一定不能把”圖像“類型的文件設置成ASCII類型,要不然”圖像“類型文件中的二進制字符被修改后在接收方就無法打開文件。

接下來我們看看協議的數據包格式,特別是控制命令的數據包格式。FTP的控制命令有3種,第一種是接入控制命令,他對應用戶登錄和認證。第二種是傳輸控制命令,它用于雙方協定數據如何傳輸,例如設置傳輸文件的類型,設定主動或被動傳輸模式;第三是FTP服務命令,這些命令用于發起數據傳輸,修改或刪除文件等等。FTP在傳輸控制命令時使用Telnet協議,因此命令會以純字符的形式進行發送,下面我們以列表方式對命令內容進行描述:
命令碼     命令     描述
USER     用戶名     在建立連接時發生用戶名
PASS     密碼     在用戶登錄時提供密碼
ACCT     賬戶類型     用于設定用戶權限,通常FTP服務器會根據用戶名來直接指定其權限
CWD     更改當前目錄     設定用戶登錄后對應的服務器目錄
CDUP     回到上一層目錄     將當前目錄的上一層目錄作為數據傳輸目錄
SMNT     結構掛載     讓服務器掛載上新的文件系統以便讀取特定文件
REIN     重新初始化     將連接重啟,他會將當前控制參數全部清除,類似于系統重啟
QUIT     退出登錄     當數據發送完畢后用戶退出登錄

接下來我們看看控制命令相關說明:
命令碼     命令     描述
PORT     建立數據傳輸端口     這個端口將被客戶端用于和服務器建立數據傳輸連接
PASV     消極模式     該命令讓客戶端向服務器主動發起連接
TYPE     文件類型     用于設定要傳輸的文件類型
STRU     文件結構     通常情況下該命令不會被使用
MODE     傳輸模式     設定數據如何傳輸,是以流模式,塊模式,還是壓縮模式

接下來我們看看服務命令的說明:
命令碼     命令     描述
RETR     獲取數據     通知服務器向客戶端發送文件數據
STOR     存儲     客戶端要發送文件給服務器
STOU     唯一存儲     要求服務器在確保當前目錄下所傳輸的文件只能有一份
APPEN     內容添加     如果當前傳輸的文件在目錄下有同名文件,那么將傳輸的內容添加到同名文件末尾而不是覆蓋同名文件
ALLO     分配內存     要求服務器為將要發送的文件提前分配存儲空間
REST     重啟     重啟文件傳輸流程,該命令只用在塊傳輸或壓縮傳輸方式
RNFR     重命名文件     指定將要被重命名的文件名
RNTO     文件重命名     將指定文件改名為指定名稱
ABOR     取消命令     通知服務器取消執行上一次發送的命令
DELE     刪除     通知服務器刪除某個文件
RMD     刪除目錄     通知服務器刪除整個目錄
MKD     創建目錄     通知服務器創建一個新目錄
PWD     顯示當前目錄     通知服務器告知用戶當前所在目錄
LIST     列表     獲得當前目錄的所有文件名以及文件相關信息例如修改時間等
NLST     命名列表     僅僅獲得當前目錄下的文件名
SYST     系統     要求服務器返回它所在的操作系統信息
STAT     狀態     要求服務器返回指定文件的當前狀態或是當前數據傳輸的狀態
HELP     幫助     要求服務器返回幫助信息以便客戶端決定如何使用服務器
NOOP     無操作     該命令表示什么操作都不做,服務器會返回”OK"命令從而確保連通正常

以上文章來源于網絡,如有侵權請聯系創一網的客服處理。謝謝!

最新文章
亚洲国产AV一区二区三区久久 <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>