時間:2007-12-06 09:39:00來源:shixiang
圖1 精簡的TCP/IP協(xié)議子集[/align]
首先在鏈路層上,由于采用以太網(wǎng)的接入方式,系統(tǒng)必須要實現(xiàn)IEEE802.3所規(guī)定的CDMA/CD協(xié)議。CDMA/CD協(xié)議不需用戶實現(xiàn),此協(xié)議只要采用通用的以太網(wǎng)接口芯片就可支持。其次,為了保證系統(tǒng)在以太網(wǎng)中的通信,系統(tǒng)還需實現(xiàn)ARP應答協(xié)議,該協(xié)議用于將IP地址映射成以太網(wǎng)MAC地址。ARP的執(zhí)行依靠維持一張表來完成IP地址和MAC的地址的映射。
在網(wǎng)絡層,由于系統(tǒng)要求能夠在Internet進行通信,因此系統(tǒng)要實現(xiàn)IP協(xié)議。IP層的代碼有兩個功能:驗證到來的IP報文報頭的正確性,并且對TCP和ICMP報文實行分流。因為不考慮IP的分片和重組,所以 IP層的代碼非常的精簡。為了能夠測試系統(tǒng)與網(wǎng)絡的連接,系統(tǒng)需要實現(xiàn)ICMP協(xié)議中的Ping應答協(xié)議,Ping應答協(xié)議主要是檢查網(wǎng)絡是否連通
在傳輸層, TCP為兩臺主機提供面向連接的、可靠的、無重復的雙向數(shù)據(jù)流傳輸服務,TCP協(xié)議設計了嚴格的3次建立連接握手過程、4次關閉連接握手過程,這些過程的實現(xiàn)對系統(tǒng)資源的耗費非常大。而UDP的實現(xiàn)比較簡單,它在某些嵌入式Internet的應用場合可以很好地應用。考慮到系統(tǒng)的簡化及速度的要求,采用了UDP協(xié)議,為了確保UDP數(shù)據(jù)的到達,在應用程序中采用了重復發(fā)送、回復確認的方式來保證數(shù)據(jù)的正確性。
由于本嵌入式系統(tǒng)無HTTP、FTP等應用,所以應用層中的協(xié)議無需實現(xiàn)。
3、協(xié)議的實現(xiàn)
本系統(tǒng)由于協(xié)議比較精簡,只保留了必須使用的一些協(xié)議,所以實現(xiàn)過程相對簡單。實現(xiàn)過程中的一個總目標是系統(tǒng)開銷要少,每一層之間要相互獨立,內存操作簡單。為了實現(xiàn)每一層的獨立,實現(xiàn)上下層之間的數(shù)據(jù)透明傳輸。每層之間應通過一系列的函數(shù)進行數(shù)據(jù)傳遞,同時為了減少由于數(shù)據(jù)拷貝引入的系統(tǒng)開銷,系統(tǒng)應通過指針操作,而不是數(shù)據(jù)拷貝方式,將緩沖區(qū)中的數(shù)據(jù)沿協(xié)議棧向上傳遞。
由于TCP/IP的各層協(xié)議的各種數(shù)據(jù)格式,在各種資料中都有詳細說明,這里就不再一一介紹。只詳細介紹總的結構、各層的功能及實現(xiàn)過程,為了便于調試,系統(tǒng)在實現(xiàn)時肯定是從底層開始,一層一層往上實現(xiàn)。
1) 首先公共數(shù)據(jù)結構的定義:如MAC地址格式、IP地址格式、系統(tǒng)的地址配置、緩沖區(qū)格式及大小。
其中MAC、IP地址格式都是固定的,系統(tǒng)的配置用于確定系統(tǒng)的IP地址及端口以及MAC地址值。在本系統(tǒng)中由于傳送的數(shù)據(jù)有限,只定義了4個用于傳送和接收數(shù)據(jù)的緩沖區(qū)每個長度為150字節(jié)。
2)網(wǎng)絡驅動接口:由于網(wǎng)絡驅動也是我們自己編制的,所以與上層結合起來很順利,接收時采用中斷機制,當收到網(wǎng)絡中斷就讀取數(shù)據(jù),根據(jù)包的種類分別傳給ARP或IP協(xié)議,由每一層自行處理數(shù)據(jù)。發(fā)送時采用查詢方式,應用層準備好數(shù)據(jù),一層層封裝并向下傳遞,最后經(jīng)由網(wǎng)絡驅動程序發(fā)送。
3) 鏈路層ARP協(xié)議的實現(xiàn):
首先定義ARP數(shù)據(jù)幀頭結構及ARP高速緩沖表,數(shù)據(jù)幀必須根據(jù)標準定義,高速緩沖表至少要含有IP地址及相對應的MAC地址兩項。由于嵌入式系統(tǒng)所連接的對象數(shù)目較少且都比較固定,所以就去掉了緩沖表的定時刷新程序,這樣可以大大減少系統(tǒng)的刷新開銷。
這一部分的主要工作是:
a、根據(jù)上層數(shù)據(jù)包中的IP地址,在高速緩沖表中查出對應的MAC地址并填入包中相應位置。若表中沒有相應MAC地址,則按照格式組裝一個ARP請求包并發(fā)送,以得到對方MAC地址。
b、若收到ARP應答包,則更新ARP緩存表。
主要函數(shù)有:
struct pbuf * arp_packet(struct arpdata *q)// 把要發(fā)送的ARP數(shù)據(jù)打包成網(wǎng)絡格式字節(jié)流;
struct mac *arp_lookup (struct ip *p) // 根據(jù)IP地址在ARP緩存表中查找MAC地址,若找不到則自動向網(wǎng)絡廣播ARP請求;
void arp_input(struct pbuf *p)// 從驅動程序傳入ARP幀數(shù)據(jù),如果是ARP請求則發(fā)送一個ARP應答包,如果是ARP應答則更新ARP緩存表;
4)網(wǎng)絡層IP協(xié)議及Ping應答的實現(xiàn):
首先定義數(shù)據(jù)結構IP及ICMP數(shù)據(jù)幀格式,這兩者都要根據(jù)標準來定義。這一部分的主要工作有:
a、對上一層傳下來的數(shù)據(jù)包,加上IP首部和IP校驗和,發(fā)往下一層。以及對下一層傳上來的數(shù)據(jù)包,進行校驗和檢查,若正確去掉IP首部,送往上一層。
b、為了便于測試要響應主機的PING程序,即如收到ICMP的回顯請求包,則按照格式組裝一個ICMP的回顯應答包并發(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檢驗和計算;
void icmp_input(struct pbuf *p) 如果ICMP的回顯請求,則發(fā)一個應答包;
5)傳輸層UDP協(xié)議的實現(xiàn):
根據(jù)標準定義UDP數(shù)據(jù)幀格式。這一部分的主要工作有:對應用層傳下來的數(shù)據(jù)包,加上UDP首部和UDP校驗和,發(fā)往下一層。以及對下一層傳上來的數(shù)據(jù)包,進行校驗和檢查,若正確去掉UDP首部,提出數(shù)據(jù)送給應用層。需注意的是,要產(chǎn)生一個偽首部用于UDP數(shù)據(jù)檢驗和計算。
主要函數(shù)有:
void udp_input(struct pbuf *p);//從下一層輸入UDP數(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檢驗和計算
U16 udp_chksum(U8 *p,int len,U8 *p1,int len1);//計算UDP檢驗和
6)執(zhí)行過程:
當本地系統(tǒng)有數(shù)據(jù)要發(fā)送時,首先在傳輸層將數(shù)據(jù)加上UDP首部,再到網(wǎng)絡層加IP首部,然后到鏈路層從ARP表中查詢相應的MAC地址,填入相應位置,并發(fā)給網(wǎng)絡驅動程序傳到以太網(wǎng)上。
圖2是用SPYNET軟件截取的本系統(tǒng)啟動后第一次發(fā)送一串字符的整個網(wǎng)絡協(xié)議應答過程,由于是第一次發(fā)送, ARP表為空。所以當發(fā)送UDP數(shù)據(jù)時找不到目的IP地址對應的MAC地址,系統(tǒng)先發(fā)ARP請求,等對方回一個ARP應答,得到對方MAC地址,然后再發(fā)UDP數(shù)據(jù)包。
[align=center]
圖2 一個實際UDP數(shù)據(jù)包發(fā)送全過程[/align]
4、結束語
由于嵌入式系統(tǒng)發(fā)展及互聯(lián)網(wǎng)絡的普及、遠程控制和信息家電的興起,嵌入式系統(tǒng)與互聯(lián)網(wǎng)絡的結合逐漸成為一種新的技術發(fā)展方向,嵌入式TCP/IP協(xié)議的選擇與實現(xiàn)是這一技術必須要面對的。很多時候在涉及TCP/IP協(xié)議時,都容易被其復雜的體系結構所迷惑,而不敢輕易動手,本文提出的這種嵌入式TCP/IP協(xié)議的選擇思路及給出的一套精簡TCP/IP協(xié)議子集的實現(xiàn)過程,對于這一方面的研究很具有參考價值。
參 考 文 獻
1、李潤知,岳儉,李陽陽(2003).基于Web的嵌入式網(wǎng)絡管理系統(tǒng).《計算機應用》.23(6):95-97.
2、許海燕,付炎主編(2002).嵌入式系統(tǒng)技術與應用.北京:機械工業(yè)出版社。
3 、(美)W.Richard Stevens著,范建華等譯(2000).TCP/IP詳解 卷1:協(xié)議.機械工業(yè)出版社。
4、李明,康靜秋,賈智平(2002).嵌入式TCP/IP協(xié)議棧的研究與開發(fā)《計算機工程與應用》.2002(16):118-121.
5、洪錫軍,汪德才(2000).基于Internet的多功能遠程監(jiān)控報警系統(tǒng).《上海交通大學學報》.34(10):1370-1371.標簽:
上一篇:交-交變頻器用于交流提升機...
傳動網(wǎng)版權與免責聲明:凡本網(wǎng)注明[來源:傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權均為傳動網(wǎng)(connectcrack.com)獨家所有。如需轉載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉載使用時須注明來源“傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責任。
本網(wǎng)轉載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產(chǎn)品新聞
更多>2025-09-23
2025-09-23
2025-09-08
華為昇騰Atlas800iA2 910B服務器Deepsee...
2025-09-04
2025-09-03
2025-08-06