摘 要: FTP服務是目前廣泛應用的因特網應用服務之一,為了在國產嵌入式實時操作系統平臺上開發FTP服務,采用多線程并發服務器的體系結構設計了一種嵌入式FTP服務器,實現了包括對RFC959標準定義的訪問控制命令、傳輸參數命令和FTP服務命令在內的常用命令的處理和響應功能,并且對該嵌入式FTP服務器的功能和性能進行了測試。測試結果表明功能正常,性能符合預期標準。
關鍵詞: 嵌入式系統; 文件傳輸協議; FTP服務器; 設計與實現
中圖分類號: TN911?34 文獻標識碼: 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(文件傳輸協議)是一種用于從網絡中一臺主機向另外一臺主機傳輸文件的協議,屬于Internet上最早提供的應用服務之一,通常將文件傳輸服務稱為FTP服務。FTP服務不受計算機類型及操作系統的限制,只要建立FTP鏈接的雙方都支持FTP協議,就可以方便地通過網絡進行遠程文件的下載、上傳和刪除等操作。
根據RFC959描述[1],FTP的目標是:促進程序/數據文件的共享;鼓勵(通過程序)使用遠程計算機;使用戶不必面對不同主機上不同文件系統的差異;對數據進行高效可靠的傳輸。本文在國產嵌入式實時操作系統的平臺上,在已有TCP協議支持的基礎上,設計開發滿足RFC959要求的FTP服務器,功能支持對FTP客戶端常用命令的正確響應,性能滿足嵌入式環境的要求。
1 文件傳輸過程
1.1 FTP工作模式
FTP服務采用典型的客戶端/服務器工作模式,在網絡遠端提供FTP服務的計算機稱為FTP服務器,與用戶的客戶端通過TCP進行鏈接。FTP服務器通過2個并行的TCP鏈接來提供服務,一個是控制鏈接,一個是數據鏈接[2?3]。控制鏈接始終等待客戶與服務器之間的通信,該鏈接將客戶命令從客戶端傳給服務器,并傳回服務器的應答。數據鏈接則是每當一個文件在客戶端和服務器之間傳輸前,才進行創建,只用于數據傳輸目的[4]。客戶端與服務器及其連接情況如圖1所示。
1.2 FTP工作流程
在典型的FTP客戶機和服務器的鏈接建立及交互過程中,一般需要經歷以下幾個步驟:
(1)在服務器端運行FTP服務器端程序,等待用戶發出鏈接請求,在客戶端運行FTP客戶端程序。
(2)當FTP客戶端發起FTP會話嘗試鏈接服務器時,客戶端首先發起建立與FTP服務器21端口之間的控制鏈接,通過該TCP鏈接發送用戶名和密碼給服務器端。
(3)客戶端為所在的數據鏈接選擇一個臨時的端口號,并通過控制鏈接將該端口號發送給服務器。
(4)當需要進入文件傳輸階段,客戶端和服務器通過“數據鏈接”來傳輸文件,通過“控制鏈接”來傳輸命令。
(5)當數據傳輸完畢后,關閉用于建立數據鏈接的端口,直到下次數據鏈接發起時重新打開,而控制鏈接在整個FTP會話期間一直處于打開狀態[5]。
圖1 客戶端與服務器及其連接情況
2 FTP服務器設計
選擇不同的服務器模式將會影響到整個設計和實現階段,并且很大程度影響著服務器的性能。FTP服務器的內部設計可以根據需要和平臺軟硬件的性能綜合考慮,選擇設計不同的服務器模式。
2.1 服務器結構
服務器的結構主要有循環服務器和并發服務器2種,其中并發服務器又可以細分為單線程并發服務器和多線程并發服務器[6]。
2.1.1 循環服務器
循環服務器適用于簡單的應用協議,與客戶端采用停止?等待的通信方式,使用單個線程循環運行,每次只能處理一個客戶端的請求,但是它的設計、編碼、調試和后續維護相對并發服務器都比較簡單。
2.1.2 單線程并發服務器
單線程并發服務器是由單個服務器線程預先為多個客戶端打開TCP鏈接,當有任意的客戶端請求到達時,服務器線程由阻塞態轉為運行態來處理該客戶端請求并發送響應,在此期間阻塞其他客戶端請求。完成一個客戶端請求后,服務器線程再次阻塞以等待其他的任意客戶端的請求。單線程并發服務器適用于操作系統創建新的線程開銷很大的情況下。
2.1.3 多線程并發服務器
多線程并發服務器設計使用多個進程及多個線程,服務器首先執行一個主線程,在熟知的端口上打開一個鏈接,等待客戶端消息,當客戶端請求到來時,主線程創建子線程來處理該客戶請求,此時主線程不與客戶端直接通信,而是由每個子線程并發地來與各自對應的客戶端進行通信。當子線程完成客戶請求的響應并發送給客戶端之后,子線程退出,而此時主線程一直在等待其他的客戶鏈接請求。
2.2 方案選擇
服務器結構的方案選擇主要取決于服務器的應用場景、期望達到的性能以及方案實現的難易程度。
循環服務器的結構容易實現但是需要客戶端等待來獲取服務,難以滿足多個客戶的需求,服務器效率性能低下;單線程服務器結構需要服務器線程反復地在它打開的鏈接上等待客戶端請求,需要每次循環地檢查網絡鏈接狀況和文件系統處理文件的狀態,查詢完成后才能夠刷新數據顯示,因此造成不必要的延遲;多線程并發服務器同時和多個客戶端進行通信,由操作系統分配各個線程的處理器時間,比較適合FTP服務器的對每個客戶端一直存在控制鏈接和需要時建立數據鏈接的特點。綜合上述分析,本課題中FTP服務器采用多線程并發服務器結構的方案是比較合理的。
3 FTP服務器實現
根據上述設計方案的描述,本課題中FTP服務器的程序架構進行如下設計:
系統上電操作系統運行之后,ftpdInit函數在默認的端口上創建一個FTP服務器控制鏈接,并且調用ftpdTask創建一個FTP服務進程來響應多個用戶的請求。其中ftpdTask使用ftpdWorkTask為每個不同的用戶在各自需要時分別創建一個服務進程進行響應,如圖2所示。
圖2 FTP服務器進程結構
ftpdWorkTask完成FTP服務器的主要協議處理功能,該進程分析每個客戶端請求命令,做出響應并且回復給客戶端。函數的主體是一個循環結構,分析客戶端請求命令的功能由簡單的strncmp函數來實現,如果經過分析之后命令符合有效命令的格式,ftpdWorkTask將調用響應的處理函數并且將處理結果返回給客戶端。
根據RFC959,FTP服務器需要響應的命令分為訪問控制命令、傳輸參數命令和服務命令[1]。本課題設計的FTP服務器實現了對以下命令的響應。
(1)訪問控制命令。訪問控制命令如表1所示。
表1 訪問控制命令
(2)傳輸參數命令。所有的數據傳輸參數都有默認值,只有在默認值需要改變的時候才需要命令去指定傳送數據傳輸參數。默認值是最后一次指定的值,如果未被指定,則是標準默認值。這意味著服務器必須“記住”當前可用的默認值,如表2所示。
表2 傳輸參數命令
(3)FTP服務命令。FTP服務命令定義了用戶請求傳送文件或者文件系統的功能,如表3所示。
表3 FTP服務命令
4 功能及性能測試
在完成設計、編碼及交叉編譯之后,對嵌入式FTP服務器在目標機上的運行的情況進行功能和簡單的性能測試。
4.1 功能測試
功能測試的目的是驗證FTP服務器是否能夠正常處理協議所要求的功能,測試工具為FTP客戶端軟件包括WindowsXP命令行中的FTP命令,FlashFXP以及在WindowsCE操作系統下開發的專用FTP客戶端軟件。
4.2 性能測試
嵌入式FTP服務器運行在MPC755處理器子卡上,處理器為PowerPC755,處理器工作頻率為266 MHz,局部總線頻率為66 MHz,1路10M/100M以太網接口。存儲設備為大容量存儲器子卡,存儲容量為128 GB,讀/寫訪問速度5 MB/s以上(裸盤)。測試結果表明使用Windows XP平臺的客戶端軟件進行下載速度可以達到800 KB/s以上,使用WindowsCE平臺的客戶端軟件進行下載速度可以達到300 KB/s以上。
5 結 語
本文介紹了FTP協議的工作模式和工作流程,介紹了FTP服務器的典型結構,即循環服務器、單線程并發服務器和多線程并發服務器,并且分析了這三種FTP服務器結構的優缺點,根據課題項目需要,選擇多線程并發服務器的結構為設計方案進行詳細設計。實現的功能包括對RFC959標準定義的訪問控制命令、傳輸參數命令和FTP服務命令在內的常用命令的處理和響應。最后對該嵌入式FTP服務器的功能和性能進行簡單的測試,測試結果表明功能和性能符合期望標準。
參考文獻
[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].北京:機械工業出版社,2000.
[3] COMER D E, STEVENS D L. TCP/IP網絡互聯技術(卷3) [M].北京:清華大學出版社,2004.
[4] HALL E A. Internet核心協議權威指南[M].北京:中國電力出版社,2002.
[5] COMER D E . Internetworking with TCP/IP principles, protocols and architecture [M].北京:人民郵電出版社,2006.
[6] 蔡勇.FTP服務器技術研究及實現[D].成都:電子科技大學,2005.