<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 一種新的嵌入式TCP/IP協(xié)議棧的研究與實(shí)現

一種新的嵌入式TCP/IP協(xié)議棧的研究與實(shí)現

——
作者:龍鵬飛 宮蓉蓉 時(shí)間:2007-06-15 來(lái)源:微計算機應用 收藏
1 引言

嵌入式Internet是近幾年隨著(zhù)嵌入式系統的廣泛應用和計算機網(wǎng)絡(luò )技術(shù)的發(fā)展而興起的一項新興概念和技術(shù)。單片機或微控制器(MCU,Micro ControllerUnit)被廣泛應用在家庭和工業(yè)的各個(gè)領(lǐng)域,通稱(chēng)嵌入式系統。嵌入式系統具有以應用為中心、以計算機技術(shù)為基礎、軟件硬件可裁剪等特點(diǎn),贏(yíng)得了巨大的市場(chǎng),在應用數量上遠遠超過(guò)了各種通用計算機。隨著(zhù)Internet/Intranet的發(fā)展,各種家用電器,從空調到微波爐,都產(chǎn)生了連入互聯(lián)網(wǎng)的要求。

如何通過(guò)Internet共享嵌入式設備的信息,實(shí)現設備的遠程訪(fǎng)問(wèn)、控制和管理,對接入到網(wǎng)絡(luò )上各個(gè)節點(diǎn)的設備實(shí)時(shí)監控,這就是設備接入互聯(lián)網(wǎng)需要解決的問(wèn)題。TCP/IP協(xié)議是標準的網(wǎng)絡(luò )協(xié)議,如果能把TCP/IP協(xié)議嵌入到設備的MCU中,就可以通過(guò)它在設備和Internet之間建立通信鏈路,這樣就解決了設備與網(wǎng)絡(luò )互聯(lián)的關(guān)鍵技術(shù)。

2 Simplified TCP/IP協(xié)議棧的特點(diǎn)

和嵌入式系統面向特定的應用一樣,分析嵌入式TCP/IP協(xié)議棧的特點(diǎn)和對傳統的TCP/IP協(xié)議棧進(jìn)行簡(jiǎn)化也要針對特定的系統環(huán)境和應用 背景。離開(kāi)了特定的系統環(huán)境和應用背景來(lái)討論嵌入式TCP/IP協(xié)議棧的特點(diǎn)和對TCP/IP協(xié)議棧進(jìn)行簡(jiǎn)化是沒(méi)有意義的。這里所討論的嵌入式TCP/IP協(xié)議棧是針對那些低檔的8位/16位嵌入式系統能支持嵌入式Internet直連體系結構而提出的。

嵌入式系統有限的處理能力以及存儲資源相對缺乏,因此在嵌入式Internet環(huán)境里使用標準TCP/IP協(xié)議棧是不合適的。把TCP/IP協(xié)議棧從普通的PC機移植到MCU,內存和內存管理成了瓶頸。為了既實(shí)現相應的網(wǎng)絡(luò )功能又節省系統資源,需要對協(xié)議棧進(jìn)行有針對的模塊化裁減。針對家電系統中的8位/16位MCU結構設計了一個(gè)TCP/IP協(xié)議簇的子集,稱(chēng)之為Simplified TCP/IP協(xié)議棧。其中包括IP、UDP、ARP和ICMP等協(xié)議的全部或部分功能,對協(xié)議進(jìn)行了有選擇的實(shí)現,盡最大可能保持協(xié)議功能和機制上的完整。

Simplified TCP/IP協(xié)議棧按照網(wǎng)絡(luò )體系分層思想設計,如圖1所示。其中每一層都被設計成一個(gè)功能相對獨立的模塊,負責處理各自的數據,通過(guò)函數調用把控制權交給上層或下層的模塊。

Simplified TCP/IP協(xié)議棧

低檔嵌入式系統中一般沒(méi)有實(shí)時(shí)多任務(wù)操作系統支持,所以Simplified TCP/IP協(xié)議棧直接面對硬件。MCU中的程序結構一般是順序執行和硬件中斷相配合的方式。嵌入式處理器的時(shí)鐘頻率低,地址、數據總線(xiàn)窄,所以一個(gè)IP包的處理要花很多的時(shí)間。如果采用中斷處理方式,勢必影響其他中斷和任務(wù)的執行。當系統中有實(shí)時(shí)數據采集、串口通信中斷、鍵盤(pán)中斷等實(shí)時(shí)任務(wù)時(shí),則會(huì )造成沖突。設計時(shí)需要合理劃分中斷處理程序,將無(wú)實(shí)時(shí)要求和費時(shí)的SimplifiedTCP/IP協(xié)議棧處理放在主程序順序循環(huán)中。對網(wǎng)絡(luò )接口控制芯片采用查詢(xún)式,即在其他中斷任務(wù)的執行間隙處理Simplified TCP/IP協(xié)議棧,以犧牲響應速度換取系統可靠性,如圖2所示。

嵌入式系統程序控制結構

3 TCP/IP協(xié)議棧的裁減

普通操作系統可支持完整的TCP/IP協(xié)議族,但嵌入式系統中大多很難做到,也不需做到。嵌入式系統中實(shí)現的協(xié)議要根據各個(gè)系統的特點(diǎn)及功能來(lái)進(jìn)行設計。TCP/IP協(xié)議族中,只實(shí)現與實(shí)際需要有關(guān)的部分,而不使用的協(xié)議則一概不支持。Simplified TCP/IP協(xié)議棧中支持的協(xié)議。

3. 1 地址轉換協(xié)議—ARP協(xié)議

ARP協(xié)議是某些網(wǎng)絡(luò )接口(如以太網(wǎng)和令牌環(huán)網(wǎng))使用的特殊協(xié)議,ARP的地址解析功能是為IP地址和數據鏈路層使用的硬件地址提供動(dòng)態(tài)地址映射。通用計算機系統中,ARP高速緩存一般設計成雙向數據鏈的形式,這樣整個(gè)緩存可以方便地動(dòng)態(tài)增減。但是這種非線(xiàn)性存儲的鏈表式緩存結構,在進(jìn)行表項匹配查找時(shí)比較費時(shí),不適用于嵌入式系統。因此ARP的地址緩存采用了線(xiàn)性數組形式的結構。它在內存中是連續線(xiàn)性存儲的,查找速度快。嵌入式應用中節點(diǎn)不是很多,即ARP緩存容量不需要很大,因此將ARP高速緩存設計成固定大小。被動(dòng)的嵌入式服務(wù)器主要是接收來(lái)自客戶(hù)的服務(wù)請求,為客戶(hù)提供服務(wù),即嵌入式服務(wù)器不會(huì )主動(dòng)向某一主機發(fā)數據幀。既然如此始終處于被動(dòng)狀態(tài)的服務(wù)器完全不需要向任何主機發(fā)送ARP請求,設備只要能處理ARP請求并返回ARP應答即可。鑒于這種情況,ARP協(xié)議中選擇對ARP應答部分進(jìn)行實(shí)現。

3. 2 網(wǎng)際協(xié)議—IP協(xié)議

IP協(xié)議是TCP/IP協(xié)議簇中最為核心的協(xié)議,提供不可靠的無(wú)連接的數據報傳送服務(wù)。所有的TCP、UDP和ICMP數據都以IP數據報的格式傳輸。IP協(xié)議非常重要,實(shí)現比較復雜。從實(shí)現Simplified TCP/IP協(xié)議棧的要求出發(fā),約簡(jiǎn)IP協(xié)議需要把握兩個(gè)原則:①對接收到的IP數據報進(jìn)行處理,向上層協(xié)議進(jìn)行提交;②負責對UDP報文進(jìn)行封裝,交給數據鏈路層進(jìn)行裝幀。當設備收到發(fā)給自己的數據報時(shí),首先判斷是否是自己的數據報,若不一致則丟棄該數據報;否則進(jìn)行IP校驗和的驗證,當數據報無(wú)誤后,去掉IP頭部,將IP數據提交上層處理。

一般情況下,數據包要經(jīng)過(guò)不同的物理網(wǎng)絡(luò ),則IP層必須支持數據包的分片和重裝。但IP的分片和重組所需的開(kāi)銷(xiāo)比較大,而現有的網(wǎng)絡(luò )一般都支持以太網(wǎng),并且在此次應用的8/16位嵌入式系統中,傳輸的數據都是一些數據量比較小的狀態(tài)信息或者控制信息。因此數據報都不會(huì )超過(guò)協(xié)議所限制的1500字節。如果極少數數據實(shí)在比較大,可以在程序中進(jìn)行處理,分批次進(jìn)行傳輸。因此可以裁減掉IP的分片和重組功能。而IP數據包的路由功能則交給默認網(wǎng)關(guān)執行。

3. 3 網(wǎng)際控制報文協(xié)議———ICMP協(xié)議

ICMP協(xié)議是IP網(wǎng)絡(luò )內為控制、測試、管理功能而設計 的協(xié)議。ICMP的報文類(lèi)型很多,不同類(lèi)型的報文由類(lèi)型和代碼字段共同決定。為了了解設備是否可達, Simplified TCP/IP協(xié)議棧中主要實(shí)現了回顯請求和應答報文的功能。該程序發(fā)送ICMP回顯請求報文給目的主機,并等待ICMP回顯應答。對于處于被動(dòng)狀態(tài)設備而言,不需要主動(dòng)發(fā)送回顯請求,只要能夠識別來(lái)自其他客戶(hù)的回顯請求并發(fā)送回顯應答就可以了。為了能夠使用戶(hù)了解設備是否可達,應當能夠對Ping的回顯請求給予應答。

3. 4 用戶(hù)數據報協(xié)議—UDP協(xié)議

Simplified TCP/IP協(xié)議棧中的傳輸層中,選用UDP作為傳輸層協(xié)議。從理論上看,TCP的可靠性是以許多復雜措施及由此而增加的開(kāi)銷(xiāo)為代價(jià)換來(lái)的。TCP提供面向鏈接的、可靠的服務(wù),而UDP是無(wú)面向鏈接的。由于UDP沒(méi)有可靠性的保證機制,因此能全速地進(jìn)行數據通信(即充分發(fā)揮物理通信設備的速度);又因為UDP沒(méi)有點(diǎn)對點(diǎn)接入的要求,可以實(shí)現“一對多點(diǎn)”,“多對多點(diǎn)”的廣播和多點(diǎn)播發(fā)信息。UDP的不可靠傳輸的缺陷,可以在使用UDP時(shí),在應用層增加提高UDP可靠性的代碼來(lái)彌補。譬如給數據添加順序標記,因而能在應用層發(fā)現數據的丟失和亂序,從而加以更正;采用應答確認機制,確保數據安全到達接收者等。

由于嵌入式系統的CPU速度有限、代碼不能太長(cháng)、傳輸率是關(guān)鍵等特殊要求,一般來(lái)講,在嵌入式設備接口時(shí),快速、簡(jiǎn)單地與嵌入式設備進(jìn)行雙向數據傳輸是首為重要的。所以減少和嵌入式設備之間的往返信息,使網(wǎng)絡(luò )成為一種更為高效的通信媒介將是嵌入式網(wǎng)絡(luò )協(xié)議設計的必由之路。而UDP協(xié)議的開(kāi)銷(xiāo)很小,傳輸率比TCP高出很多,實(shí)時(shí)性更強。所以嵌入式TCP/IP協(xié)議中采用UDP協(xié)議作為運輸層協(xié)議,不失為明智之舉。嵌入式系統中也可能存在對數據傳輸可靠性要求很高的情況。由于UDP協(xié)議沒(méi)有計時(shí)機制、流量控制或擁塞管理機制、應答、緊急數據的加速傳送等功能,因此在應用層協(xié)議中加入相應的措施,如給數據報加上順序標識、定時(shí)等待、采用重傳機制等輔助性的操作來(lái)彌補它的缺陷。從應用的角度看, Simplified TCP/IP協(xié)議棧主要是應用于家用電器上網(wǎng)。對于溫度、煙霧和濕度傳感器等的每秒一次地集中監控來(lái)說(shuō),發(fā)送頻繁,包較小,只需前端設備向網(wǎng)絡(luò )中廣播實(shí)時(shí)狀態(tài)等數據即可,因此選用UDP較為合適。

4 Simplified TCP/IP協(xié)議棧處理流程

Simplified TCP/IP協(xié)議棧接收數據包的過(guò)程就是解析數據包的過(guò)程。首先當一個(gè)數據幀到達時(shí),網(wǎng)絡(luò )接口控制程序將其讀入緩沖區,檢查協(xié)議類(lèi)型字段,如值依次為0x0800,表示數據域內為IP包;值依次為0x0806,表示數據域內為ARP包[6]。由此以確定使用那種協(xié)議模塊來(lái)處理此分組。去掉以太網(wǎng)幀首部的數據包將被分配到IP緩存或者ARP緩存。接著(zhù),由IP協(xié)議處理模塊或ARP協(xié)議處理模塊繼續解析。ARP根據包的類(lèi)型,或者更新ARP地址映射表或者發(fā)送ARP應答。IP協(xié)議處理模塊對數據包解析后,將數據交給UDP協(xié)議處理模塊或ICMP協(xié)議處理模塊。ICMP協(xié)議模塊會(huì )發(fā)回一個(gè)ICMP回顯應答包。Simplified TCP/IP協(xié)議棧發(fā)送數據包的過(guò)程是封裝數據包的過(guò)程,數據經(jīng)過(guò)某層協(xié)議的處理,就會(huì )在數據包首部增加某種

格式的頭部。在IP協(xié)議模塊處理數據包的過(guò)程,它要通過(guò)調用ARP協(xié)議獲得對方主機的物理地址。

Simplified TCP/IP協(xié)議棧處理流程如圖3所示。

Simplified TCP/IP協(xié)議棧處理流程圖

  圖3 Simplified TCP/IP協(xié)議棧處理流程圖

5 總結與展望

為了驗證方案的可行性,實(shí)驗中以簡(jiǎn)單圖像的傳輸為研究對象,檢驗Simplified TCP/IP協(xié)議棧的運行效果。從測試結果可看出,大流量的圖像傳輸系統中發(fā)生數據報的幾率還是比較大的。當然,如果是應用在數據流量不是很大,僅有一些少量數據和簡(jiǎn)單的控制指令或反饋信息的應用系統中,運行的情況會(huì )更好一些。

目前Simplified TCP/IP協(xié)議棧技術(shù)還有一些不完善的地方。比如在數據量大的網(wǎng)絡(luò )中減小數據報的丟失率,更有效的進(jìn)行擁塞控制等,這些都是今后的努力方向。另外,還需要進(jìn)一步優(yōu)化代碼,提高SimplifiedTCP/IP協(xié)議棧的性能。

tcp/ip相關(guān)文章:tcp/ip是什么




關(guān)鍵詞:

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>