<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與嵌入式系統應用 收藏
  2.2 接收方的解決方法
  
  對于由接收方引起的報文粘連,也有兩種方法解決。

 ?。?) 提高報文處理任務(wù)的優(yōu)先級

  使用操作系統可以方便地設置任務(wù)的優(yōu)先級。使用taskSpawn函數啟動(dòng)任務(wù),其中priority的數值就是任務(wù)的優(yōu)先級(從0~255,優(yōu)先級依次降低)。使用此函數將處理報文任務(wù)的優(yōu)先級設為比其他任務(wù)高,但是為了減小意外發(fā)生的可能,該值應小于100,因為taskSpawn的默認優(yōu)先級為100。
  
 ?。?) 將粘連在一起的報文進(jìn)行分包處理

  此方法是規定報文數據某一位的內容為該幀報文數據的總長(cháng)度,接收方先提取出此內容,如果緩沖區中的數據長(cháng)度大于等于該長(cháng)度,則按該內容的長(cháng)度從緩沖區中提取數據;如果長(cháng)度不夠則不提取數據,等到長(cháng)度達到要求時(shí)再提取數據。這樣即使出現報文粘連現象,應用程序也會(huì )將粘連在一起的數據進(jìn)行分包處理,不會(huì )出現數據丟失無(wú)法識別報文ID的情況。下面通過(guò)一個(gè)具體例子進(jìn)行詳細說(shuō)明。

  在實(shí)驗線(xiàn)上MCU發(fā)送給DCC的狀態(tài)報文長(cháng)度為84字節(報文ID為91H),應答報文長(cháng)度為20字節(報文ID為81H),接收緩沖區為90字節。如果狀態(tài)報文粘連在應答報文之后,則將使DCC無(wú)法收到完整的狀態(tài)報文。這種情況連續發(fā)生3次之后,DCC將認為任務(wù)MCU發(fā)生故障,系統將停機,因而結果必然是錯誤的。如果將報文長(cháng)度放在報文的第一位中,報文ID放在第二位中,則進(jìn)行分包處理后就不會(huì )出現上述的診斷錯誤。處理過(guò)程如圖2所示。
 


圖2 分包處理過(guò)程

本文引用地址:http://dyxdggzs.com/article/84902.htm
  2.3 交換機的解決方法
  
  對于由交換機引起的報文粘連,有3種解決方法:

 ?。?) 使用有更強處理能力的交換機

  可使用處理能力更強、擁有較大緩存空間的交換機??墒悄壳皩?shí)驗現場(chǎng)已經(jīng)使用了某外國著(zhù)名廠(chǎng)商的16口交換機,且該交換機有1MB的緩存空間,使用更高檔的交換機無(wú)疑會(huì )使成本增高。

 ?。?) 增加交換機數量

  可將1臺16口交換機的工作量交由2臺8口交換機來(lái)完成,再將這兩臺交換機進(jìn)行連接。這種方法可以明顯降低一臺交換機的數據處理負擔,但會(huì )使系統的可靠性和安全性指標大幅度降級;而且隨著(zhù)以后實(shí)驗設備的增加,不斷連接新交換機的方法有可能使網(wǎng)絡(luò )形成環(huán)路,這將造成網(wǎng)絡(luò )癱瘓。所以,不建議使用此方法。

 ?。?) 修改對交換機的配置

  可通過(guò)修改相關(guān)參數將交換機數據傳輸方式設置為無(wú)等待傳輸,即在交換機得到數據后不放入內部緩沖區,而是直接交給接收方。這種方式在一定程度上可以避免現象的發(fā)生,但當報文傳輸很緊密時(shí)也有繼續產(chǎn)生現象的可能。

  3 結論

  通過(guò)對發(fā)送方和接收方4種解決方法的現場(chǎng)實(shí)驗,我們發(fā)現效果不盡相同。

 ?、?在關(guān)閉Nagle算法的情況下,發(fā)現Nagle算法依然在使用。最終的結論是,這是Winsock的一個(gè)BUG,并且已經(jīng)在微軟的BUG目錄中得到了證實(shí),所以此方法無(wú)效。

 ?、?將Winsock kernel buffer設置為0后問(wèn)題得到了解決,但傳輸速度明顯降低。經(jīng)測試,每秒大概只能傳送5幀數據,這在這種硬實(shí)時(shí)系統中是無(wú)法接受的。

 ?、?提高報文處理任務(wù)優(yōu)先級的方法可以對報文粘連起到防治,但有可能產(chǎn)生一些不易發(fā)現的任務(wù)調度問(wèn)題。

 ?、?分包處理的方法雖然不能防止粘連的發(fā)生,但是可以完全防止報文粘連對系統產(chǎn)生的影響。實(shí)踐證明,使用分包處理的方法可以在高速數據傳輸的情況下保證傳輸的正確性,而且不會(huì )產(chǎn)生任何副作用,對處理速度的影響也很小,可以忽略不計。這種方法已經(jīng)在實(shí)驗現場(chǎng)使用了很長(cháng)一段時(shí)間,運行情況良好。

  參考文獻

  [1] Nagle J. Congestion Control in IP/TCP Internet works[S]. RFC896,1984.
  [2] 陳智育,溫彥軍,陳琪.程序開(kāi)發(fā)實(shí)踐[M].北京:人民郵電出版社,2004.
  [3] 鄺堅.Tornado/VxWorks入門(mén)與提高[M].北京:科學(xué)出版社,2004.
  [4] WindRiver. VxWorks for PowerPC Architecture Reference 5.5,2003.

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>