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