當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]嵌入式系統(tǒng)中TCP/IP協(xié)議的精簡(jiǎn)與實(shí)現(xiàn)

摘要: 通過(guò)對(duì)TCP/IP協(xié)議的分析,結(jié)合嵌入式系統(tǒng)的特點(diǎn),挑選出一套精簡(jiǎn)、實(shí)用的TCP/IP協(xié)議子集,并詳細(xì)介紹各協(xié)議層的實(shí)現(xiàn)過(guò)程。為嵌入式網(wǎng)絡(luò)系統(tǒng)的開(kāi)發(fā)提供一個(gè)較為簡(jiǎn)單且可行的思路。
關(guān)鍵詞:嵌入式系統(tǒng),以太網(wǎng),TCP/IP協(xié)議, UDP, ARP

1、引言

    嵌入式網(wǎng)絡(luò)系統(tǒng)就是在嵌入式設(shè)備上實(shí)現(xiàn)了網(wǎng)絡(luò)互聯(lián)功能的系統(tǒng),一般要求嵌入式設(shè)備在軟件上支持TCP/IP協(xié)議棧,實(shí)現(xiàn)有關(guān)的以太網(wǎng)通信協(xié)議。如何實(shí)現(xiàn)TCP/IP協(xié)議是嵌入式網(wǎng)絡(luò)系統(tǒng)的關(guān)鍵技術(shù)之一,在嵌入式系統(tǒng)中應(yīng)用TCP/IP協(xié)議的關(guān)鍵是,如何設(shè)計(jì)出精簡(jiǎn)、高效的TCP/IP協(xié)議子集,以此來(lái)減少對(duì)系統(tǒng)資源的占用。

    目前使用廣泛的TCP/IP協(xié)議棧有LWIP(Light Weight)、uIP、Linux IP等,這些協(xié)議棧具有一定的通用性,包含的協(xié)議內(nèi)容比較全,同時(shí)也比較復(fù)雜。具體在移植到應(yīng)用系統(tǒng)的時(shí)候要考慮的問(wèn)題較多,各個(gè)庫(kù)文件和全局變量相互交叉引用,若要針對(duì)特定系統(tǒng)進(jìn)行精簡(jiǎn),則牽一發(fā)而動(dòng)全身,尤其是存儲(chǔ)器的管理及上層協(xié)議與底層網(wǎng)絡(luò)驅(qū)動(dòng)的接口是兩個(gè)最大的移植難題。

    為了能對(duì)TCP/IP協(xié)議有較深的了解,又利于后期進(jìn)行深入研究,我們?cè)趯?shí)現(xiàn)一具體的Internet網(wǎng)絡(luò)報(bào)警系統(tǒng)時(shí),進(jìn)行自主的嵌入式TCP/IP協(xié)議開(kāi)發(fā)。下文所介紹的TCP/IP協(xié)議系統(tǒng)由于精簡(jiǎn)而利于實(shí)現(xiàn),且無(wú)需進(jìn)行內(nèi)存管理,適合傳送數(shù)據(jù)量不大的嵌入式系統(tǒng)。在實(shí)現(xiàn)時(shí),只要根據(jù)相應(yīng)的數(shù)據(jù)幀格式,在各層完成相應(yīng)的功能即可。非常適合研究學(xué)習(xí)之用,為嵌入式網(wǎng)絡(luò)系統(tǒng)的開(kāi)發(fā)提供一個(gè)較為可行且簡(jiǎn)單的思路。

2、協(xié)議的分析與選擇

    眾所周知,TCP/IP是一個(gè)協(xié)議族,是幾百種網(wǎng)絡(luò)協(xié)議的集合。通用計(jì)算機(jī)系統(tǒng)有足夠的資源支持通信協(xié)議在內(nèi)核實(shí)現(xiàn),但是嵌入式系統(tǒng)則不同,因?yàn)槠銫PU處理能力和系統(tǒng)存儲(chǔ)能力都受到成本限制,充分利用資源、提高系統(tǒng)性價(jià)比是開(kāi)發(fā)嵌入式應(yīng)用的根本特點(diǎn)。所以要對(duì)TCP/IP協(xié)議進(jìn)行精簡(jiǎn)以適應(yīng)嵌入式系統(tǒng)。

    下面我們以實(shí)際的Internet網(wǎng)絡(luò)報(bào)警系統(tǒng)為例,設(shè)計(jì)一個(gè)較為精簡(jiǎn)的TCP/IP協(xié)議子系統(tǒng)。此系統(tǒng)采用32位ARM結(jié)構(gòu)的三星S3C440BX處理器,加SMSC公司的以太網(wǎng)控制芯片LAN91C113,以及另外一些外圍芯片組成。此系統(tǒng)要求經(jīng)Internet傳送一些現(xiàn)場(chǎng)采集的報(bào)警數(shù)據(jù)到遠(yuǎn)程站點(diǎn),要求實(shí)時(shí)性好、傳輸速度快,但每次傳輸?shù)臄?shù)據(jù)量很少,只是簡(jiǎn)單的報(bào)警信息。根據(jù)這些要求,再經(jīng)詳細(xì)分析TCP/IP各協(xié)議層實(shí)現(xiàn)的功能,精簡(jiǎn)出的協(xié)議子集如圖1:

層次

需要實(shí)現(xiàn)的協(xié)議

應(yīng)用層

無(wú)

傳輸層

UDP

網(wǎng)絡(luò)層

IP、ICMP中的Ping響應(yīng)協(xié)議

鏈路層

ARP應(yīng)答協(xié)議

圖1 精簡(jiǎn)的TCP/IP協(xié)議子集

    首先在鏈路層上,由于采用以太網(wǎng)的接入方式,系統(tǒng)必須要實(shí)現(xiàn)IEEE802.3所規(guī)定的CDMA/CD協(xié)議。CDMA/CD協(xié)議不需用戶實(shí)現(xiàn),此協(xié)議只要采用通用的以太網(wǎng)接口芯片就可支持。其次,為了保證系統(tǒng)在以太網(wǎng)中的通信,系統(tǒng)還需實(shí)現(xiàn)ARP應(yīng)答協(xié)議,該協(xié)議用于將IP地址映射成以太網(wǎng)MAC地址。ARP的執(zhí)行依靠維持一張表來(lái)完成IP地址和MAC的地址的映射。

    在網(wǎng)絡(luò)層,由于系統(tǒng)要求能夠在Internet進(jìn)行通信,因此系統(tǒng)要實(shí)現(xiàn)IP協(xié)議。IP層的代碼有兩個(gè)功能:驗(yàn)證到來(lái)的IP報(bào)文報(bào)頭的正確性,并且對(duì)TCP和ICMP報(bào)文實(shí)行分流。因?yàn)椴豢紤]IP的分片和重組,所以 IP層的代碼非常的精簡(jiǎn)。為了能夠測(cè)試系統(tǒng)與網(wǎng)絡(luò)的連接,系統(tǒng)需要實(shí)現(xiàn)ICMP協(xié)議中的Ping應(yīng)答協(xié)議,Ping應(yīng)答協(xié)議主要是檢查網(wǎng)絡(luò)是否連通

    在傳輸層, TCP為兩臺(tái)主機(jī)提供面向連接的、可靠的、無(wú)重復(fù)的雙向數(shù)據(jù)流傳輸服務(wù),TCP協(xié)議設(shè)計(jì)了嚴(yán)格的3次建立連接握手過(guò)程、4次關(guān)閉連接握手過(guò)程,這些過(guò)程的實(shí)現(xiàn)對(duì)系統(tǒng)資源的耗費(fèi)非常大。而UDP的實(shí)現(xiàn)比較簡(jiǎn)單,它在某些嵌入式Internet的應(yīng)用場(chǎng)合可以很好地應(yīng)用??紤]到系統(tǒng)的簡(jiǎn)化及速度的要求,采用了UDP協(xié)議,為了確保UDP數(shù)據(jù)的到達(dá),在應(yīng)用程序中采用了重復(fù)發(fā)送、回復(fù)確認(rèn)的方式來(lái)保證數(shù)據(jù)的正確性。

    由于本嵌入式系統(tǒng)無(wú)HTTP、FTP等應(yīng)用,所以應(yīng)用層中的協(xié)議無(wú)需實(shí)現(xiàn)。

3、協(xié)議的實(shí)現(xiàn)

    本系統(tǒng)由于協(xié)議比較精簡(jiǎn),只保留了必須使用的一些協(xié)議,所以實(shí)現(xiàn)過(guò)程相對(duì)簡(jiǎn)單。實(shí)現(xiàn)過(guò)程中的一個(gè)總目標(biāo)是系統(tǒng)開(kāi)銷要少,每一層之間要相互獨(dú)立,內(nèi)存操作簡(jiǎn)單。為了實(shí)現(xiàn)每一層的獨(dú)立,實(shí)現(xiàn)上下層之間的數(shù)據(jù)透明傳輸。每層之間應(yīng)通過(guò)一系列的函數(shù)進(jìn)行數(shù)據(jù)傳遞,同時(shí)為了減少由于數(shù)據(jù)拷貝引入的系統(tǒng)開(kāi)銷,系統(tǒng)應(yīng)通過(guò)指針操作,而不是數(shù)據(jù)拷貝方式,將緩沖區(qū)中的數(shù)據(jù)沿協(xié)議棧向上傳遞。

    由于TCP/IP的各層協(xié)議的各種數(shù)據(jù)格式,在各種資料中都有詳細(xì)說(shuō)明,這里就不再一一介紹。只詳細(xì)介紹總的結(jié)構(gòu)、各層的功能及實(shí)現(xiàn)過(guò)程,為了便于調(diào)試,系統(tǒng)在實(shí)現(xiàn)時(shí)肯定是從底層開(kāi)始,一層一層往上實(shí)現(xiàn)。

1) 首先公共數(shù)據(jù)結(jié)構(gòu)的定義:如MAC地址格式、IP地址格式、系統(tǒng)的地址配置、緩沖區(qū)格式及大小。

    其中MAC、IP地址格式都是固定的,系統(tǒng)的配置用于確定系統(tǒng)的IP地址及端口以及MAC地址值。在本系統(tǒng)中由于傳送的數(shù)據(jù)有限,只定義了4個(gè)用于傳送和接收數(shù)據(jù)的緩沖區(qū)每個(gè)長(zhǎng)度為150字節(jié)。

2)網(wǎng)絡(luò)驅(qū)動(dòng)接口:由于網(wǎng)絡(luò)驅(qū)動(dòng)也是我們自己編制的,所以與上層結(jié)合起來(lái)很順利,接收時(shí)采用中斷機(jī)制,當(dāng)收到網(wǎng)絡(luò)中斷就讀取數(shù)據(jù),根據(jù)包的種類分別傳給ARP或IP協(xié)議,由每一層自行處理數(shù)據(jù)。發(fā)送時(shí)采用查詢方式,應(yīng)用層準(zhǔn)備好數(shù)據(jù),一層層封裝并向下傳遞,最后經(jīng)由網(wǎng)絡(luò)驅(qū)動(dòng)程序發(fā)送。

3) 鏈路層ARP協(xié)議的實(shí)現(xiàn):

    首先定義ARP數(shù)據(jù)幀頭結(jié)構(gòu)及ARP高速緩沖表,數(shù)據(jù)幀必須根據(jù)標(biāo)準(zhǔn)定義,高速緩沖表至少要含有IP地址及相對(duì)應(yīng)的MAC地址兩項(xiàng)。由于嵌入式系統(tǒng)所連接的對(duì)象數(shù)目較少且都比較固定,所以就去掉了緩沖表的定時(shí)刷新程序,這樣可以大大減少系統(tǒng)的刷新開(kāi)銷。

    這一部分的主要工作是:

a、根據(jù)上層數(shù)據(jù)包中的IP地址,在高速緩沖表中查出對(duì)應(yīng)的MAC地址并填入包中相應(yīng)位置。若表中沒(méi)有相應(yīng)MAC地址,則按照格式組裝一個(gè)ARP請(qǐng)求包并發(fā)送,以得到對(duì)方MAC地址。

b、若收到ARP應(yīng)答包,則更新ARP緩存表。

主要函數(shù)有:

struct pbuf * arp_packet(struct arpdata *q)// 把要發(fā)送的ARP數(shù)據(jù)打包成網(wǎng)絡(luò)格式字節(jié)流;

struct mac *arp_lookup (struct ip *p) // 根據(jù)IP地址在ARP緩存表中查找MAC地址,若找不到則自動(dòng)向網(wǎng)絡(luò)廣播ARP請(qǐng)求;

void arp_input(struct pbuf *p)// 從驅(qū)動(dòng)程序傳入ARP幀數(shù)據(jù),如果是ARP請(qǐng)求則發(fā)送一個(gè)ARP應(yīng)答包,如果是ARP應(yīng)答則更新ARP緩存表;

4)網(wǎng)絡(luò)層IP協(xié)議及Ping應(yīng)答的實(shí)現(xiàn):

    首先定義數(shù)據(jù)結(jié)構(gòu)IP及ICMP數(shù)據(jù)幀格式,這兩者都要根據(jù)標(biāo)準(zhǔn)來(lái)定義。這一部分的主要工作有:

a、對(duì)上一層傳下來(lái)的數(shù)據(jù)包,加上IP首部和IP校驗(yàn)和,發(fā)往下一層。以及對(duì)下一層傳上來(lái)的數(shù)據(jù)包,進(jìn)行校驗(yàn)和檢查,若正確去掉IP首部,送往上一層。

b、為了便于測(cè)試要響應(yīng)主機(jī)的PING程序,即如收到ICMP的回顯請(qǐng)求包,則按照格式組裝一個(gè)ICMP的回顯應(yīng)答包并發(fā)送。

主要函數(shù)有:

int ip_input(struct pbuf* p);//輸入下一層的數(shù)據(jù)包,去掉IP首部傳給上一層;

int ip_send_data(struct pbuf *p,int len,int type,struct ip dst_ip);//將上一層的數(shù)據(jù)加上IP首部,并向下一層發(fā)送;

void ip_packet(struct pbuf *p,struct IP_data *q,int len);//IP首部和數(shù)據(jù)打包;

U16 ip_chksum(U8 *p,int len);//IP檢驗(yàn)和計(jì)算;

void icmp_input(struct pbuf *p) 如果ICMP的回顯請(qǐng)求,則發(fā)一個(gè)應(yīng)答包;

5)傳輸層UDP協(xié)議的實(shí)現(xiàn):

    根據(jù)標(biāo)準(zhǔn)定義UDP數(shù)據(jù)幀格式。這一部分的主要工作有:對(duì)應(yīng)用層傳下來(lái)的數(shù)據(jù)包,加上UDP首部和UDP校驗(yàn)和,發(fā)往下一層。以及對(duì)下一層傳上來(lái)的數(shù)據(jù)包,進(jìn)行校驗(yàn)和檢查,若正確去掉UDP首部,提出數(shù)據(jù)送給應(yīng)用層。需注意的是,要產(chǎn)生一個(gè)偽首部用于UDP數(shù)據(jù)檢驗(yàn)和計(jì)算。

主要函數(shù)有:

void udp_input(struct pbuf *p);//從下一層輸入U(xiǎn)DP數(shù)據(jù)

void udp_output(U8 *str,struct ip dst_ip,U16 dst_port);//向下一層發(fā)送UDP數(shù)據(jù)

void makeup_pheader(struct ip *p,U16 len ,U8 *q);//產(chǎn)生偽首部用于UDP檢驗(yàn)和計(jì)算

U16 udp_chksum(U8 *p,int len,U8 *p1,int len1);//計(jì)算UDP檢驗(yàn)和

6)執(zhí)行過(guò)程:

    當(dāng)本地系統(tǒng)有數(shù)據(jù)要發(fā)送時(shí),首先在傳輸層將數(shù)據(jù)加上UDP首部,再到網(wǎng)絡(luò)層加IP首部,然后到鏈路層從ARP表中查詢相應(yīng)的MAC地址,填入相應(yīng)位置,并發(fā)給網(wǎng)絡(luò)驅(qū)動(dòng)程序傳到以太網(wǎng)上。

    圖2是用SPYNET軟件截取的本系統(tǒng)啟動(dòng)后第一次發(fā)送一串字符的整個(gè)網(wǎng)絡(luò)協(xié)議應(yīng)答過(guò)程,由于是第一次發(fā)送, ARP表為空。所以當(dāng)發(fā)送UDP數(shù)據(jù)時(shí)找不到目的IP地址對(duì)應(yīng)的MAC地址,系統(tǒng)先發(fā)ARP請(qǐng)求,等對(duì)方回一個(gè)ARP應(yīng)答,得到對(duì)方MAC地址,然后再發(fā)UDP數(shù)據(jù)包。

圖2 一個(gè)實(shí)際UDP數(shù)據(jù)包發(fā)送全過(guò)程

4、結(jié)束語(yǔ)

       由于嵌入式系統(tǒng)發(fā)展及互聯(lián)網(wǎng)絡(luò)的普及、遠(yuǎn)程控制和信息家電的興起,嵌入式系統(tǒng)與互聯(lián)網(wǎng)絡(luò)的結(jié)合逐漸成為一種新的技術(shù)發(fā)展方向,嵌入式TCP/IP協(xié)議的選擇與實(shí)現(xiàn)是這一技術(shù)必須要面對(duì)的。很多時(shí)候在涉及TCP/IP協(xié)議時(shí),都容易被其復(fù)雜的體系結(jié)構(gòu)所迷惑,而不敢輕易動(dòng)手,本文提出的這種嵌入式TCP/IP協(xié)議的選擇思路及給出的一套精簡(jiǎn)TCP/IP協(xié)議子集的實(shí)現(xiàn)過(guò)程,對(duì)于這一方面的研究很具有參考價(jià)值。

參 考 文 獻(xiàn)

1、李潤(rùn)知,岳儉,李陽(yáng)陽(yáng)(2003).基于Web的嵌入式網(wǎng)絡(luò)管理系統(tǒng).《計(jì)算機(jī)應(yīng)用》.23(6):95-97.

2、許海燕,付炎主編(2002).嵌入式系統(tǒng)技術(shù)與應(yīng)用.北京:機(jī)械工業(yè)出版社。

3 、(美)W.Richard Stevens著,范建華等譯(2000).TCP/IP詳解 卷1:協(xié)議.機(jī)械工業(yè)出版社。

4、李明,康靜秋,賈智平(2002).嵌入式TCP/IP協(xié)議棧的研究與開(kāi)發(fā)《計(jì)算機(jī)工程與應(yīng)用》.2002(16):118-121.

5、洪錫軍,汪德才(2000).基于Internet的多功能遠(yuǎn)程監(jiān)控報(bào)警系統(tǒng).《上海交通大學(xué)學(xué)報(bào)》.34(10):1370-1371.

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

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉