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