周磊
【摘要】本文提出了一種嵌入式協議棧的設計及實現。功能上簡化到能滿足網絡功能單一的嵌入式應用的基本需要,沒有操作系統平臺也能完成基本功能;對于傳統的TCP協議,本文也從TCP狀態機和TCP超時定時兩個方面同時進行了改進設計。本文根據以上提出的的優化策略,分別設計了實現算法及其相關數據結構。
【關鍵詞】嵌入式系統,網絡協議,TCP/IP,狀態機
1.研究背景及意義
隨著經濟全球化的不斷發展以及信息社會對數字化要求的不斷提高,國務院確定三網融合政策啟動,互聯互通的需求使嵌入式應用和其它計算機系統進行信息交互的需求也日益迫切。
要實現嵌入式系統的網絡功能,肯定需要在嵌入式軟件中加入相關的通訊協議棧組件。但是,這一方案的實現在嵌入式系統中存在著技術難點,其原因有:①需要加入的TCP/IP協議棧軟件是一個比較復雜的軟件系統,對于系統資源的消耗較大;②PC系統的TCP/IP協議棧在實時性能和精簡程度等方面通常也不適應于嵌入式系統應用的實際要求。這兩個問題的解決就需要針對特定應用實現一個簡潔﹑高效的協議棧。
2.嵌入式系統協議棧中TCP/IP的設計和實現
嵌入式系統的網絡協議棧研究是利用現有的TCP/IP協議棧進行系統的分析和研究,把相關子協議進行優化和簡化,最終實現了一種全新的嵌入式TCP/IP協議棧MinIP。這個協議棧的設計目的是為瘦客戶端嵌入式網絡應用提供所需要的協議棧組件,在此對TCP/IP協議的設計過程進行論述。
2.1 TCP協議設計
2.1.1 取消滑動窗口
TCP在進行流量控制時,通常采用的是窗口機制來實現的,在MinIP的TCP設計里,拋棄窗口機制,沒有對流量進行控制。考慮到MinIP主要運用在局域網絡里,網絡流量通常并不是很高,所以可以暫時不考慮其對流量與網絡擁塞進行的控制,在實現過程中可對其進一步的精簡。
2.1.2 簡化處理的TCP狀態機
簡化后的有限狀態機的流程是:前端采集數據填充發送緩沖后,會通過送含有標志字段SYN的數據包至目的主機,主動要求建立TCP連接,等待目的主機的SYN回復與ACK信息,當收到該數據包后然后發送ACK向目的主機進行確認,最后,MinIP和目的主機的“三次握手”也就完成了,而后雙方開始相互交換實際數據。當完成數據發送的時候,MinIP的TCP發送含有標志字段FIN的信息至目的主機并要求關閉TCP,同時從ESTABLISHED狀態變化為FIN_WAIT_1狀態,而后等待目的主機反饋的信息ACK,在收到ACK數據包后,FIN_WAIT_1狀態變化為FIN_WAIT_2狀態,MinIP繼續等待由目的主機發出的帶FIN標志字段的數據包,在收到數據包后,進入TIME_WAIT狀態,為了能夠使最后發給目的主機的ACK數據包能夠成功的到達,MinIP在發送完ACK后則會繼續處于TIME_WAIT狀態,繼續等待2MSL。最后,一個完整的TCP通訊過程也就結束了。
2.1.3 改進的TCP定時機制
嵌入式設備的另一個特點就是需要考慮設備的功耗,多數便攜式嵌入式設備一般使用電池來供電,這是和計算機平臺不同的特點,所以節能就必須加以考慮。
TCP協議的連接及通信過程在任何的網絡拓樸環境下,由于設計時的考慮,TCP都會存在一定的超時重傳機制,而有些重傳實際上是沒有必要的,只是TCP為保證數據的可靠性及完整性而設計的,因此,可以考慮針對傳統的TCP重傳機制進行適當的優化,使重傳時產生的時間延遲盡量減少,這樣就可以減少無用數據的重傳,進而節省了功耗。
把設備閑置時的系統能耗這里設為:Pi,設備處于TCP環境下通訊狀態時,該設備數據發送產生的能耗和所需時間分別為:Plx、Tlx,接收數據時所需能耗和時間分別為:Pmx、Tmx,那么整個設備在T時間內的能耗El可以按下式計算:
El=Pi×(Tl-Tlx-Tlx)+Plx×Tlx+Pmx×Tmx
=Pi×Ti+Elx+Emx
=Pi×Ti+Ea
在上式中,Pi為設備閑置時的待機能耗,Ti為待機時間,Ea為通訊過程中的總能耗。從另外一個角度看,設備進行通訊時,發送數據或接收數據產生的能耗也可以等價為設備空閑時的能耗加上發送時的附加功耗Pt或接收數據時產生的功耗Pm,故有下式:
Plx=Pt+Pi
Pmx=Pm+Pi
所以經過前式和上式的結合,可以推導出:El=Pi×Tl+Ed。可得:
Pi×Tl+Ea=Pi×Ti+Ed.
而一般嵌入式(如:S3C44b0X)是含有節能處理模式的,所以,空閑情況下可以認為Pi< 經過推導,從得出的式子可以看出數據收發過程中設備所需的的能耗決定了總能耗高低,所以對數據包超時重發機制的改進,是可以減小發送數據時設備產生的能耗,從而可以從一定角度實現對設備的有效節能。 2.2 IP協議的設計 考慮到送時數據包大小已經約定,不會出現數據包過長的情況,MinIP中的IP協議刪減了數據包的分解和合并相關操作,在針對嵌入式應用做了適當精簡,但是對復雜的路由機制并沒有實現,主要實現2類主要功能:(1)驗證收到的數據包的頭是否有錯誤,如無錯誤就進行解析該數據包,以確定該數據包是哪種層協議接收。(2)在發送的數據頭封裝相應的IP信息。 從網絡設備發送端進入到數據緩沖區后,會先經過一個包類型判斷,主要是判斷出數據是IP數據還是arp數據包。如果是IP數據包,會調用IpRcv()來處理,然后對該數據進行校驗,根據IP數據包的協議字段判斷包中保存的是哪種類型的數據。 3.展望 本文雖然實現一個具備了基本功能并且結構完整的嵌入式協議棧MinIP,但離成熟的協議棧組件還有很大的一段距離,存在了一些問題,需要繼續的研究與完善。 (1)安全性問題:MinIP基本沒有過多的考慮到安全這一系列的問題,僅對數據包的格式做了一些基本校驗,需要在MinIP中增加一些切實可行的網絡安全機制,如在傳輸控制協議的基礎上來實現安全套接字協議安全套接等進行彌補。 (2)網絡傳輸效率的問題:“固定雙緩沖”機制是MinIP的特點,但是同時也會導致MinIP在進行數據發送過程中顯得過于慢。 (3)功能的完整性:MinIP只時包括一個連網應用的基本子協議,在對于要求復雜的網絡應用中沒有考慮。 參考文獻: [1]MartinD.Semantic markup for web services[EB/OL].http:www.w3.orSubmission,2009. [2]ChristianBenvenuti.UnderstandingLinuxNetworkInternals[M].O'Reilly,2005. [3]Sergio Scaglia著,潘琢金,徐蕾等譯.嵌入式Intemet TCP/IP基礎、實現及應用[M].北京:北京航空航天大學出版社,2008. [4]Alan B.Johnston .SIP Understanding:The.Session.Initiation.Protocol-2nd[M].ArtechHouse ,2004.