史孝波周松斌黃東運程韜波
(1.廣東工業(yè)大學(xué) 2.廣東省自動化研究所)
一種基于UDP的文件獲取協(xié)議的實現(xiàn)*
史孝波1,2周松斌2黃東運2程韜波2
(1.廣東工業(yè)大學(xué) 2.廣東省自動化研究所)
文件傳輸協(xié)議(file transfer protocol,F(xiàn)TP)是網(wǎng)絡(luò)傳輸文件的常用協(xié)議,內(nèi)容較復(fù)雜。由于采用了傳輸控制協(xié)議(transport control protocol,TCP)提供的可靠傳輸服務(wù),使用FTP傳輸文件時經(jīng)常出現(xiàn)數(shù)據(jù)延遲問題。為此提出一種文件獲取協(xié)議(file obtain protocol,F(xiàn)OP)。FOP底層傳輸使用用戶數(shù)據(jù)報協(xié)議(user datagram protocol,UDP),無需非常復(fù)雜的傳輸模型即可實現(xiàn)在網(wǎng)絡(luò)上傳輸包括音視頻在內(nèi)的多類型文件。同時介紹了FOP的工作原理和實現(xiàn)方法,編寫了基于FOP協(xié)議的客戶和服務(wù)器軟件。
FOP;文件傳輸;UDP;傳輸協(xié)議
21世紀人類社會已經(jīng)進入了一個以計算機網(wǎng)絡(luò)為核心的信息化時代[1]。使用Internet提供的服務(wù),人們能夠方便地訪問大量的信息。FTP是網(wǎng)絡(luò)文件傳輸?shù)某S脜f(xié)議,通過兩個并發(fā)的TCP連接來完成網(wǎng)絡(luò)通信。FTP內(nèi)部協(xié)議命令數(shù)目繁多,實現(xiàn)起來較為復(fù)雜?;赥CP的應(yīng)用程序必須使用TCP所提供的可靠性、順序交付等服務(wù),應(yīng)用程序不能要求TCP去關(guān)閉某些不需要的功能,無論應(yīng)用程序是否需要,TCP都要強制使用。在效率高于可靠性的應(yīng)用中,要求數(shù)據(jù)盡量在主機之間流動,允許偶爾的數(shù)據(jù)丟失,但無法容忍由于可靠性帶來的延遲。對這些程序,TCP提供的可靠性、順序交付等不僅毫無價值,而且還會影響程序的正常行為。
基于以上問題,本文提出了一種文件獲取協(xié)議FOP。該協(xié)議具有易于實現(xiàn)、安全穩(wěn)定的特點,適合于傳輸多種類型的文件。以Visual Studio 2005為平臺,編寫基于FOP協(xié)議的客戶和服務(wù)器軟件。通過網(wǎng)絡(luò)通信實例,進一步闡述FOP協(xié)議的原理、特點和實現(xiàn)方法。
1.1 UDP客戶/服務(wù)器程序模型
與FTP采用TCP連接來完成數(shù)據(jù)傳輸?shù)姆绞讲煌?,F(xiàn)OP在傳輸層采用UDP協(xié)議。UDP為FOP的設(shè)計提供了基本的數(shù)據(jù)報傳輸機制。
UDP客戶/服務(wù)器程序模型如圖1所示。
圖1 UDP客戶/服務(wù)器程序模型
服務(wù)器創(chuàng)建socket之后,調(diào)用bind綁定本地地址,接收數(shù)據(jù)時調(diào)用函數(shù)recvfrom。recvfrom可以接收到達本地端口的任何數(shù)據(jù),并保存數(shù)據(jù)發(fā)送方的地址。服務(wù)器把應(yīng)答數(shù)據(jù)通過這個地址發(fā)送給客戶端??蛻舳伺c服務(wù)器通信之前不需要建立連接,直接調(diào)用函數(shù)sendto發(fā)送數(shù)據(jù),函數(shù)sendto在參數(shù)中已經(jīng)指明了數(shù)據(jù)接收地址。
采用UDP模型的應(yīng)用程序發(fā)送數(shù)據(jù)之前,不需要建立連接。數(shù)據(jù)發(fā)送完成后,也不用終止連接。只要應(yīng)用程序有數(shù)據(jù),就直接發(fā)送,沒有連接建立、維護、終止所帶來的開銷。由此給程序的設(shè)計帶來了靈活性和效率的提升。但是UDP也是不可靠的,對發(fā)送的數(shù)據(jù),并不保證對方一定會收到,即使收到了也沒有確認。FOP的消息傳遞過程被設(shè)計為兩個階段來保證數(shù)據(jù)的重傳及確認,解決可靠性問題。第一階段,由客戶發(fā)出“內(nèi)容發(fā)起請求”消息,服務(wù)器收到客戶消息后,向客戶發(fā)出“內(nèi)容發(fā)起請求回應(yīng)”消息;第二階段,客戶向服務(wù)器發(fā)出“請求進行內(nèi)容傳送”消息,服務(wù)器收到客戶消息后,發(fā)出“進行內(nèi)容傳送”消息。FOP消息傳遞流程如圖2所示。
圖2 FOP消息傳遞流程圖
1.2 FOP消息結(jié)構(gòu)定義
FOP消息結(jié)構(gòu)包括:FOP消息頭和FOP消息體兩部分。消息頭包括協(xié)議標識、應(yīng)用標識、命令標識、內(nèi)容類型等多個字段,固定為4個字節(jié)長度;消息體為傳輸數(shù)據(jù)的具體內(nèi)容。每個字段的描述如表1所示(消息體只列舉了許可碼和數(shù)據(jù)包數(shù)量的定義)。
表1 FOP消息結(jié)構(gòu)定義
FOP使用UDP作為底層傳輸協(xié)議。UDP位于網(wǎng)絡(luò)通信協(xié)議族的第三層,默認使用IP作為下一層的傳輸協(xié)議。網(wǎng)絡(luò)傳輸?shù)倪^程中,F(xiàn)OP消息被封裝在IP數(shù)據(jù)報中,如圖3所示。
圖3 封裝了FOP消息的IP數(shù)據(jù)報
消息體裝載客戶請求的數(shù)據(jù)內(nèi)容,長度不定。數(shù)據(jù)內(nèi)容由各種類型的字段組成,每個字段用來表示不同的內(nèi)容。例如表1中的許可碼和數(shù)據(jù)包數(shù)量。字段標記占用1個字節(jié),每個字段開始必須由對應(yīng)的1個字段結(jié)束。消息體的內(nèi)容長度分為定長和不定長兩種。當消息體的內(nèi)容是不定長時,還有長度標記,長度標記占2個字節(jié)。
1.3 FOP傳輸數(shù)據(jù)表示
通過對不同數(shù)據(jù)類型的編解碼,F(xiàn)OP實現(xiàn)了傳輸數(shù)據(jù)類型的多種選擇。客戶從服務(wù)器下載文件時,既可使用默認的文本類型,也可選擇其它文件類型。FOP支持文本、富文本、圖像、動畫、音視頻這5種文件類型。
目前FOP協(xié)議只支持文件式結(jié)構(gòu),即傳輸?shù)奈募袥]有內(nèi)部結(jié)構(gòu),文件的數(shù)據(jù)內(nèi)容以二進制流的方式傳輸。FOP支持多包發(fā)送,如果客戶請求的內(nèi)容在編碼后的長度大于一個數(shù)據(jù)包所許可的最大長度,將拆分傳送。在文件的傳輸過程中,F(xiàn)OP一次支持傳送的數(shù)據(jù)包大小為1kb,最大數(shù)據(jù)包數(shù)量為65535個。
1.4 FOP的安全策略
FOP的安全策略是通過采用UDP作為底層傳輸協(xié)議,設(shè)置客戶的操作權(quán)限以及增加許可碼功能來實現(xiàn)的。
FOP底層的傳輸協(xié)議使用UDP。在開始傳輸數(shù)據(jù)之前不需要建立TCP連接,避免了連接模式帶來的安全隱患。連接模式的安全隱患體現(xiàn)在:連接一旦被黑客攻擊,防火墻將不會有任何動作去處理這個連接。因為連接是由服務(wù)器本身向外發(fā)出的。
通過軟件設(shè)計,可以指定用戶對FOP服務(wù)器文件的操作權(quán)限。例如設(shè)置用戶“只讀”權(quán)限,即用戶只能從服務(wù)器下載文件,從而限制非法用戶對服務(wù)器文件的篡改。
FOP服務(wù)器在接收客戶的文件獲取請求時,要求客戶提供許可碼。許可碼是服務(wù)器隨機生成的一組16位字符串,內(nèi)容包括大小寫字母和數(shù)字,如圖4所示。在每次傳輸數(shù)據(jù)前,客戶通過第三方途徑(如手機短信、QQ等)得到服務(wù)器的許可碼。收到客戶的獲取文件請求時,F(xiàn)OP服務(wù)器驗證客戶的許可碼。對許可碼不正確的客戶,服務(wù)器將認為是非法客戶,其請求不做處理。
圖4 FOP服務(wù)器生成的16個許可碼
依照FOP協(xié)議規(guī)范,以Visual Studio 2005為平臺,編寫了基于FOP協(xié)議的客戶與服務(wù)器軟件。
2.1 軟件設(shè)計流程
FOP的軟件設(shè)計分為客戶程序設(shè)計和服務(wù)器程序設(shè)計兩個部分,如圖5所示。
圖5 FOP軟件設(shè)計流程圖
客戶程序的主要任務(wù)是從服務(wù)器下載資源文件。首先客戶端初始化,創(chuàng)建socket套接字。初始化成功后,向服務(wù)器發(fā)送預(yù)請求命令“CMD_PRE_CONTENT_REQUEST”。由于FOP使用Winsock編程,如果程序不確定有數(shù)據(jù)到來就調(diào)用recvfrom,則該套接字線程就會進入阻塞狀態(tài)。解決套接字線程阻塞的辦法是調(diào)用select,select在監(jiān)測緩沖區(qū)后,會立刻返回,然后給出返回值。這樣程序就可以繼續(xù)其它操作,而不會陷入阻塞狀態(tài)。當客戶收到服務(wù)器的響應(yīng)后,發(fā)送數(shù)據(jù)請求命令“CMD_REQUEST_DELIVERY”,繼續(xù)進入監(jiān)測狀態(tài),直到有數(shù)據(jù)到來,將數(shù)據(jù)保存到指定的位置。
服務(wù)器程序的主要任務(wù)是為客戶提供下載資源,響應(yīng)客戶程序的命令,傳輸數(shù)據(jù)。服務(wù)器程序也使用Winsock編程,程序流程與客戶程序的流程類似。服務(wù)器初始化成功后,開始等待客戶的命令。當收到客戶的預(yù)請求命令后,發(fā)送命令“CMD_PRE_CONT ENT_REQUEST_ACK”來響應(yīng)客戶的請求,否則調(diào)用select函數(shù)來繼續(xù)等待客戶發(fā)送的命令。當服務(wù)器收到客戶的數(shù)據(jù)請求命令后,將數(shù)據(jù)發(fā)送給客戶,發(fā)送完成后,關(guān)閉套接字。
2.2 通信測試實驗
通信測試實驗在Windows XP Professional操作系統(tǒng)上進行,硬件基本配置:Intel(R) Core(TM)i3 CPU 2.39 GHz,1.92 GB內(nèi)存。通過從FOP服務(wù)器下載一個音視頻文件來說明通信測試過程。
在服務(wù)器窗口,點擊“運行”按鈕,“運行”兩字變?yōu)椤胺?wù)器已經(jīng)運行”,表明服務(wù)器成功啟動。為服務(wù)器加載文本、圖像、動畫等資源文件,F(xiàn)OP服務(wù)器加載資源文件后如圖6所示。
圖6 加載了資源文件的FOP服務(wù)器
創(chuàng)建服務(wù)器成功后,啟動客戶端。在客戶端IP地址欄輸入服務(wù)器的地址“192.168.0.100”,端口號選擇“9158”,下載的文件類型選擇“音視頻”。點擊“請求資源”按鈕,此時會彈出“另存為”的窗口。把文件保存在指定位置,這時音視頻文件playgame.flv便成功地從FOP服務(wù)器下載到了客戶端。
打開從FOP服務(wù)器下載的音視頻文件,文件內(nèi)容完整清晰。選擇不同的下載文件類型,進行了文本、圖像等其它類型文件的通信實驗。并調(diào)用TRACE函數(shù),跟蹤了數(shù)據(jù)包的傳送情況,結(jié)果統(tǒng)計如表2所示。
表2 FOP傳送各類文件統(tǒng)計表
由于FOP一次支持傳送的數(shù)據(jù)包大小為1kb,最大數(shù)據(jù)包數(shù)量為65535個。觀察表2中的數(shù)據(jù)可以看出,在文件傳輸過程中,沒有出現(xiàn)丟包狀況,證明使用FOP協(xié)議傳輸文件是可靠的。
與傳統(tǒng)的用FTP實現(xiàn)網(wǎng)絡(luò)文件傳輸?shù)霓k法相比,F(xiàn)OP文件獲取協(xié)議更易理解和掌握?;贔OP協(xié)議的應(yīng)用程序無需建立復(fù)雜的傳輸模型即可實現(xiàn)互相交換消息,而且其底層使用UDP作為數(shù)據(jù)傳輸協(xié)議,沒有連接建立、維護、終止所帶來的開銷,能夠達到較高的通信效率,適合于對效率要求較高的場合,如圖像傳送和廣播消息等。FOP協(xié)議同樣對開發(fā)實時的語音傳輸、多媒體應(yīng)用等具有一定的借鑒意義。
[1] 趙強.基于FTP協(xié)議的文件傳輸服務(wù)器的研究[D].大連:大連海事大學(xué),2008.
[2] 孫韓林,金躍輝,高雪松,等.FTP協(xié)議的測試及分析[J].計算機工程,2008,34(23):133-138.
[3] 張會勇.WinSock網(wǎng)絡(luò)編程經(jīng)絡(luò)[M].北京:電子工業(yè)出版社,2012:41-51.
[4] 李祥.基于Web的網(wǎng)絡(luò)文件管理系統(tǒng)的研究與實現(xiàn)[D].蘭州:蘭州大學(xué),2010.
A Realization of File Obtain Protocol Based on UDP
Shi Xiaobo1,2Zhou Songbin2Huang Dongyun2Cheng Taobo2
(1.Guangdong University of Technology 2.Institute of Automation, Guangdong)
The File Transfer Protocol is a common protocol for file transfer in network, but the contents of FTP is complicated. FTP has often data transmission delay problem when transferring files, this is due to FTP uses the service provided by Transport Control Protocol. Therefore this paper presents a File Obtain Protocol. FOP uses User Datagram Protocol as the underlying transport protocol, FOP can transfer multiple types of files without complicated transmission model, these files include audio, video and so on. This paper introduces the working principle and realization method of the FOP,and the client software and server software based on FOP.
FOP; File Transfer; UDP; Transfer Protocol
史孝波,男,1986年生,研究生,研究方向:網(wǎng)絡(luò)化測控。E-mail: shixiaobo987@126.com
周松斌,男,1978年生,副研究員,研究方向:網(wǎng)絡(luò)化測控。
黃東運,男,1975年生,碩士,研究方向:機器視覺、圖像識別。
程韜波,男,1964年生,研究員,研究方向:復(fù)雜系統(tǒng)和智能控制。