嵌入式WEB服務(wù)器中TCP/IP協(xié)議棧的設(shè)計(jì)與實(shí)現(xiàn)
3.2 IP協(xié)議實(shí)現(xiàn)
IP協(xié)議主要功能是用于主機(jī)之間發(fā)送數(shù)據(jù)報(bào)的傳輸,實(shí)現(xiàn)比較復(fù)雜,但對(duì)于Web服務(wù)器來說,只需完成IP協(xié)議兩項(xiàng)最基本的功能:第一,處理接收到的IP數(shù)據(jù)報(bào),向上層網(wǎng)絡(luò)提交。第二,負(fù)責(zé)對(duì)TCP報(bào)文、ICMP報(bào)文進(jìn)行封裝,交給數(shù)據(jù)鏈路層進(jìn)行裝幀。
當(dāng)Web服務(wù)器收到發(fā)給自己的數(shù)據(jù)幀后,需要對(duì)以太網(wǎng)首部中的幀類型字段進(jìn)行判斷,如果該字段為0x0800,說明后面的數(shù)據(jù)是IP數(shù)據(jù)報(bào),將此數(shù)據(jù)提交IP層處理。IP協(xié)議判斷此數(shù)據(jù)報(bào)的IP頭部中目的IP地址字段與本地IP地址是否一致,若不一致,則丟棄該數(shù)據(jù)報(bào);若一致,進(jìn)行IP頭部校驗(yàn)和檢查,當(dāng)證明數(shù)據(jù)在傳輸中沒有出現(xiàn)錯(cuò)誤時(shí),去掉IP頭部,將IP數(shù)據(jù)提交上層處理,即根據(jù)IP首部中的協(xié)議字段決定交給ICMP 協(xié)議還是TCP協(xié)議處理。在程序運(yùn)行時(shí),當(dāng)所接收的數(shù)據(jù)被判定為IP數(shù)據(jù)報(bào)后,IP處理程序?qū)?yán)格按照以上的過程接收處理數(shù)據(jù)并進(jìn)行處理。
IP協(xié)議還要查詢是否有上層數(shù)據(jù)要發(fā)送,如果有數(shù)據(jù)發(fā)送,則將上層數(shù)據(jù)進(jìn)行IP封裝,交給數(shù)據(jù)鏈路層裝幀發(fā)送。
3.3 ICMP協(xié)議實(shí)現(xiàn)
ICMP提供了一種讓互聯(lián)網(wǎng)中的路由報(bào)告錯(cuò)誤或提供有關(guān)意外情況信息的報(bào)文機(jī)制。它不是獨(dú)立的,是IP的一部分,在每個(gè)IP實(shí)現(xiàn)中必須有它。雖然它提供的信息十分豐富,但在嵌入式Web服務(wù)器應(yīng)用中,只要實(shí)現(xiàn)回送請(qǐng)求(echo request)和回送應(yīng)答(echo reply)就足夠了。
3.4 TCP協(xié)議實(shí)現(xiàn)
TCP是嵌入式Web服務(wù)器的核心。在設(shè)計(jì)嵌入式Web服務(wù)器時(shí),系統(tǒng)應(yīng)用層只需支持HTTP協(xié)議。嵌入式系統(tǒng)把要傳送的數(shù)據(jù),參數(shù)等存入網(wǎng)頁的相關(guān)位置。對(duì)于任何TCP連接,每次只需支持HTTP協(xié)議發(fā)送網(wǎng)頁服務(wù)。在單片機(jī)這樣的系統(tǒng)中,資源十分有限,因此要精簡(jiǎn)TCP 協(xié)議,簡(jiǎn)化的原則有兩個(gè):第一,不能改變其面向連接的特性;第二,簡(jiǎn)化必須能配合其所采用的應(yīng)用層協(xié)議。
作為嵌入式Web服務(wù)器,TCP連接時(shí)只需處于被動(dòng)服務(wù)的狀態(tài),所以將標(biāo)準(zhǔn)的TCP有限狀態(tài)機(jī)的主動(dòng)創(chuàng)建連接的SYN-SENT狀態(tài),主動(dòng)關(guān)閉連接的FIN-WAIT1,FIN-WAIT2,
CLOSING,TIME-WAIT狀態(tài)都省去,在設(shè)計(jì)中,還可以舍棄CLOSED狀態(tài),讓它開始就處于LISTEN狀態(tài)來監(jiān)聽客戶端的連接請(qǐng)求。這樣,TCP的三次握手機(jī)制中,建立連接的過程時(shí),嵌入式系統(tǒng)作為監(jiān)聽狀態(tài)的服務(wù)器,始終為被動(dòng)方,相當(dāng)于被動(dòng)打開后的LISTEN狀態(tài),等待對(duì)方發(fā)起連接。當(dāng)它接收到SYN數(shù)據(jù)片,它發(fā)出SYN+ACK數(shù)據(jù)片并確認(rèn)它己經(jīng)收到對(duì)方的SYN,此時(shí)變?yōu)镾YN_RECEIVED狀態(tài)。再接收到對(duì)方返回的一個(gè)僅含ACK的空數(shù)據(jù)片,則三次握手完成,進(jìn)入ESTABLISHED狀態(tài),之后可以進(jìn)行TCP數(shù)據(jù)通訊。這樣,既節(jié)省了系統(tǒng)開銷,同時(shí)也保證了所有的數(shù)據(jù)段都能安全正確地到達(dá)目的端。
4 結(jié)語
本文的創(chuàng)新之處在于對(duì)應(yīng)用于嵌入式Web服務(wù)器的TCP/IP協(xié)議棧進(jìn)行了精簡(jiǎn),既兼顧了TCP/IP協(xié)議的主要功能的實(shí)現(xiàn),又照顧到嵌入式系統(tǒng)本身的弱點(diǎn),利用嵌入式TCP/IP協(xié)議棧能擴(kuò)展許多非智能設(shè)備的網(wǎng)絡(luò)功能,使之方便接入Internet,具有很高的實(shí)用價(jià)值。
參考文獻(xiàn):
[1] Jeremy Bentham.嵌入式系統(tǒng)Web服務(wù)器:TCP/IP Lean.機(jī)械工業(yè)出版社.2003.5
[2] 李素俠,段友祥,嵌入式TCP/IP協(xié)議的分析與研究.微計(jì)算機(jī)信息.2005,7-2
[3] 符意德.嵌入式系統(tǒng)設(shè)計(jì)原理及應(yīng)用.清華大學(xué)出版社.2004.11
[4] 王海燕.嵌入式Web服務(wù)器的研究與實(shí)現(xiàn).武漢大學(xué)研究生論文.2003.5
[5] Douglas e.comer.用TCP/IP進(jìn)行網(wǎng)際互連 第1卷:原理、協(xié)議和體系結(jié)構(gòu).電子工業(yè)出版社.1998.4
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)tcp/ip相關(guān)文章:tcp/ip是什么
評(píng)論