基于SF0020芯片的嵌入式TCP/IP協(xié)議族設(shè)計(jì)與實(shí)現(xiàn)
1、 引言
TCP/IP起源于60年代末美國政府資助的一個分組交換網(wǎng)絡(luò)研究項(xiàng)目,到現(xiàn)今已發(fā)展成為計(jì)算機(jī)之間最常應(yīng)用的組網(wǎng)形式。盡管標(biāo)準(zhǔn)的TCP/IP協(xié)議族在數(shù)據(jù)傳輸?shù)目煽啃耘c數(shù)據(jù)流量的控制上作的很好,但是8位微控制器性能的限制下,標(biāo)準(zhǔn)的TCP/IP協(xié)議族的實(shí)現(xiàn)占用大量系統(tǒng)資源是實(shí)際應(yīng)用所不允許的。因此要在不改變TCP/IP協(xié)議族標(biāo)準(zhǔn)的前提下對其進(jìn)行裁剪,使其實(shí)時性提高同時保證可靠性以滿足嵌入式系統(tǒng)的要求。
SF0020是NEC公司推出的兼容80C51的8位微控制器芯片。根據(jù)系統(tǒng)在網(wǎng)絡(luò)監(jiān)控系統(tǒng)控制終端應(yīng)用的需要,外部接25MHz晶體,內(nèi)部倍頻至50MHz。該芯片內(nèi)嵌有10M/100Mbps的MAC模塊并提供MII界面,可與外部的Ethernet PHY芯片方便連接。芯片有256字節(jié)內(nèi)部數(shù)據(jù)存儲器,外部可擴(kuò)充至512K字節(jié)。具備的DMA通道實(shí)現(xiàn)了在RAM中和在MAC與RAM之間進(jìn)行快速數(shù)據(jù)傳輸?shù)墓δ埽恢С中r?yàn)和模塊,在實(shí)現(xiàn)TCP/IP時可以節(jié)省控制器運(yùn)算開銷。指令周期為4個時鐘周期(標(biāo)準(zhǔn)80C51為12時鐘周期/指令周期)。其性能滿足實(shí)現(xiàn)嵌入式TCP/IP協(xié)議族的基本要求。
2、 協(xié)議族總體框架設(shè)計(jì)與裁剪策略
為了實(shí)現(xiàn)在局域網(wǎng)環(huán)境中作為客戶端控制前端監(jiān)控設(shè)備(硬盤錄像機(jī)、編碼器、解碼、視頻服務(wù)器等)的應(yīng)用要求,必須在有限的硬件資源的條件下保證數(shù)據(jù)傳輸?shù)目煽啃院蛯?shí)時性。因此數(shù)據(jù)鏈路層采用目前應(yīng)用最為廣泛的以太網(wǎng)協(xié)議;上層利用TCP/IP的實(shí)現(xiàn)采用在運(yùn)輸層直接采用可靠的TCP協(xié)議,然后對其進(jìn)行適當(dāng)裁剪的方法。這是因?yàn)榭紤]到通用性、兼容性和通信的可靠程度,而沒有使用在應(yīng)用層加入控制策略運(yùn)輸層使用簡單UDP協(xié)議的方案。本地?cái)?shù)據(jù)的流動要實(shí)現(xiàn)向應(yīng)用程序提供可靠的數(shù)據(jù),與底層以太網(wǎng)驅(qū)動程序交互數(shù)據(jù)報功能。
協(xié)議族系統(tǒng)結(jié)構(gòu)框架如下圖1所示,其中虛線部分是本文所要完成的,包括socket子層、運(yùn)輸層的TCP協(xié)議、網(wǎng)絡(luò)層的IP和ICMP協(xié)議、ARP協(xié)議和以太網(wǎng)子層。
圖1 協(xié)議族系統(tǒng)框架
2.1 接口子層實(shí)現(xiàn)
以太網(wǎng)子層提供了與以太網(wǎng)驅(qū)動程序的接口,其實(shí)現(xiàn)驅(qū)動程序存儲空間和協(xié)議空間之間數(shù)據(jù)搬移的功能;以及數(shù)據(jù)報流入的分路和流出的封裝處理。
Socket(插口)子層向上層提供了創(chuàng)建一個socket描述符,將本地的IP地址與端口號綁定到一個socket上,TCP連接的建立、斷開,數(shù)據(jù)的接收與發(fā)送的功能。
2.2 網(wǎng)絡(luò)層實(shí)現(xiàn)
網(wǎng)絡(luò)層實(shí)現(xiàn)包括IP協(xié)議(Internet Protocol網(wǎng)際協(xié)議)和基于IP協(xié)議的ICMP協(xié)議(Internet Control Messages Protocol控制報文協(xié)議)。圖1中該層下部的ARP(Address Resolution Protocol 地址解析協(xié)議)為IP提供動態(tài)地址解析服務(wù)。
IP是TCP/IP協(xié)議族中最為核心的協(xié)議。所有的網(wǎng)絡(luò)層和運(yùn)輸層數(shù)據(jù)都以IP數(shù)據(jù)報格式傳輸。為了減小TCP/IP協(xié)議族的負(fù)擔(dān),接收時首先要檢查數(shù)據(jù)報的正確性,其次還要過濾目的地址不是本機(jī)的報文;此外如果收到被IP分片的數(shù)據(jù)報立即丟棄。最后判斷協(xié)議交給TCP或ICMP協(xié)議處理。因?yàn)榻笽P層分片可以提高通信的效率和可靠性,根據(jù)以太網(wǎng)最大傳輸單元(MTU)的限制,socket子層控制了用戶每次傳輸分組的最大字節(jié)數(shù)。同樣服務(wù)端也對IP分片加以限制使IP無需把有限的系統(tǒng)資源消耗在IP報文重裝上,這正是丟棄被分片的IP數(shù)據(jù)報的原因。
ICMP提供主機(jī)或路由器報告差錯或提供查詢信息的服務(wù)。ICMP報文可以分成兩類:差錯和查詢。查詢報文是用一對請求和回答定義的。ICMP差錯報文通常包含了引起錯誤的IP數(shù)據(jù)報的第一個分片的IP首部(和選項(xiàng)),加上該分片數(shù)據(jù)部分的前8個字節(jié)。由于運(yùn)輸層僅僅使用TCP協(xié)議,ICMP也進(jìn)行了裁剪。協(xié)議支持ping命令請求回顯應(yīng)答,用于檢查協(xié)議族的運(yùn)行狀況;差錯控制全部交給運(yùn)輸層TCP協(xié)議處理。
tcp/ip相關(guān)文章:tcp/ip是什么
評論