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