馮媛媛 劉建科
摘要;近年來,互聯(lián)網在全球范圍內的發(fā)展和普及,人們得以更方便地共享網絡資源。FTP(File Transfer Protocol,文件傳輸協(xié)議)是支持網絡中文件傳輸的標準協(xié)議。本文首先分析FTP,介紹了FTP工作原理。在此基礎上,利用C語言進行一個簡單的設計思路。
關鍵詞:客戶端;服務器;文件傳輸協(xié)議;數據傳輸
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2017)07-0043-02
互聯(lián)網在全球范圍內的發(fā)展和普及,方便更快捷的共享網絡資源,由此可見,開發(fā)Linux平臺下的Mini FTP客戶端具有重要的現實意義
1FTP總體分析
文件傳輸協(xié)議(File Transfer Protocol,英文簡寫FTP)是支持網絡中文件傳輸的標準協(xié)議。它屬于網絡協(xié)議組的應用層。FTP服務使用的是C/S模式,即FTP服務器和客戶端的通信實際是點對點的通信。
FTP服務模型如圖1。
注意:在整個FTP過程中數據連接是雙向的,而且數據連接無需在整個時間存在。
在FTP過程中,各模塊之間互相交互,共同實現FTP服務。它們在此期間充當的角色如下:
PI:協(xié)議解釋器。用戶、服務器分別關聯(lián)著任務user-PI、server-PI。
服務器-PI:服務器協(xié)議解釋器從端口L處“監(jiān)聽”,確認有無user-PI連接,形成控制通信連接?;趗ser-PI獲得FTP指令,隨后給予回應,對server-DTP進行控制。
用戶-PI:用戶協(xié)議解釋器對其U端口至server-FTP過程進行管理,若此過程屬于文件傳輸的一個組成,可以初始化FTP指令,接著控制user-DTP。
DTP:數據傳輸過程,與管理數據相連,存在主動、被動兩種形式。
服務器-DTP;數據傳輸過程,通常表現為“主動”狀態(tài),形成具備“監(jiān)聽”端口的數據連接。考慮到傳輸與存儲設置參數問題,應當由PI經指令傳輸數據。DTP處于“被動”狀態(tài)時,接收信息,相比直接相連數據端口,作用更加理想。
用戶-DTP:主要負責server-FTP過程的數據連接,傳輸時監(jiān)控數據端口。若服務器間進行數據傳輸,那么user-DTP隨之結束。
服務器-FTP過程:可以與user-FTP過程,或相關服務器協(xié)作,實現文件傳輸功能的過程,包含大量處理構建的集合,其核心部分是協(xié)議解釋器(PI)與數據傳輸過程(DTP)。
用戶-FTP過程;可以和1個及以上server-FTP過程協(xié)作,實現文件傳輸功能的集合。主要由但部分構成,分別是協(xié)議解釋器、數據傳輸過程、用戶界面。而對于用戶界面,能夠依靠本地語言呈現回應的對話。
FTP指令;FTP指令分為三類,訪問控制指令,傳輸參數指令,FTP服務指令。訪問控制指令指定訪問控制標識符。各個數據傳輸參數均存在缺省值,只有通過缺省值的控制,才可以通過相關指令明確傳輸參數。FTP服務指令表示用戶要求的文件傳輸與系統(tǒng)。
FTP回應:可以使數據傳輸請求、過程始終一致,也可以是用戶進程直觀確認服務器運行情況。
每個FTP回應均由3個數字以及相關文本組成。前者可以對下一步即將出現的狀態(tài)進行確認,而后者能夠主要呈現給真實用戶。
回應碼首個數字包含以下5個值。
1yz確認預備應答。及請求的操作處于初始化狀態(tài),后續(xù)指令處理前接受其他應答。
2yz確認完成回應。該操作執(zhí)行完畢,能夠重新進行請求。
3yz確認中間回應。獲得質量,而操作遭到中止,此時可以獲取其他信息。
4yz暫拒完成回應。指令尚未接受,操作也未執(zhí)行,然而錯誤條件呈現出暫時狀態(tài),能夠接著請求。
5yz拒絕完成應答。指令尚未接受,操作也未執(zhí)行。
以下代表第二個數字相關的功能編碼。
x0z語法——主要確認語法中的錯誤并給予標記。指令輸入正常,但不具備相應功能;無用、沒有執(zhí)行的指令。
x1z信息——主要確認請求信息,包含狀態(tài)、幫助等信息。
x2z連接——主要確認控制、數據連接狀態(tài)。
x3z認證與帳戶——主要確認登錄操作與賬戶程序。
x4z保存。
x5z文件系統(tǒng)——主要確認服務器文件系統(tǒng)狀態(tài),和請求的傳輸、部分文件系統(tǒng)操作存在聯(lián)系。
第三個數字在前者的基礎上對功能類別進行了更全面的描述。
在整個FTP過程模型中,用戶-PI首先按照Telnet協(xié)議控制連接。用戶初始化期間,能夠借助用戶-PI生成有效的FTP指令,同時依靠控制連接發(fā)送至服務器過程。標準回應同樣可以借此由服務器-PI傳輸至用戶-PI。FTP指令能夠給數據連接、文件系統(tǒng)操作(存儲,下載等等)設置參數(數據端口、結構等)。用戶-DTP必須通過特定數據端口進行“監(jiān)聽”,服務器原始數據連接,依靠合適的參數確保傳輸過程始終同步。在此強調一點,數據端口、初始化FTP指令需要的主機可以存在區(qū)別,然而,用戶-FTP過程應當通過特定數據端口進行“監(jiān)聽”。同時,數據連接不僅包括傳輸,而且包含接收。
2FTP總體設計思路
基于上面對FTP協(xié)議模型的分析,設計程序流程、用戶交互接口以及控制連接和數據連接的管理。
2.1用戶FTP流程
整個程序流程圖如圖2。
2.2用戶接口設計
用戶接口主要是用來實現用戶和程序的通信。本系統(tǒng)向用戶提供的命令接口有:
2.3用戶-Pl設計
在系統(tǒng)中,用戶-PI的作用是將用戶輸入的指令進行解析,然后將指令翻譯成標準的FTP指令通過控制連接發(fā)送給FTP服務器。在本系統(tǒng)中通過定義一個cmd結構體數組cmd_tab[],列出了用戶PI所能解析的命令。它將用戶的命令cmd_name轉化為cmd_handler處理函數??刂七B接訪問在本系統(tǒng)中是通過訪問創(chuàng)建的socket套接字ftp_sock_fd來實現。
2.4用戶-DTP設計
在系統(tǒng)中,用戶-DTP負責在客戶端和服務器進行數據傳輸,系統(tǒng)中通過函數initconn()和dataconn()創(chuàng)建數據連接,數據連接的套接字用變量data表示。而數據傳輸則通過函數ftp_send_and_resv()對套接字data讀寫來實現。
3結束語
本論文分析了當前網絡的發(fā)展狀況,對FTP協(xié)議進行分析,在FTP工作原理上,簡單的概括了開發(fā)Linux平臺下的FTP客戶端的設計思路。