<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 網(wǎng)絡(luò )與存儲 > 設計應用 > VxWorks中以太網(wǎng)通信報文的粘連問(wèn)題

VxWorks中以太網(wǎng)通信報文的粘連問(wèn)題

作者:北京交通大學(xué) 張明 鄭偉 陜西國華錦界能源有限公司 張福仲 時(shí)間:2008-06-27 來(lái)源:?jiǎn)纹瑱C與嵌入式系統應用 收藏

  是美國Wind River公司推出的一款專(zhuān)門(mén)為實(shí)時(shí)系統設計開(kāi)發(fā)的操作系統內核,為程序員提供了高效的實(shí)時(shí)多任務(wù)調度、中斷管理,實(shí)時(shí)的系統資源以及實(shí)時(shí)的任務(wù)間通信。它是一種功能強大而且比較復雜的操作系統,包括進(jìn)程管理、存儲管理、設備管理、文件系統管理、網(wǎng)絡(luò )協(xié)議及系統應用等部分。目前應用已經(jīng)十分廣泛,從數碼相機、路由器到B2隱形轟炸機、火星探路者,都有它的身影。在863某交通重大專(zhuān)項計劃控制系統國產(chǎn)化研究項目中,分區控制計算機(DCC)和電機控制單元(MCU)也都采用了操作系統。在現場(chǎng)測試過(guò)程中,我們發(fā)現基于TCP/IP網(wǎng)絡(luò )協(xié)議傳輸的數據有時(shí)會(huì )出現現象(即發(fā)送方發(fā)送的若干包數據傳輸到接收方時(shí)粘成一包)。針對這種情況,我們進(jìn)行了專(zhuān)題研究與實(shí)驗。本文重點(diǎn)分析了問(wèn)題,并結合實(shí)驗結果提出了解決該問(wèn)題的對策和方法。

本文引用地址:http://dyxdggzs.com/article/84902.htm

  1 報文粘連問(wèn)題的現象及分析

  1.1 報文粘連問(wèn)題的現象

  TCP/IP報文粘連是指發(fā)送方發(fā)送的若干包數據,在接收方接收到時(shí)粘成一包,即后一包數據的頭緊接著(zhù)前一包數據的尾。由于報文長(cháng)度與接收緩沖區長(cháng)度有可能不成整倍數關(guān)系,所以粘連在一起的報文中有不完整的包。VxWorks操作系統會(huì )先將由網(wǎng)絡(luò )傳輸來(lái)的數據放入系統接收緩沖區中,以備用戶(hù)進(jìn)程從中調用數據。此處假設接收方緩沖區長(cháng)為L(cháng)字節,L應有一定的長(cháng)度,以保證至少可以存儲一包數據。由于DCC和MCU之間需要傳輸不同種類(lèi)的報文來(lái)進(jìn)行數據交互,所以用戶(hù)在程序中應為不同的報文分別設置不同的接收緩沖區來(lái)存放不同的報文數據。此處假設只有應答報文和狀態(tài)報文兩種,分別以用戶(hù)緩沖區1和2來(lái)存儲;長(cháng)度應與用戶(hù)層對應報文的長(cháng)度相等,假設分別為m和n。情況如圖1所示。


圖1 粘包情況示意圖

  1.2 報文粘連問(wèn)題的分析

  報文粘連既可能由發(fā)送方產(chǎn)生,也可能由接收方產(chǎn)生,還可能由進(jìn)行數據傳輸的交換機產(chǎn)生。

  (1) 發(fā)送方引起的報文粘連

  由發(fā)送方引起的報文粘連是源于TCP協(xié)議本身。因為T(mén)CP協(xié)議為提高傳輸效率采用了Nagle算法(詳見(jiàn)RFC896),發(fā)送方要等收集到1460字節的數據才會(huì )發(fā)送一包數據,或是等到發(fā)送緩沖區滿(mǎn)后才會(huì )發(fā)送一包數據,這就造成了報文的粘連。

  (2) 接收方引起的報文粘連

  由接收方引起的報文粘連,往往是因為接收方進(jìn)程沒(méi)有及時(shí)處理數據造成的。接收方要先把收到的數據放入接收數據緩沖區,用戶(hù)進(jìn)程再從該緩沖區中讀取數據。如果在下一包數據到達時(shí)前一包數據還未被用戶(hù)進(jìn)程取走,則新一包數據就接到前一包數據之后,而用戶(hù)要根據事先設定好的緩沖區大小從系統接收緩沖區中讀取數據,這就造成了一次取到了多包數據。

  (3) 由交換機引起的報文粘連

  由交換機引起的報文粘連,往往是因為由交換機相連的各個(gè)部件在一段時(shí)間內發(fā)送的報文數據太多,以至于超出了交換機的處理能力。這樣,本來(lái)發(fā)送端分開(kāi)發(fā)送的數據報文在交換機內部的緩沖區中粘連在一起?,F在,在實(shí)驗現場(chǎng)DCC等使用VxWorks操作系統的部件需要使用一個(gè)獨立的端口進(jìn)行程序下載,還要有一個(gè)獨立的端口提供給SecureCRT軟件以進(jìn)行實(shí)時(shí)監控;同時(shí)DCC與MCU和中央控制系統的數據傳輸也要在同一臺交換機中進(jìn)行。這就有可能導致在某一段時(shí)間內數據量超過(guò)了交換機的處理能力。

  1.3 文粘連對系統的影響

  如果系統發(fā)生了報文粘連現象而不進(jìn)行相應處理,則將導致整個(gè)系統無(wú)法正常運行。

  如果用于傳輸數據的報文被粘連導致無(wú)法正常處理,則將使接收方無(wú)法進(jìn)行運算,現場(chǎng)實(shí)時(shí)的數據無(wú)法獲得,從而使標志位無(wú)法置位,程序無(wú)法繼續進(jìn)行。如果作為生命信號的報文被粘連導致無(wú)法正常處理,則將使接收方認為發(fā)送方出現故障;若此情況連續發(fā)生,則接收方將認為發(fā)送方死機,從而停機,以保證整個(gè)系統的安全。

  2 報文粘連問(wèn)題的解決方法

  2.1 發(fā)送方的解決方法

  對于由發(fā)送方引起的報文粘連,可以采用以下兩種方法解決。

 ?。?) 關(guān)閉Nagle算法

  由于VxWorks系統支持Windows Sockets 1.1標準,可以將setsockopt函數中的level項設置為IPPROTO_TCP1,這樣就可以關(guān)閉Nagle優(yōu)化算法。

 ?。?) 將Winsock kernel buffer設置為0

  此方法只有在支持Windows Sockets 2.0標準的系統上才能使用(VxWorks不能支持),可在發(fā)送方為工控機、接收方為使用VxWorks操作系統的處理器的情況下使用。只需將setsockopt項中的level設為SOL_SOCKET,將SO_SNDBUF值設為0。

tcp/ip相關(guān)文章:tcp/ip是什么



上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>