日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]1引言隨著嵌入式系統(tǒng)與網(wǎng)絡(luò)的日益結(jié)合,在嵌入式系統(tǒng)中引入TCP/IP協(xié)議棧,以支持嵌入式設(shè)備接入網(wǎng)絡(luò),成為嵌入式領(lǐng)域重要的研究方向。并且隨著 Internet技術(shù)的迅猛發(fā)展和規(guī)模的不斷擴大,現(xiàn)行的Internet協(xié)議IPv4在地

1引言

隨著嵌入式系統(tǒng)與網(wǎng)絡(luò)的日益結(jié)合,在嵌入式系統(tǒng)中引入TCP/IP協(xié)議棧,以支持嵌入式設(shè)備接入網(wǎng)絡(luò),成為嵌入式領(lǐng)域重要的研究方向。并且隨著 Internet技術(shù)的迅猛發(fā)展和規(guī)模的不斷擴大,現(xiàn)行的Internet協(xié)議IPv4在地址空間、端到端的IP連接、服務質(zhì)量和網(wǎng)絡(luò)安全等方面暴露出了不足,極大地限制了IP網(wǎng)絡(luò)的進一步發(fā)展。而IPv6所提供的巨大地址空間和網(wǎng)絡(luò)安全等因素已經(jīng)使其成為下一代因特網(wǎng)IP協(xié)議,為了能夠支持IPv6的應用,并且考慮到從IPv4到IPv6仍然需要一個過渡期,本文實現(xiàn)了一種基于實時操作系統(tǒng)的IPv4/IPv6雙協(xié)議棧結(jié)構(gòu)。

2協(xié)議棧的設(shè)計要點

2.1平臺無關(guān)性

本文所設(shè)計的TCP/IP雙協(xié)議棧,要求不能局限于特定的硬件環(huán)境和軟件系統(tǒng)。因此,本協(xié)議棧的實現(xiàn)采用將所有的TCP/IP協(xié)議都駐留在一個進程當中,協(xié)議棧模塊與操作系統(tǒng)內(nèi)核分開。通過定義一個操作系統(tǒng)模擬層實現(xiàn)平臺無關(guān)性。操作系統(tǒng)模擬層屏蔽硬件上的差異和獲取操作系統(tǒng)提供統(tǒng)一的接口,如時鐘、過程同步以及信息傳遞機制等。對于特定的嵌入式操作系統(tǒng),直接對操作系統(tǒng)模擬層相應部分進行修改,以符合具體的要求。操作系統(tǒng)模擬層主要包括下面兩個部分:

⑴與處理器和編譯器有關(guān)

對不同微處理器的BYTE_ORDER存儲系統(tǒng)定義;對不同編譯器的數(shù)據(jù)類型長度的定義;與CPU或編譯器相關(guān)的內(nèi)容的定義。

⑵與操作系統(tǒng)相關(guān)

協(xié)議棧進程與應用程序進程之間的同步與通訊,需要對信號量sys_sem_t、消息隊列sys_mbox_t和時鐘函數(shù)進行定義和操作。

2.2協(xié)議棧的裁減

標準的TCP/IP協(xié)議棧功能復雜,代碼量大,且需大量的存儲器資源。為了滿足嵌入式應用,必須對RFC定義的協(xié)議棧進行裁減[1]。本協(xié)議棧的實現(xiàn)作了如下裁減:

⑴IP模塊:不支持數(shù)據(jù)分片,不支持數(shù)據(jù)包轉(zhuǎn)發(fā),不支持IPv6移動功能,不支持部分IPv6的擴展報頭。

⑵ICMPv6模塊:支持信息報文中的請求和應答報文,支持錯誤報文中的目的不可達和超時報文。

⑶鄰居發(fā)現(xiàn)模塊:支持地址解析、重復性探測,省略了路由功能。

⑷TCP模塊:支持多個連接,簡化滑動窗口,實現(xiàn)快速重傳、慢啟動與擁塞避免算法的TCP可靠性機制;約減掉半關(guān)閉,緊急指針,大部分TCP選項等。

協(xié)議棧的層次結(jié)構(gòu)如圖1所示。采用獨立于網(wǎng)絡(luò)層的方式,IPv4協(xié)議和IPv6協(xié)議分開實現(xiàn),條理清楚,易于裁減,同時不會增加太多代碼空間。

上層應用(HTTP)
TCP
 ICMPv4ICMPv6
ARPIPv4IPv6

網(wǎng)絡(luò)驅(qū)動

 

3協(xié)議棧的實現(xiàn)

3.1內(nèi)存管理

內(nèi)存管理主要是針對協(xié)議棧內(nèi)部緩沖區(qū)的管理。為了勝任任意大小報文的處理,并且能夠達到比較高的處理效率,在這里定義了兩種緩沖區(qū)實現(xiàn)機制:固定長度緩沖區(qū)(pbuf_pool)和變長度緩沖區(qū)(pbuf_ram)。pbuf_pool主要適合于網(wǎng)絡(luò)設(shè)備驅(qū)動,存放從網(wǎng)卡接收的數(shù)據(jù)。 pbuf_ram根據(jù)數(shù)據(jù)的大小動態(tài)的分配緩沖區(qū),如協(xié)議的報頭空間。

在這里對存儲空間的申請做了一定改進。由于發(fā)送數(shù)據(jù)時很難確定各層協(xié)議頭部需要多大的內(nèi)存空間,特別是IPv6報文可以包含若干個擴展頭,所以只申請基本頭部的內(nèi)存空間,在使用中動態(tài)調(diào)整的可能性就會很大,使得系統(tǒng)的效率降低。在這里提出了一種優(yōu)化方法,根據(jù)局部性原理,通常情況下一個連接在局部時間范圍內(nèi)需要網(wǎng)絡(luò)層提供相同功能的概率非常大,所以在該連接的TCP_PCB控制塊中增加一個變量num,用于記錄上次通信時IPv6協(xié)議頭所使用的字節(jié)數(shù),并且此變量可以被網(wǎng)絡(luò)層的函數(shù)進行修改。當傳輸層下次申請pbuf時,就參考這個值。如果所需的存儲空間比此值大,就需重新申請能滿足要求的存儲空間,同時修改num的值,并作為下一次申請的參考。

3.2網(wǎng)絡(luò)接口的實現(xiàn)

網(wǎng)絡(luò)接口層在設(shè)計上主要考慮下面幾個目標:⑴向協(xié)議層提供一個統(tǒng)一的網(wǎng)絡(luò)通信接口,能夠?qū)⑸蠈訁f(xié)議模塊與具體的網(wǎng)絡(luò)接口硬件隔離開來,以利于向不同操作系統(tǒng)的移植;⑵支持一個網(wǎng)絡(luò)接口配置多個IP地址的功能,因為IPv6一個接口的IP地址包括本地鏈路、本地站點和全局三類地址;⑶支持多播報文的收發(fā),提供動態(tài)的多播IP與多播MAC地址的映射服務;⑷提供較好的通信性能等。

針對上述目標,設(shè)計了如下的網(wǎng)絡(luò)接口控制結(jié)構(gòu):

struct netif {
struct netif  *next;            /*指向下一個netif結(jié)構(gòu)的指針*/
netif_ipaddr  *iplist;          /*指向接口的ip地址鏈的首指針*/
char  name[2];               /*接口名稱*/
err_t (* input)(struct pbuf *p, struct netif *);                  /*接口輸入函數(shù)指針*/
err_t (* output)(struct netif *, struct pbuf *p,netif_addr *);       /*接口輸出函數(shù)指針*/
err_t (* linkoutput)(struct netif *, struct pbuf *p);              /*鏈路層輸出函數(shù)指針*/
void  *state;                 /*指向接口的狀態(tài)信息*/
mac_addr  netifmacaddr;       /*接口的MAC地址*/
netif_multi *multilist;          /*本接口的MAC多播地址鏈首指針*/
┊               /*省略了部分信息 */
};

網(wǎng)絡(luò)接口層是協(xié)議棧與下層網(wǎng)絡(luò)設(shè)備驅(qū)動程序之間的接口,同時支持IPv4報文和IPv6報文,通過判斷幀的類型字段,把接收到的不同類型的報文交給不同的協(xié)議模塊進行處理。

3.3 IPv6模塊

IPv6[2]模塊主要包括兩部分的功能,一是負責從網(wǎng)絡(luò)接口層接收IPv6數(shù)據(jù)包,對數(shù)據(jù)包進行一定的處理后發(fā)送給上層處理模塊(TCP或ICMPv6)。二是從上層接收數(shù)據(jù),進行報文的選路,封裝IPv6報頭后將數(shù)據(jù)報發(fā)送給網(wǎng)絡(luò)接口層。

3.3.1 ICMPv6[3]的簡化分析

⑴ICMPv6信息報文

嵌入式設(shè)備只需作為Ping的接收端,所以不需要發(fā)送回顯請求報文和處理回顯應答報文。為了讓客戶端可以測試網(wǎng)絡(luò)狀態(tài)以及測試使用,必須支持接收請求報文和發(fā)送相應的應答報文。

⑵ICMPv6錯誤報文

由于嵌入式設(shè)備不會作為路由轉(zhuǎn)發(fā)設(shè)備,所以需要實現(xiàn)發(fā)送端口不可達報文,同時要支持超時報文通告對端超時錯誤。在BSD中,IP層沒有發(fā)送參數(shù)問題報文, ICMPv6無需支持處理參數(shù)問題報文。

3.3.2鄰居發(fā)現(xiàn)協(xié)議(NDP)的簡化分析

NDP[4]是IPv6協(xié)議的一個基本組成部分,它用于地址解析、鄰居發(fā)現(xiàn)以及路由器及網(wǎng)絡(luò)參數(shù)發(fā)現(xiàn)。本協(xié)議棧不支持路由功能,所以無需實現(xiàn)發(fā)送路由器通告報文,但必須接受路由器通告報文,以完成路由發(fā)現(xiàn)功能。同時支持鄰居通告和鄰居請求報文的接收和發(fā)送,以實現(xiàn)地址解析和重復探測。

3.4 TCP模塊

在TCP之上實現(xiàn)有限的WEB服務,可以對該協(xié)議的實現(xiàn)機制作相應的簡化及優(yōu)化。

3.4.1 TCP模塊的擴展

TCP對IPv4和IPv6報文的處理過程沒有任何的不同,但是由于IPv4和IPv6地址結(jié)構(gòu)不同,需要對使用IP地址的部分進行擴展。

⑴數(shù)據(jù)結(jié)構(gòu)擴展

PCB是用來記錄每個TCP連接狀態(tài)的,包括本地IP地址和遠程IP地址,擴展時使用union結(jié)構(gòu)添加IPv6地址,同時添加標識位區(qū)別連接。

⑵操作擴展

在TCP處理過程中包括輸入時對IP地址和端口號的匹配,輸出時校驗和的計算和路由的查找。由于對IPv4和IPv6報文調(diào)用相同的處理函數(shù),需要在實現(xiàn)時在這幾個函數(shù)的處理過程中加入對相應PCB中標識位的判斷。

3.4.2 簡化TCP狀態(tài)機

TCP的面向連接和可靠性傳輸?shù)忍匦詻Q定了每一個標準的TCP狀態(tài)機龐大而且復雜,對于嵌入式應用,可以根據(jù)需要進行簡化。

建立連接分為主動打開和被動打開,本協(xié)議棧設(shè)計作為監(jiān)聽狀態(tài)的服務器端,僅實現(xiàn)被動打開。在設(shè)計中去掉了CLOSED狀態(tài),讓它一開始就處于LISTEN狀態(tài),等待對方發(fā)起連接。

斷開連接分為主動斷開和被動斷開,從安全性的角度考慮,本設(shè)計僅實現(xiàn)主動斷開連接。當服務器發(fā)送完數(shù)據(jù)時,向客戶機發(fā)送關(guān)閉連接請求。

通過以上分析,根據(jù)特定的應用不失一般性的裁減掉復雜和冗余的機制,除去標準狀態(tài)機中的客戶端部分,簡化連接的建立和關(guān)閉過程,就得到如圖2所示的簡化的TCP狀態(tài)機模型。

                    

 
3.4.3 簡化的窗口機制

標準的TCP協(xié)議使用慢啟動的滑動窗口機制[5],它允許發(fā)送方在等待一個確認之前發(fā)送多個窗口。其確認是一種批量的確認,處理器要對多個數(shù)據(jù)報連續(xù)傳輸進行維護和處理,困難較大。

而滑動窗口的一個極限情況,是只使用單個窗口,這就變成了一種簡單確認的處理方法。只是對于單個數(shù)據(jù)報的發(fā)送和確認,雖然節(jié)約了系統(tǒng)的資源,也使維護更加方便,但是卻降低了效率。

系統(tǒng)采用了一個折中的辦法,適當調(diào)整窗口的大小,限制連續(xù)發(fā)送報文段的個數(shù)來實現(xiàn)了一個簡化的窗口機制,如圖3所示。在這里,設(shè)置窗口大小(snd_wnd)為4個最大報文段長度(MSS),可以適當提高數(shù)據(jù)傳輸效率。

4 協(xié)議棧的移植和測試

在完成雙協(xié)議棧的設(shè)計調(diào)試后,將此協(xié)議棧移植到基于ARM7TDMI核的AT91M40800開發(fā)板上,使用其中內(nèi)嵌的10Mbps以太網(wǎng)控制器 RTL8019AS作為網(wǎng)絡(luò)接口。在該平臺上實現(xiàn)了一個簡單的Web Server。通過構(gòu)建提供IPv4地址和IPv6地址訪問的網(wǎng)絡(luò)拓撲結(jié)構(gòu)進行測試,該雙協(xié)議棧運行穩(wěn)定、正常。

同時,在相同環(huán)境下將此協(xié)議棧與開源的協(xié)議棧LwIP作了吞吐率性能方面的比較,如圖4所示。可知,本協(xié)議棧有較好的吞吐率,在連接數(shù)達到3條以后,平均吞吐率達到了460kB/s。

 

5 結(jié)語

本文主要介紹了一種嵌入式雙協(xié)議棧的實現(xiàn),實踐證明它是一個符合TCP/IP協(xié)議規(guī)范的,高性能,低開銷,可移植的IPv4/IPv6雙協(xié)議棧。本協(xié)議棧僅實現(xiàn)了基本的IPv4和IPv6通信功能,還有需多需要改進和增強的地方,擴展IPv6的移動功能是此協(xié)議棧下一步的研究重點。

本文作者創(chuàng)新點:嵌入式協(xié)議棧的實現(xiàn)獨立于操作系統(tǒng)內(nèi)核和硬件平臺。設(shè)計了具有較高處理效率的緩沖區(qū)管理機制,對IPv6功能模塊進行了裁減,對TCP模塊中的運行狀態(tài)機和滑動窗口機制進行了簡化。

參考文獻:
[1] OKABEN. Mininum Requirement of IPv6 for Low Cost Network Appliance[EB/OL]. INTERNET- DRAFT,2001-2002.
[2]張杰.一種Web服務中IPv4/IPv6兼容的實現(xiàn)方案[J].微計算機信息,2006,10-3:31-72.
[3] CONTA A, DEERING S.Internet Control Message Protocol(ICMPv6),RFC 2463[S].Internet Engineering Task Force,1998.
[4] NARTENT. Neighbor Discovery for IP Version 6 (IPv6), RFC2461[S].1998.
[5] STEVENSWR.TCP/IP詳解(卷1:協(xié)議)[M].范建華,胥光輝,張濤,等譯.北京:機械工業(yè)出版社,1999.209-224.
 

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

德國康佳特亮相上海工博會,展示多款應用就緒的嵌入式解決方案平臺

關(guān)鍵字: 嵌入式 傳感器 處理器

雙方攜手為客戶打造以存儲為核心的模塊化基礎(chǔ)架構(gòu),支持先進的多裸片架構(gòu)設(shè)計

關(guān)鍵字: 非易失性存儲 半導體 嵌入式

本屆年會將在上海(11月13-14日)、北京(11月19-20日)和深圳(11月27-28日)舉行,面向嵌入式設(shè)計工程師推出25門技術(shù)課程

關(guān)鍵字: 嵌入式 MCU 模擬

上海2025年9月5日 /美通社/ -- 由紐倫堡會展(上海)有限公司舉辦的上海國際嵌入式會議將于 2025 年 10 月 16-17 日在上海世博展覽館舉辦。 此次會議將由三個版塊組成:嵌入式技術(shù)會議、汽...

關(guān)鍵字: 嵌入式 CE CHINA EMBEDDED

從外部看,電子系統(tǒng)仿佛一個統(tǒng)一的學科或設(shè)備,各組成部分協(xié)同工作,渾然一體。然而揭開表象,其內(nèi)在卻是另一番景象:一個碎片化、多層次的世界——其中每一層都獨立且復雜,衍生出各自特有的工具、專家、工作流程,甚至哲學體系。

關(guān)鍵字: 嵌入式 電子系統(tǒng) 半導體

8位單片機在嵌入式設(shè)計領(lǐng)域已經(jīng)成為半個多世紀以來的主流選擇。盡管嵌入式系統(tǒng)市場日益復雜,8位單片機依然不斷發(fā)展,積極應對新的挑戰(zhàn)和系統(tǒng)需求。如今,Microchip推出的8位PIC?和AVR?單片機系列,配備了先進的獨立...

關(guān)鍵字: 單片機 嵌入式 CPU

深圳2025年8月28日 /美通社/ -- 8月26日,2025 ELEXCON深圳國際電子展盛大啟幕。本屆大會以"All for AI"為主題,深圳市德...

關(guān)鍵字: AI 工業(yè)級 SSD 嵌入式

深圳2025年8月26日 /美通社/ -- 8月26日,由博聞創(chuàng)意會展主辦的 第22屆深圳國際電子展暨嵌入式展(elexcon2025)在深圳(福田)會展中心隆重開幕。 作為中國電子與嵌入式技術(shù)領(lǐng)域的專業(yè)大展,本屆展會...

關(guān)鍵字: 嵌入式 電子 高通 AI

模塊化設(shè)計作為一種將系統(tǒng)拆分為獨立、可復用組件的方法,能夠在低代碼平臺中實現(xiàn)功能的靈活組合,并最大限度地提升系統(tǒng)性能。本文將探討如何通過模塊化設(shè)計,使得低代碼平臺既能快速適應變化,又能保持高效穩(wěn)定的運行。

關(guān)鍵字: 模塊化設(shè)計 嵌入式

CPU親和度通過限制進程或線程可以運行的CPU核心集合,使得它們只能在指定的CPU核心上執(zhí)行。這可以減少CPU緩存的失效次數(shù),提高緩存命中率,從而提升系統(tǒng)性能。

關(guān)鍵字: Linux 嵌入式
關(guān)閉