嵌入式FTP服務器的設計與實現(xiàn)

  作者:郝玉鍇

  FTP服務是目前廣泛應用的因特網(wǎng)應用服務之一,為了在國產(chǎn)嵌入式實時操作系統(tǒng)平臺上開發(fā)FTP服務,采用多線程并發(fā)服務器的體系結(jié)構(gòu)設計了一種嵌入式FTP服務器,實現(xiàn)了包括對RFC959標準定義的訪問控制命令、傳輸參數(shù)命令和FTP服務命令在內(nèi)的常用命令的處理和響應功能,并且對該嵌入式FTP服務器的功能和性能進行了測試。

  0 引言

  FTP(文件傳輸協(xié)議)是一種用于從網(wǎng)絡中一臺主機向另外一臺主機傳輸文件的協(xié)議,屬于Internet上最早提供的應用服務之一,通常將文件傳輸服務稱為FTP服務。FTP服務不受計算機類型及操作系統(tǒng)的限制,只要建立FTP鏈接的雙方都支持FTP協(xié)議,就可以方便地通過網(wǎng)絡進行遠程文件的下載、上傳和刪除等操作。

  根據(jù)RFC959描述,F(xiàn)TP的目標是:促進程序/數(shù)據(jù)文件的共享;鼓勵(通過程序)使用遠程計算機;使用戶不必面對不同主機上不同文件系統(tǒng)的差異;對數(shù)據(jù)進行高效可靠的傳輸。本文在國產(chǎn)嵌入式實時操作系統(tǒng)的平臺上,在已有TCP協(xié)議支持的基礎上,設計開發(fā)滿足RFC959要求的FTP服務器,功能支持對FTP客戶端常用命令的正確響應,性能滿足嵌入式環(huán)境的要求。

  1 文件傳輸過程

  1.1 FTP工作模式

  FTP服務采用典型的客戶端/服務器工作模式,在網(wǎng)絡遠端提供FTP服務的計算機稱為FTP服務器,與用戶的客戶端通過TCP進行鏈接。FTP服務器通過2個并行的TCP鏈接來提供服務,一個是控制鏈接,一個是數(shù)據(jù)鏈接?刂奇溄邮冀K等待客戶與服務器之間的通信,該鏈接將客戶命令從客戶端傳給服務器,并傳回服務器的應答。數(shù)據(jù)鏈接則是每當一個文件在客戶端和服務器之間傳輸前,才進行創(chuàng)建,只用于數(shù)據(jù)傳輸目的。

  客戶端與服務器及其連接情況如圖1所示。

  1.2 FTP工作流程

  在典型的FTP客戶機和服務器的鏈接建立及交互過程中,一般需要經(jīng)歷以下幾個步驟:

  (1)在服務器端運行FTP服務器端程序,等待用戶發(fā)出鏈接請求,在客戶端運行FTP客戶端程序。

 。2)當FTP 客戶端發(fā)起FTP 會話嘗試鏈接服務器時,客戶端首先發(fā)起建立與FTP服務器21端口之間的控制鏈接,通過該TCP鏈接發(fā)送用戶名和密碼給服務器端。

 。3)客戶端為所在的數(shù)據(jù)鏈接選擇一個臨時的端口號,并通過控制鏈接將該端口號發(fā)送給服務器。

 。4)當需要進入文件傳輸階段,客戶端和服務器通過“數(shù)據(jù)鏈接”來傳輸文件,通過“控制鏈接”來傳輸命令。

 。5)當數(shù)據(jù)傳輸完畢后,關(guān)閉用于建立數(shù)據(jù)鏈接的端口,直到下次數(shù)據(jù)鏈接發(fā)起時重新打開,而控制鏈接在整個FTP會話期間一直處于打開狀態(tài)。

嵌入式FTP服務器的設計與實現(xiàn)

  2 FTP 服務器設計

  選擇不同的服務器模式將會影響到整個設計和實現(xiàn)階段,并且很大程度影響著服務器的性能。FTP服務器的內(nèi)部設計可以根據(jù)需要和平臺軟硬件的性能綜合考慮,選擇設計不同的服務器模式。

  2.1 服務器結(jié)構(gòu)

  服務器的結(jié)構(gòu)主要有循環(huán)服務器和并發(fā)服務器2種,其中并發(fā)服務器又可以細分為單線程并發(fā)服務器和多線程并發(fā)服務器。

  2.1.1 循環(huán)服務器

  循環(huán)服務器適用于簡單的應用協(xié)議,與客戶端采用停止-等待的通信方式,使用單個線程循環(huán)運行,每次只能處理一個客戶端的請求,但是它的設計、編碼、調(diào)試和后續(xù)維護相對并發(fā)服務器都比較簡單。

  2.1.2 單線程并發(fā)服務器

  單線程并發(fā)服務器是由單個服務器線程預先為多個客戶端打開TCP鏈接,當有任意的客戶端請求到達時,服務器線程由阻塞態(tài)轉(zhuǎn)為運行態(tài)來處理該客戶端請求并發(fā)送響應,在此期間阻塞其他客戶端請求。完成一個客戶端請求后,服務器線程再次阻塞以等待其他的任意客戶端的請求。單線程并發(fā)服務器適用于操作系統(tǒng)創(chuàng)建新的線程開銷很大的情況下。

  2.1.3 多線程并發(fā)服務器

  多線程并發(fā)服務器設計使用多個進程及多個線程,服務器首先執(zhí)行一個主線程,在熟知的端口上打開一個鏈接,等待客戶端消息,當客戶端請求到來時,主線程創(chuàng)建子線程來處理該客戶請求,此時主線程不與客戶端直接通信,而是由每個子線程并發(fā)地來與各自對應的客戶端進行通信。當子線程完成客戶請求的響應并發(fā)送給客戶端之后,子線程退出,而此時主線程一直在等待其他的客戶鏈接請求。

  2.2 方案選擇

  服務器結(jié)構(gòu)的方案選擇主要取決于服務器的應用場景、期望達到的性能以及方案實現(xiàn)的難易程度。

  循環(huán)服務器的結(jié)構(gòu)容易實現(xiàn)但是需要客戶端等待來獲取服務,難以滿足多個客戶的需求,服務器效率性能低下;單線程服務器結(jié)構(gòu)需要服務器線程反復地在它打開的鏈接上等待客戶端請求,需要每次循環(huán)地檢查網(wǎng)絡鏈接狀況和文件系統(tǒng)處理文件的狀態(tài),查詢完成后才能夠刷新數(shù)據(jù)顯示,因此造成不必要的延遲;多線程并發(fā)服務器同時和多個客戶端進行通信,由操作系統(tǒng)分配各個線程的處理器時間,比較適合FTP服務器的對每個客戶端一直存在控制鏈接和需要時建立數(shù)據(jù)鏈接的特點。綜合上述分析,本課題中FTP服務器采用多線程并發(fā)服務器結(jié)構(gòu)的方案是比較合理的。


微信掃描分享本文到朋友圈
掃碼關(guān)注5G通信官方公眾號,免費領取以下5G精品資料
  • 1、回復“YD5GAI”免費領取《中國移動:5G網(wǎng)絡AI應用典型場景技術(shù)解決方案白皮書
  • 2、回復“5G6G”免費領取《5G_6G毫米波測試技術(shù)白皮書-2022_03-21
  • 3、回復“YD6G”免費領取《中國移動:6G至簡無線接入網(wǎng)白皮書
  • 4、回復“LTBPS”免費領取《《中國聯(lián)通5G終端白皮書》
  • 5、回復“ZGDX”免費領取《中國電信5GNTN技術(shù)白皮書
  • 6、回復“TXSB”免費領取《通信設備安裝工程施工工藝圖解
  • 7、回復“YDSL”免費領取《中國移動算力并網(wǎng)白皮書
  • 8、回復“5GX3”免費領取《R1623501-g605G的系統(tǒng)架構(gòu)1
  • 本周熱點本月熱點

     

      最熱通信招聘

      最新招聘信息