国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 網絡通信 > 正文

TCP/IP協議棧在嵌入式異構網絡中的應用 (2)

2019-11-04 12:05:04
字體:
來源:轉載
供稿:網友

  3. SX52 ICMP協議的設計與實現
  
  為了讓互聯網中的路由器報告或提供有關意外情況的信息,在TCP/ip協議系列中加入了一個專門用于發送差錯報文的協議——互聯網控制報文協議ICMP(Internet Control Message PRotocol)。ICMP是IP的一部分在每個IP實現中都必須用到它。像其它所有的通信業務一樣,ICMP報文是放在一個IP數據報的數據部分中傳送的。ICMP報文的最終目的不是應用程序或目的機器上的用戶,而是該機上處理它的Internet協議軟件模塊。也就是說:Internet控制報文協議答應路由器向其它路由器或主機發送差錯或控制報文;ICMP在兩臺主機的Internet協議軟件之間提供通信。
  
  每個ICMP報文都以相同的3個字節開始:1個8位整數的報文類型(TYPE)字段用來識別報文,1個8位代碼(CODE)字段提供有關報文類型的進一步信息,1個16位校驗和字段。此外,ICMP報文還總是包括產生問題的數據報首部及其開頭的64位數據。
  
  ICMP使用IP來傳送每一個差錯報文。當路由器有一個ICMP報文要傳遞時,它會創建一個IP數據報并將ICMP報文封裝其中,也就是說,ICMP報文被置于IP數據報的數據區中,然后這一數據報像通常一樣被轉發。即整個數據報被封裝進幀中進行傳遞。
  
  每一個ICMP報文的產生總是對應于一個數據報。路由器將一個ICMP報文將回給產生數據報的主機。在這里,只實現了ICMP的回應請求/應答服務,主要用于PING程序測試通信鏈路的暢通性,即只處理接收的報文類型為0x08的ICMP幀,發送的ICMP報文類型為0x00。它沒有自己專有的變量,涉及的函數也只有ICMPGenCheckSum()和ICMPProcPktIn()。
  
  4. SX52 UDP協議的設計與實現
  
  UDP是一個簡單的面向數據報的運輸層協議:進程的每個輸出操作都正好產生一個UDP數據報,并組裝成一份待發送的IP數據報。UDP不提供可靠性,它把應用程序傳給IP層的數據發送出去,但是并不保證它們能到達目的地。由于缺乏可靠性,我們似乎覺得要避免使用UDP,而使用一種可靠的協議,如TCP。但分析發現,UDP在我們的互連設計中有很多的優點:其一,UDP協議傳輸效率高,無須TCP通信前的連接開銷;第二,UDP協議簡單,無須復雜的狀態機傳輸機制,可以很好地避免SX52網關死機復位后由于狀態不一致而無法正常通信,且上層協議又很難發現的危險。因此,可以使用UDP來實現通信(避免TCP連接的開銷),而讓許多需要的特征(如動態超和重傳、擁塞避免、查錯等)放置在應用層設計和實現。使用的變量有:
  
  UDP接收數據報的源端口{udpRxSrcPortMSB,udpRxSrcPortLSB};
  
  UDP接收數據報的目的端口{udpRxDestPortMSB,udpRxDestPortLSB};
  
  UDP接收數據報的長度{udpRxDataLenMSB,udpRxDataLenLSB};
  
  UDP發送數據報的源端口{udpTxSrcPortMSB,udpTxSrcPortLSB};
  
  UDP發送數據報的目的端口{udpTxDestPortMSB,udpTxDestPortLSB};
  
  UDP發送數據報的長度{udpTxDataLenMSB,udpTxDataLenLSB}。
  
  設計的相關函數有:UDPAppInit(),
  DPGenCheckSum(),
  UDPStartPktOut(),
  UDPProcPktIn(),
  UDPEndPktOut(),
  UDPAppProcPktIn(),
  UDPAppProcPktOut()等。
  
  5. SX52 TCP協議的設計與實現
  
  傳輸控制協議TCP(Transmission Control Protocol)是傳輸層的重要協議。它提供一個完全可靠的(沒有數據重復或丟失)、面向連接的、全雙工的流傳輸服務。本設計中,對復雜的TCP協議做了合理的簡化:
  
  ①因為CAN網絡傳輸速度較快,數據量小且10Mbps的以太網傳輸一般不會發生阻塞,以太網上的主機也會有足夠的能力及時處理通信數據,所以可以固定超時與重傳的時間為5s。
  
  ②RTL8019AS上有兩個1500字節的接收緩沖區,且CAN網絡為控制網,信息量小,所以可以固定接收窗口為1400字節。
  
  ③因為我們采用一般的TCP服務就可以滿足應用,所以可以忽略緊急指針和選項及填充字段的值。
  
  通過上述三點簡化,實際上大大簡化了TCP協議的實現。
  
TCP/IP協議棧在嵌入式異構網絡中的應用 (2)

  因為TCP的超時與重傳時間的確定和窗口大小的控制有著較復雜的算法和實現機制。它的實現變量有:
  
  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}等。
  
  相關函數有:
  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(),等。
  
  6. TCP和IP傳輸層協議的選擇
  
  把TCP/IP協議應用到控制網絡中如何選擇傳輸層協議類型很要害。假如要與現有的應用程序通信,必須使用與其相同的協議類型。在實際應用時,從可靠性來說,TCP提供了可靠的數據連接,UDP和直接訪問IP的一些協議是不可靠的,數據報可能會丟失、損壞或重復;從性能上講,UDP的性能最快,可靠性、流量控制重組包和連接維護等附加開銷降低了TCP的性能。
  
  對于速度比較慢的系統來說,如溫度、濕度傳感器,選擇TCP或UDP都無所謂,對于不太重要的傳感器選用UDP就可以了;對于可靠性要求較高的傳感器,應該選用TCP協議;對于實時性要求高的網絡設備,如網絡會議系統、IP音響、實時播放的電視等設備,數據傳輸率較高,應該選用UDP協議;有些有嚴格要求的同步系統應采用UDP;數據監控系統傳輸的可靠性要求較高,應采用TCP;Web和Email也應采用了TCP。總之,要根據實際情況來確定選用何種協議。
  
  四、結語
  針對本嵌入式異構網絡互連方案,對TCP/IP協議棧簡化設計為SX52型CAN總線與以太網互連方案,達到了測控通信系統高實時性、可靠性和嵌入式設計的要求。該互連方案很好地保證及治理監控層和生產測控層之間的連接,方便了上下層信息交換,能滿足工廠、變電站等工業場合的應用要求。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汉寿县| 泰和县| 仁化县| 永和县| 阳信县| 留坝县| 南安市| 海盐县| 高青县| 上犹县| 宝应县| 田林县| 广南县| 壶关县| 仙桃市| 莫力| 永昌县| 连山| 宁国市| 石狮市| 上犹县| 永靖县| 邵武市| 衡阳市| 济阳县| 恩施市| 佛山市| 千阳县| 云南省| 开封县| 昂仁县| 松滋市| 前郭尔| 昌黎县| 磐石市| 瓮安县| 武强县| 阿拉善盟| 镇远县| 布尔津县| 库伦旗|