TCP/IP協(xié)議棧在嵌入式異構網(wǎng)絡(luò )互聯(lián)中的應用
關(guān)鍵詞:TCP/IP協(xié)議棧 CAN總線(xiàn) 以太網(wǎng) 互聯(lián)網(wǎng) 異構結構
引言
Internet現已成為社會(huì )重要的信息流通渠道。如果嵌入式系統能夠連接到Internet上面,則可以方便、低廉地將信息傳送到幾乎世界上的任何一個(gè)地方??梢灶A言,嵌入式設備與Internet的結合代表著(zhù)嵌入式系統和網(wǎng)絡(luò )技術(shù)的真正未來(lái)。隨著(zhù)IPv6的應用,設備都可能獲得一個(gè)全球唯一的IP地址,通過(guò)IP地址和互聯(lián)網(wǎng)相連成為一個(gè)網(wǎng)絡(luò )設備。但是傳統的TCP/IP協(xié)議在實(shí)現實(shí)時(shí)性方面做得不夠好,它把大量的精力花在保證數據傳送的可靠性以及數據流量的控制上。而在實(shí)時(shí)性要求比較高的嵌入式領(lǐng)域中,傳統的TCP/IP不能滿(mǎn)足其實(shí)時(shí)要求。另外,傳統TCP/IP的實(shí)現過(guò)于復雜,需占用大量系統資源,而嵌入式應用的系統資源往往都很有限。因此,需要把傳統TCP/IP在不違背協(xié)議標準的前提下加以改進(jìn)實(shí)現,使其實(shí)現性得到提高,占用的存儲空間盡可能少,以滿(mǎn)足嵌入式應用的要求。
在大型企業(yè)自動(dòng)化系統中,上層企業(yè)管理層和生產(chǎn)監控層一般采用的都是以太網(wǎng)和PC機,而在下層車(chē)間現場(chǎng)都是采用現場(chǎng)總線(xiàn)和單片機測控設備。上下兩層的溝通,通常采用工業(yè)控制機加以太網(wǎng)卡,再加上PC機插槽上的接口卡和并行打印口EPP接口卡來(lái)實(shí)現。這種連接方式成本高,開(kāi)發(fā)周期長(cháng)。針對這些情況,本文提出了一種單獨的嵌入式CAN-以太網(wǎng)網(wǎng)關(guān)互連系統的設計方案,成功地實(shí)現以太網(wǎng)和現有的CAN總線(xiàn)網(wǎng)的直接數據傳輸。
1 異構網(wǎng)絡(luò )互聯(lián)系統結構設計
CAN總線(xiàn)是一個(gè)設備互連總線(xiàn)型控制網(wǎng)絡(luò )。在CAN總線(xiàn)上可以?huà)旖佣噙_110個(gè)設備節點(diǎn),各設備間可以自主相互通信,實(shí)現復雜網(wǎng)絡(luò )控制系統。但設備信息層無(wú)法直接到達信息管理層,要想設備信息進(jìn)入信息管理層就要通過(guò)一種數據網(wǎng)關(guān)。
這里設計了一個(gè)SX52網(wǎng)關(guān),用于CAN總線(xiàn)與以太網(wǎng)的互連。圖1所示的系統總體結構分為三部分:現場(chǎng)測控網(wǎng)絡(luò )(CAN網(wǎng)絡(luò ))、嵌入式透明SX52網(wǎng)關(guān)和以太網(wǎng)信息管理終端(如監控平臺和網(wǎng)絡(luò )數據庫等)。以太網(wǎng)信息管理終端與CAN總線(xiàn)上的CAN節點(diǎn)通過(guò)Ethernet、SX52網(wǎng)關(guān)、CAN總線(xiàn)相互通信,其中SX52網(wǎng)關(guān)起核心異構網(wǎng)絡(luò )的互連作用。
協(xié)議轉換是異構網(wǎng)絡(luò )互連的技術(shù)關(guān)鍵和難點(diǎn)。協(xié)議轉換一般遙相呼應采用分層轉換的方法,自低向上逐層進(jìn)行。目前互連大都是在網(wǎng)絡(luò )層或網(wǎng)絡(luò )層展開(kāi)的,因而必須對互連層以下各層協(xié)議逐層向上轉換。這種轉換方法的依據是協(xié)議分層的基本原理,即低層支持高層,高層調用低層,低層斷開(kāi)連接后,高層連接也隨之斷開(kāi),但高層斷開(kāi)連接卻不會(huì )影響低層。從網(wǎng)絡(luò )的分層結構上來(lái)看我們設計的互連系統具有如圖2所示的分層結構。以太網(wǎng)上運行TCP/IP協(xié)議,它具有應用層、傳輸層、網(wǎng)絡(luò )層以太網(wǎng)數據鏈路層和物理層;CAN總線(xiàn)具有應用層、數據鏈路層和物理層,其中應用層由用戶(hù)自己定義,數據鏈路層和物理層由CAN協(xié)議所定義;SX52數據網(wǎng)關(guān)具有物理層、數據鏈路層和應用層,其應用層也就是Ethernet與CAN的信息數據交換層,SX52微控制器在此層相互解釋并轉發(fā)這兩種不同協(xié)議的數據。
在本設計中,SX52網(wǎng)關(guān)被設計成了一個(gè)透明數據網(wǎng)關(guān)。也就是在以太網(wǎng)應用層構建和解析完整的CAN協(xié)議數據包。CAN協(xié)議數據包作為T(mén)CP/IP網(wǎng)絡(luò )的應用層的數據進(jìn)行傳輸。對通信數據的具體實(shí)際意義不做任何解釋。
透明式網(wǎng)關(guān)由通信處理器、CAN總線(xiàn)控制器和以太網(wǎng)控制器三個(gè)部分組成。其中SX52單片機為核心處理器,實(shí)現CAN控制網(wǎng)絡(luò )與以太網(wǎng)之間的協(xié)議轉換。以太網(wǎng)信息管理 層的控制指令發(fā)送到嵌入式透明SX52網(wǎng)關(guān),經(jīng)過(guò)它將TCP/IP協(xié)議包數據轉換為CAN協(xié)議形式發(fā)送至CAN控制網(wǎng)絡(luò )中的指定設備節點(diǎn),完成信息管理層對現場(chǎng)設備層的控制。同樣地,當CAN網(wǎng)絡(luò )上的設備數據(如定時(shí)采樣數據或報警信息)要傳輸到信息管理層時(shí),可將數據發(fā)送到嵌入式透明SX52網(wǎng)關(guān),再通過(guò)網(wǎng)關(guān)協(xié)議轉換程序將CAN協(xié)議數據封裝成TCP/IP協(xié)議的以太網(wǎng)數據幀發(fā)送至以太網(wǎng)上的監控計算機。
2 SX52中TCP/IP協(xié)議棧的設計
按照層次結構思想,對計算機網(wǎng)絡(luò )模塊化的研究結果是,形成了一組從上到下單向依賴(lài)關(guān)系的協(xié)議棧(protocol stack),也叫協(xié)議族。在標準的TCP/IP協(xié)議族中有很多協(xié)議。這里SX52中TCP/IP協(xié)議棧層次結構如圖3所示。
2.1 SX52 ARP協(xié)議的設計與實(shí)現
地址解析協(xié)議ARP(Address Resolution Protocol)可以實(shí)現邏輯地址到物理地址的動(dòng)態(tài)映射。它提供了一種使以太網(wǎng)絡(luò )節點(diǎn)可以傳輸一個(gè)IP數據包到目的地址的映射機制。
在SX52中,ARP協(xié)議是通過(guò)一個(gè)“IP地址對應以太網(wǎng)地址”的單登記實(shí)現的。當遠程主機需要知道它的物理地址時(shí),遠程主機會(huì )向它發(fā)送ARP請求。這時(shí)它就會(huì )響應這個(gè)遠程主機的請求,告訴對方自己的物理地址。當然,當應用層需要傳輸IP數據包時(shí),SX52 ARP協(xié)議也可以請求遠程目的物理地址。
要傳輸的Internet數據包在以太網(wǎng)控制器的發(fā)送緩沖區中被構建,它使用最近接收到的數據包的目的以太網(wǎng)地址作為發(fā)送數據包的目的地址。當然,這可能不是正確的以太網(wǎng)地址,因此,在實(shí)際發(fā)送數據包之前,ARP協(xié)議將檢查發(fā)送數據包中的IP地址是否存在于A(yíng)RP核中。如果發(fā)送數據中包中的IP地址在這個(gè)核中,在以太網(wǎng)發(fā)送緩沖區中的數據包將使用ARP核中的以太網(wǎng)地址更新;如果不在,ARP協(xié)議將發(fā)送一個(gè)ARP請求包,然后等待一個(gè)應答。一旦這個(gè)ARP應答接收到,這個(gè)ARP核將使用剛接收到的目標以太網(wǎng)地址更新,接著(zhù),等待發(fā)送的數據包也將使用這個(gè)以太網(wǎng)地址更新,然后被發(fā)送出去。如果發(fā)送的ARP請求包沒(méi)有應答,導致ARP定時(shí)器超時(shí),這時(shí)等待發(fā)送的數據包將被廢棄,正常的協(xié)議棧繼續運行。使用的變量有:ARP核中的IP地址{hostlIP3,hostlIP2,hostlIP1,host1IP0};ARP核中的以太網(wǎng)物理地址{host1Eth0,host1Eth1,host1Eth2,host1Eth3,host1Eth4,host1Eth5};ARP協(xié)議的定時(shí)器{arpTimerMSB,arpTimerLSB}等。使用涉及的函數有:ARPInit(),ARPCheckCache(),ARPSendResponse(),ARPUpdateEthAddr(),ARPCheckIfIs(),ARPCompare4(),ARPSendStPacket(),ARPSendCommon(),ARPSendRequest()。
2.2 SX52 IP協(xié)議的設計與實(shí)現
IP是TCP/IP協(xié)議族中最為核心的協(xié)議。所有的TCP、UDP、ICMP及IGMP數據都以IP數據報格式傳輸。IP提供不可靠、無(wú)連接的數據報傳送服務(wù)。本設計中的IP協(xié)議是針對特殊的應用環(huán)境下的合理簡(jiǎn)化。CAN總線(xiàn)的控制網(wǎng)絡(luò )是一種短幀(每個(gè)數據幀為8字節)的實(shí)時(shí)網(wǎng)絡(luò ),所以,IP數據包無(wú)須分片(MF=DF=0),同時(shí),設置IP為服務(wù)類(lèi)型為一般類(lèi)型,其頭長(cháng)為20字節,壽命TTL設置為64。使用的變量有:目的IP地址{remoteIP3,remoteIP2,remoteIP1,remoteIP0};源IP地址{myIP3,myIP2,myIP1,myIP0};IP校驗和{ipCheckSumMSB,ipCheckSumLSB};IP數據包長(cháng)度{ipLengthMSB,}ipLengthLSB};上層使用的協(xié)議ipProtocol,IP標識{ipIdentMSB,ipIdentLSB}。使用涉及的函數有:TCPIPInit(),CheckIPDatagram(),CheckIPDestAddr(),IPStartPktOut()等。
2.3 SX52 ICMP協(xié)議的設計與實(shí)現
為了讓互聯(lián)網(wǎng)中的路由器報告或提供有關(guān)意外情況的信息,在TCP/IP協(xié)議系列中加入了一個(gè)專(zhuān)門(mén)用于發(fā)送差錯報文的協(xié)議――互聯(lián)網(wǎng)控制報文協(xié)議ICMP(Internet Control Message Protocol)。ICMP是IP的一部分在每個(gè)IP實(shí)現中都必須用到它。像其它所有的通信業(yè)務(wù)一樣,ICMP報文是放在一個(gè)IP數據報的數據部分中傳送的。ICMP報文的最終目的不是應用程序或目的機器上的用戶(hù),而是該機上處理它的Internet協(xié)議軟件模塊。也就是說(shuō):Internet控制報文協(xié)議允許路由器向其它路由器或主機發(fā)送差錯或控制報文;ICMP在兩臺主機的Internet協(xié)議軟件之間提供通信。
每個(gè)ICMP報文都以相同的3個(gè)字節開(kāi)始:1個(gè)8位整數的報文類(lèi)型(TYPE)字段用來(lái)識別報文,1個(gè)8位代碼(CODE)字段提供有關(guān)報文類(lèi)型的進(jìn)一步信息,1個(gè)16位校驗和字段。此外,ICMP報文還總是包括產(chǎn)生問(wèn)題的數據報首部及其開(kāi)頭的64位數據。
ICMP使用IP來(lái)傳送每一個(gè)差錯報文。當路由器有一個(gè)ICMP報文要傳遞時(shí),它會(huì )創(chuàng )建一個(gè)IP數據報并將ICMP報文封裝其中,也就是說(shuō),ICMP報文被置于IP數據報的數據區中,然后這一數據報像通常一樣被轉發(fā)。即整個(gè)數據報被封裝進(jìn)幀中進(jìn)行傳遞。
每一個(gè)ICMP報文的產(chǎn)生總是對應于一個(gè)數據報。路由器將一個(gè)ICMP報文將回給產(chǎn)生數據報的主機。在這里,只實(shí)現了ICMP的回應請求/應答服務(wù),主要用于PING程序測試通信鏈路的暢通性,即只處理接收的報文類(lèi)型為0x08的ICMP幀,發(fā)送的ICMP報文類(lèi)型為0x00。它沒(méi)有自己專(zhuān)有的變量,涉及的函數也只有ICMPGenCheckSum()和ICMPProcPktIn()。
2.4 SX52 UDP協(xié)議的設計與實(shí)現
UDP是一個(gè)簡(jiǎn)單的面向數據報的運輸層協(xié)議:進(jìn)程的每個(gè)輸出操作都正好產(chǎn)生一個(gè)UDP數據報,并組裝成一份待發(fā)送的IP數據報。UDP不提供可靠性,它把應用程序傳給IP層的數據發(fā)送出去,但是并不保證它們能到達目的地。由于缺乏可靠性,我們似乎覺(jué)得要避免使用UDP,而使用一種可靠的協(xié)議,如TCP。但分析發(fā)現,UDP在我們的互連設計中有很多的優(yōu)點(diǎn):其一,UDP協(xié)議傳輸效率高,無(wú)須TCP通信前的連接開(kāi)銷(xiāo);第二,UDP協(xié)議簡(jiǎn)單,無(wú)須復雜的狀態(tài)機傳輸機制,可以很好地避免SX52網(wǎng)關(guān)死機復位后由于狀態(tài)不一致而無(wú)法正常通信,且上層協(xié)議又很難發(fā)現的危險。因此,可以使用UDP來(lái)實(shí)現通信(避免TCP連接的開(kāi)銷(xiāo)),而讓許多需要的特征(如動(dòng)態(tài)超和重傳、擁塞避免、查錯等)放置在應用層設計和實(shí)現。使用的變量有:
UDP接收數據報的源端口{udpRxSrcPortMSB,udpRxSrcPortLSB};
UDP接收數據報的目的端口{udpRxDestPortMSB,udpRxDestPortLSB};
UDP接收數據報的長(cháng)度{udpRxDataLenMSB,udpRxDataLenLSB};
UDP發(fā)送數據報的源端口{udpTxSrcPortMSB,udpTxSrcPortLSB};
UDP發(fā)送數據報的目的端口{udpTxDestPortMSB,udpTxDestPortLSB};
UDP發(fā)送數據報的長(cháng)度{udpTxDataLenMSB,udpTxDataLenLSB}。
設計的相關(guān)函數有:UDPAppInit(),DPGenCheckSum(),UDPStartPktOut(),UDPProcPktIn(),UDPEndPktOut(),UDPAppProcPktIn(),UDPAppProcPktOut()等。
2.5 SX52 TCP協(xié)議的設計與實(shí)現
傳輸控制協(xié)議TCP(Transmission Control Protocol)是傳輸層的重要協(xié)議。它提供一個(gè)完全可靠的(沒(méi)有數據重復或丟失)、面向連接的、全雙工的流傳輸服務(wù)。本設計中,對復雜的TCP協(xié)議做了合理的簡(jiǎn)化:①因為CAN網(wǎng)絡(luò )傳輸速度較快,數據量小且10Mbps的以太網(wǎng)傳輸一般不會(huì )發(fā)生阻塞,以太網(wǎng)上的主機也會(huì )有足夠的能力及時(shí)處理通信數據,所以可以固定超時(shí)與重傳的時(shí)間為5s。②RTL8019AS上有兩個(gè)1500字節的接收緩沖區,且CAN網(wǎng)絡(luò )為控制網(wǎng),信息量小,所以可以固定接收窗口為1400字節。③因為我們采用一般的TCP服務(wù)就可以滿(mǎn)足應用,所以可以忽略緊急指針和選項及填充字段的值。通過(guò)上述三點(diǎn)簡(jiǎn)化,實(shí)際上大大簡(jiǎn)化了TCP協(xié)議的實(shí)現。因為T(mén)CP的超時(shí)與重傳時(shí)間的確定和窗口大小的控制有著(zhù)較復雜的算法和實(shí)現機制。
它的實(shí)現變量有:tcpState,{tcpTmpSeq4,tcpTmpSeq3,tcpTmpSeq2,tcpTmpSeq1},{tcpTmpAck4,tcpTmpAck3,tcpTmpAck2,tcpTmpAck1},{tcpUnAckMSB,tcpUnAckLSB},tcpRxFlags,{tcpCheckSumMSB,tcpCheckSumLSB},{tcpLengthMSB,tcpLengthLSB},{tcpTmpMSB,TcpTmpLSB},{tcbLocalPortMSB,tcbLocalPortLSB},{tcbRemotePortMSB,tcbRemotePortLSB},{tcbSndUna4,tcbSndUna3,tcbSndUna2,tcbSndUnal},{tcbRcvNxt4,tcbRcvNxt3,tcbRcvNxt2,tcbRcvNxt1},tcbOffset,tcbFlags,{tcbSendWinMSB,tcbSendWinLSB},{tcpTimerMSB,tcpTimerLSB}等。
相關(guān)函數有:TCPIPInit(),TCPRxHeader(),TCPProcPktIn(),TCPTransmit(),TCPReTransmit(),TCPAppPassiveOpen(),TCPAppActiveOpen(),CPAppClose(),TCPAddRcvNxt(),TCPIncRcvNxt(),TCPIncSndUna(),TCPCopySeqToNxt(),TCPAckUpdate(),TCPUpdateSeq(),TCPChkSeq(),TCPRestorePrev(),TCPCmpNxtSeq(),TCPSendEmptyPkt(),TCPSendReset(),TCPSendSyn(),TCPSendISN(),TCPSendSynAck()TCPSendAck(),TCPSendFin(),TCPCheckSuminit(),CPCheckSumAcc(),TCPCheckSumAddHdr(),CPTxByte(),TCPStartPktOut(),TCPAppInit(),TCPAppTxBytes(),TCPAppTxData(),TCPAppTxDone(),TCPAppRxBytes(),TCPAppRxData(),等。
2.6 TCP和IP傳輸層協(xié)議的選擇
把TCP/IP協(xié)議應用到控制網(wǎng)絡(luò )中如何選擇傳輸層協(xié)議類(lèi)型很關(guān)鍵。如果要與現有的應用程序通信,必須使用與其相同的協(xié)議類(lèi)型。在實(shí)際應用時(shí),從可靠性來(lái)說(shuō),TCP提供了可靠的數據連接,UDP和直接訪(fǎng)問(wèn)IP的一些協(xié)議是不可靠的,數據報可能會(huì )丟失、損壞或重復;從性能上講,UDP的性能最快,可靠性、流量控制重組包和連接維護等附加開(kāi)銷(xiāo)降低了TCP的性能。對于速度比較慢的系統來(lái)說(shuō),如溫度、濕度傳感器,選擇TCP或UDP都無(wú)所謂,對于不太重要的傳感器選用UDP就可以了;對于可靠性要求較高的傳感器,應該選用TCP協(xié)議;對于實(shí)時(shí)性要求高的網(wǎng)絡(luò )設備,如網(wǎng)絡(luò )會(huì )議系統、IP音響、實(shí)時(shí)播放的電視等設備,數據傳輸率較高,應該選用UDP協(xié)議;有些有嚴格要求的同步系統應采用UDP;數據監控系統傳輸的可靠性要求較高,應采用TCP;Web和Email也應采用了TCP??傊?,要根據實(shí)際情況來(lái)確定選用何種協(xié)議。
結語(yǔ)
針對本嵌入式異構網(wǎng)絡(luò )互連方案,對TCP/IP協(xié)議棧簡(jiǎn)化設計為SX52型CAN總線(xiàn)與以太網(wǎng)互連方案,達到了測控通信系統高實(shí)時(shí)性、可靠性和嵌入式設計的要求。該互連方案很好地保證及管理監控層和生產(chǎn)測控層之間的連接,方便了上下層信息交換,能滿(mǎn)足工廠(chǎng)、變電站等工業(yè)場(chǎng)合的應用要求。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)tcp/ip相關(guān)文章:tcp/ip是什么
土壤濕度傳感器相關(guān)文章:土壤濕度傳感器原理
評論