摘 要: FTP服務(wù)是目前廣泛應(yīng)用的因特網(wǎng)應(yīng)用服務(wù)之一,為了在國產(chǎn)嵌入式實(shí)時(shí)操作系統(tǒng)平臺上開發(fā)FTP服務(wù),采用多線程并發(fā)服務(wù)器的體系結(jié)構(gòu)設(shè)計(jì)了一種嵌入式FTP服務(wù)器,實(shí)現(xiàn)了包括對RFC959標(biāo)準(zhǔn)定義的訪問控制命令、傳輸參數(shù)命令和FTP服務(wù)命令在內(nèi)的常用命令的處理和響應(yīng)功能,并且對該嵌入式FTP服務(wù)器的功能和性能進(jìn)行了測試。測試結(jié)果表明功能正常,性能符合預(yù)期標(biāo)準(zhǔn)。
關(guān)鍵詞: 嵌入式系統(tǒng); 文件傳輸協(xié)議; FTP服務(wù)器; 設(shè)計(jì)與實(shí)現(xiàn)
中圖分類號: TN911?34 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2013)14?0055?03
Design and realization of embedded FTP server
HAO Yu?kai
(Aeronautical Computing Technique Research Institute, Xi’an 710119, China)
Abstract: FTP service is one of the widely used application services on Internet. Multi?threaded concurrent server architecture is adopted to design an embedded FTP server in order to develop FTP service on the domestic embedded real?time operating system platform. The processing and responding functions of the common commands such as access control commands, transmission parameter commands and FTP service commands defined for RFC959 were implemented. The test results of the embedded FTP server function and performance show that the function is normal, and the performance is satisfied to the expected standards.
Keywords: embedded system; file transfer protocol; FTP server; design and ralization
FTP(文件傳輸協(xié)議)是一種用于從網(wǎng)絡(luò)中一臺主機(jī)向另外一臺主機(jī)傳輸文件的協(xié)議,屬于Internet上最早提供的應(yīng)用服務(wù)之一,通常將文件傳輸服務(wù)稱為FTP服務(wù)。FTP服務(wù)不受計(jì)算機(jī)類型及操作系統(tǒng)的限制,只要建立FTP鏈接的雙方都支持FTP協(xié)議,就可以方便地通過網(wǎng)絡(luò)進(jìn)行遠(yuǎn)程文件的下載、上傳和刪除等操作。
根據(jù)RFC959描述[1],F(xiàn)TP的目標(biāo)是:促進(jìn)程序/數(shù)據(jù)文件的共享;鼓勵(通過程序)使用遠(yuǎn)程計(jì)算機(jī);使用戶不必面對不同主機(jī)上不同文件系統(tǒng)的差異;對數(shù)據(jù)進(jìn)行高效可靠的傳輸。本文在國產(chǎn)嵌入式實(shí)時(shí)操作系統(tǒng)的平臺上,在已有TCP協(xié)議支持的基礎(chǔ)上,設(shè)計(jì)開發(fā)滿足RFC959要求的FTP服務(wù)器,功能支持對FTP客戶端常用命令的正確響應(yīng),性能滿足嵌入式環(huán)境的要求。
1 文件傳輸過程
1.1 FTP工作模式
FTP服務(wù)采用典型的客戶端/服務(wù)器工作模式,在網(wǎng)絡(luò)遠(yuǎn)端提供FTP服務(wù)的計(jì)算機(jī)稱為FTP服務(wù)器,與用戶的客戶端通過TCP進(jìn)行鏈接。FTP服務(wù)器通過2個并行的TCP鏈接來提供服務(wù),一個是控制鏈接,一個是數(shù)據(jù)鏈接[2?3]。控制鏈接始終等待客戶與服務(wù)器之間的通信,該鏈接將客戶命令從客戶端傳給服務(wù)器,并傳回服務(wù)器的應(yīng)答。數(shù)據(jù)鏈接則是每當(dāng)一個文件在客戶端和服務(wù)器之間傳輸前,才進(jìn)行創(chuàng)建,只用于數(shù)據(jù)傳輸目的[4]。客戶端與服務(wù)器及其連接情況如圖1所示。
1.2 FTP工作流程
在典型的FTP客戶機(jī)和服務(wù)器的鏈接建立及交互過程中,一般需要經(jīng)歷以下幾個步驟:
(1)在服務(wù)器端運(yùn)行FTP服務(wù)器端程序,等待用戶發(fā)出鏈接請求,在客戶端運(yùn)行FTP客戶端程序。
(2)當(dāng)FTP客戶端發(fā)起FTP會話嘗試鏈接服務(wù)器時(shí),客戶端首先發(fā)起建立與FTP服務(wù)器21端口之間的控制鏈接,通過該TCP鏈接發(fā)送用戶名和密碼給服務(wù)器端。
(3)客戶端為所在的數(shù)據(jù)鏈接選擇一個臨時(shí)的端口號,并通過控制鏈接將該端口號發(fā)送給服務(wù)器。
(4)當(dāng)需要進(jìn)入文件傳輸階段,客戶端和服務(wù)器通過“數(shù)據(jù)鏈接”來傳輸文件,通過“控制鏈接”來傳輸命令。
(5)當(dāng)數(shù)據(jù)傳輸完畢后,關(guān)閉用于建立數(shù)據(jù)鏈接的端口,直到下次數(shù)據(jù)鏈接發(fā)起時(shí)重新打開,而控制鏈接在整個FTP會話期間一直處于打開狀態(tài)[5]。
圖1 客戶端與服務(wù)器及其連接情況
2 FTP服務(wù)器設(shè)計(jì)
選擇不同的服務(wù)器模式將會影響到整個設(shè)計(jì)和實(shí)現(xiàn)階段,并且很大程度影響著服務(wù)器的性能。FTP服務(wù)器的內(nèi)部設(shè)計(jì)可以根據(jù)需要和平臺軟硬件的性能綜合考慮,選擇設(shè)計(jì)不同的服務(wù)器模式。
2.1 服務(wù)器結(jié)構(gòu)
服務(wù)器的結(jié)構(gòu)主要有循環(huán)服務(wù)器和并發(fā)服務(wù)器2種,其中并發(fā)服務(wù)器又可以細(xì)分為單線程并發(fā)服務(wù)器和多線程并發(fā)服務(wù)器[6]。
2.1.1 循環(huán)服務(wù)器
循環(huán)服務(wù)器適用于簡單的應(yīng)用協(xié)議,與客戶端采用停止?等待的通信方式,使用單個線程循環(huán)運(yùn)行,每次只能處理一個客戶端的請求,但是它的設(shè)計(jì)、編碼、調(diào)試和后續(xù)維護(hù)相對并發(fā)服務(wù)器都比較簡單。
2.1.2 單線程并發(fā)服務(wù)器
單線程并發(fā)服務(wù)器是由單個服務(wù)器線程預(yù)先為多個客戶端打開TCP鏈接,當(dāng)有任意的客戶端請求到達(dá)時(shí),服務(wù)器線程由阻塞態(tài)轉(zhuǎn)為運(yùn)行態(tài)來處理該客戶端請求并發(fā)送響應(yīng),在此期間阻塞其他客戶端請求。完成一個客戶端請求后,服務(wù)器線程再次阻塞以等待其他的任意客戶端的請求。單線程并發(fā)服務(wù)器適用于操作系統(tǒng)創(chuàng)建新的線程開銷很大的情況下。
2.1.3 多線程并發(fā)服務(wù)器
多線程并發(fā)服務(wù)器設(shè)計(jì)使用多個進(jìn)程及多個線程,服務(wù)器首先執(zhí)行一個主線程,在熟知的端口上打開一個鏈接,等待客戶端消息,當(dāng)客戶端請求到來時(shí),主線程創(chuàng)建子線程來處理該客戶請求,此時(shí)主線程不與客戶端直接通信,而是由每個子線程并發(fā)地來與各自對應(yīng)的客戶端進(jìn)行通信。當(dāng)子線程完成客戶請求的響應(yīng)并發(fā)送給客戶端之后,子線程退出,而此時(shí)主線程一直在等待其他的客戶鏈接請求。
2.2 方案選擇
服務(wù)器結(jié)構(gòu)的方案選擇主要取決于服務(wù)器的應(yīng)用場景、期望達(dá)到的性能以及方案實(shí)現(xiàn)的難易程度。
循環(huán)服務(wù)器的結(jié)構(gòu)容易實(shí)現(xiàn)但是需要客戶端等待來獲取服務(wù),難以滿足多個客戶的需求,服務(wù)器效率性能低下;單線程服務(wù)器結(jié)構(gòu)需要服務(wù)器線程反復(fù)地在它打開的鏈接上等待客戶端請求,需要每次循環(huán)地檢查網(wǎng)絡(luò)鏈接狀況和文件系統(tǒng)處理文件的狀態(tài),查詢完成后才能夠刷新數(shù)據(jù)顯示,因此造成不必要的延遲;多線程并發(fā)服務(wù)器同時(shí)和多個客戶端進(jìn)行通信,由操作系統(tǒng)分配各個線程的處理器時(shí)間,比較適合FTP服務(wù)器的對每個客戶端一直存在控制鏈接和需要時(shí)建立數(shù)據(jù)鏈接的特點(diǎn)。綜合上述分析,本課題中FTP服務(wù)器采用多線程并發(fā)服務(wù)器結(jié)構(gòu)的方案是比較合理的。
3 FTP服務(wù)器實(shí)現(xiàn)
根據(jù)上述設(shè)計(jì)方案的描述,本課題中FTP服務(wù)器的程序架構(gòu)進(jìn)行如下設(shè)計(jì):
系統(tǒng)上電操作系統(tǒng)運(yùn)行之后,ftpdInit函數(shù)在默認(rèn)的端口上創(chuàng)建一個FTP服務(wù)器控制鏈接,并且調(diào)用ftpdTask創(chuàng)建一個FTP服務(wù)進(jìn)程來響應(yīng)多個用戶的請求。其中ftpdTask使用ftpdWorkTask為每個不同的用戶在各自需要時(shí)分別創(chuàng)建一個服務(wù)進(jìn)程進(jìn)行響應(yīng),如圖2所示。
圖2 FTP服務(wù)器進(jìn)程結(jié)構(gòu)
ftpdWorkTask完成FTP服務(wù)器的主要協(xié)議處理功能,該進(jìn)程分析每個客戶端請求命令,做出響應(yīng)并且回復(fù)給客戶端。函數(shù)的主體是一個循環(huán)結(jié)構(gòu),分析客戶端請求命令的功能由簡單的strncmp函數(shù)來實(shí)現(xiàn),如果經(jīng)過分析之后命令符合有效命令的格式,ftpdWorkTask將調(diào)用響應(yīng)的處理函數(shù)并且將處理結(jié)果返回給客戶端。
根據(jù)RFC959,F(xiàn)TP服務(wù)器需要響應(yīng)的命令分為訪問控制命令、傳輸參數(shù)命令和服務(wù)命令[1]。本課題設(shè)計(jì)的FTP服務(wù)器實(shí)現(xiàn)了對以下命令的響應(yīng)。
(1)訪問控制命令。訪問控制命令如表1所示。
表1 訪問控制命令
(2)傳輸參數(shù)命令。所有的數(shù)據(jù)傳輸參數(shù)都有默認(rèn)值,只有在默認(rèn)值需要改變的時(shí)候才需要命令去指定傳送數(shù)據(jù)傳輸參數(shù)。默認(rèn)值是最后一次指定的值,如果未被指定,則是標(biāo)準(zhǔn)默認(rèn)值。這意味著服務(wù)器必須“記住”當(dāng)前可用的默認(rèn)值,如表2所示。
表2 傳輸參數(shù)命令
(3)FTP服務(wù)命令。FTP服務(wù)命令定義了用戶請求傳送文件或者文件系統(tǒng)的功能,如表3所示。
表3 FTP服務(wù)命令
4 功能及性能測試
在完成設(shè)計(jì)、編碼及交叉編譯之后,對嵌入式FTP服務(wù)器在目標(biāo)機(jī)上的運(yùn)行的情況進(jìn)行功能和簡單的性能測試。
4.1 功能測試
功能測試的目的是驗(yàn)證FTP服務(wù)器是否能夠正常處理協(xié)議所要求的功能,測試工具為FTP客戶端軟件包括WindowsXP命令行中的FTP命令,F(xiàn)lashFXP以及在WindowsCE操作系統(tǒng)下開發(fā)的專用FTP客戶端軟件。
4.2 性能測試
嵌入式FTP服務(wù)器運(yùn)行在MPC755處理器子卡上,處理器為PowerPC755,處理器工作頻率為266 MHz,局部總線頻率為66 MHz,1路10M/100M以太網(wǎng)接口。存儲設(shè)備為大容量存儲器子卡,存儲容量為128 GB,讀/寫訪問速度5 MB/s以上(裸盤)。測試結(jié)果表明使用Windows XP平臺的客戶端軟件進(jìn)行下載速度可以達(dá)到800 KB/s以上,使用WindowsCE平臺的客戶端軟件進(jìn)行下載速度可以達(dá)到300 KB/s以上。
5 結(jié) 語
本文介紹了FTP協(xié)議的工作模式和工作流程,介紹了FTP服務(wù)器的典型結(jié)構(gòu),即循環(huán)服務(wù)器、單線程并發(fā)服務(wù)器和多線程并發(fā)服務(wù)器,并且分析了這三種FTP服務(wù)器結(jié)構(gòu)的優(yōu)缺點(diǎn),根據(jù)課題項(xiàng)目需要,選擇多線程并發(fā)服務(wù)器的結(jié)構(gòu)為設(shè)計(jì)方案進(jìn)行詳細(xì)設(shè)計(jì)。實(shí)現(xiàn)的功能包括對RFC959標(biāo)準(zhǔn)定義的訪問控制命令、傳輸參數(shù)命令和FTP服務(wù)命令在內(nèi)的常用命令的處理和響應(yīng)。最后對該嵌入式FTP服務(wù)器的功能和性能進(jìn)行簡單的測試,測試結(jié)果表明功能和性能符合期望標(biāo)準(zhǔn)。
參考文獻(xiàn)
[1] POSTEL J, REYNOLDS J. RFC959 [EB/OL]. [1985?10?22]. http://www.ietf.org/rfc/rfc959.
[2] STEVENS W R. TCP/IP illustrated, Volume 1: the protocols [M].北京:機(jī)械工業(yè)出版社,2000.
[3] COMER D E, STEVENS D L. TCP/IP網(wǎng)絡(luò)互聯(lián)技術(shù)(卷3) [M].北京:清華大學(xué)出版社,2004.
[4] HALL E A. Internet核心協(xié)議權(quán)威指南[M].北京:中國電力出版社,2002.
[5] COMER D E . Internetworking with TCP/IP principles, protocols and architecture [M].北京:人民郵電出版社,2006.
[6] 蔡勇.FTP服務(wù)器技術(shù)研究及實(shí)現(xiàn)[D].成都:電子科技大學(xué),2005.