新闻中心

EEPW首页 > 网络与存储 > 设计应用 > VxWorks中以太网通信报文的粘连问题

VxWorks中以太网通信报文的粘连问题

作者:北京交通大学 张明 郑伟 陕西国华锦界能源有限公司 张福仲时间:2008-06-27来源:单片机与嵌入式系统应用收藏
  2.2 接收方的解决方法
  
  对于由接收方引起的报文粘连,也有两种方法解决。

  (1) 提高报文处理任务的优先级

  使用操作系统可以方便地设置任务的优先级。使用taskSpawn函数启动任务,其中priority的数值就是任务的优先级(从0~255,优先级依次降低)。使用此函数将处理报文任务的优先级设为比其他任务高,但是为了减小意外发生的可能,该值应小于100,因为taskSpawn的默认优先级为100。
  
  (2) 将粘连在一起的报文进行分包处理

  此方法是规定报文数据某一位的内容为该帧报文数据的总长度,接收方先提取出此内容,如果缓冲区中的数据长度大于等于该长度,则按该内容的长度从缓冲区中提取数据;如果长度不够则不提取数据,等到长度达到要求时再提取数据。这样即使出现报文粘连现象,应用程序也会将粘连在一起的数据进行分包处理,不会出现数据丢失无法识别报文ID的情况。下面通过一个具体例子进行详细说明。

  在实验线上MCU发送给DCC的状态报文长度为84字节(报文ID为91H),应答报文长度为20字节(报文ID为81H),接收缓冲区为90字节。如果状态报文粘连在应答报文之后,则将使DCC无法收到完整的状态报文。这种情况连续发生3次之后,DCC将认为任务MCU发生故障,系统将停机,因而结果必然是错误的。如果将报文长度放在报文的第一位中,报文ID放在第二位中,则进行分包处理后就不会出现上述的诊断错误。处理过程如图2所示。
 


图2 分包处理过程

本文引用地址:http://www.eepw.com.cn/article/84902.htm
  2.3 交换机的解决方法
  
  对于由交换机引起的报文粘连,有3种解决方法:

  (1) 使用有更强处理能力的交换机

  可使用处理能力更强、拥有较大缓存空间的交换机。可是目前实验现场已经使用了某外国著名厂商的16口交换机,且该交换机有1MB的缓存空间,使用更高档的交换机无疑会使成本增高。

  (2) 增加交换机数量

  可将1台16口交换机的工作量交由2台8口交换机来完成,再将这两台交换机进行连接。这种方法可以明显降低一台交换机的数据处理负担,但会使系统的可靠性和安全性指标大幅度降级;而且随着以后实验设备的增加,不断连接新交换机的方法有可能使网络形成环路,这将造成网络瘫痪。所以,不建议使用此方法。

  (3) 修改对交换机的配置

  可通过修改相关参数将交换机数据传输方式设置为无等待传输,即在交换机得到数据后不放入内部缓冲区,而是直接交给接收方。这种方式在一定程度上可以避免现象的发生,但当报文传输很紧密时也有继续产生现象的可能。

  3 结论

  通过对发送方和接收方4种解决方法的现场实验,我们发现效果不尽相同。

  ① 在关闭Nagle算法的情况下,发现Nagle算法依然在使用。最终的结论是,这是Winsock的一个BUG,并且已经在微软的BUG目录中得到了证实,所以此方法无效。

  ② 将Winsock kernel buffer设置为0后问题得到了解决,但传输速度明显降低。经测试,每秒大概只能传送5帧数据,这在这种硬实时系统中是无法接受的。

  ③ 提高报文处理任务优先级的方法可以对报文粘连起到防治,但有可能产生一些不易发现的任务调度问题。

  ④ 分包处理的方法虽然不能防止粘连的发生,但是可以完全防止报文粘连对系统产生的影响。实践证明,使用分包处理的方法可以在高速数据传输的情况下保证传输的正确性,而且不会产生任何副作用,对处理速度的影响也很小,可以忽略不计。这种方法已经在实验现场使用了很长一段时间,运行情况良好。

  参考文献

  [1] Nagle J. Congestion Control in IP/TCP Internet works[S]. RFC896,1984.
  [2] 陈智育,温彦军,陈琪.程序开发实践[M].北京:人民邮电出版社,2004.
  [3] 邝坚.Tornado/VxWorks入门与提高[M].北京:科学出版社,2004.
  [4] WindRiver. VxWorks for PowerPC Architecture Reference 5.5,2003.

tcp/ip相关文章:tcp/ip是什么



上一页 1 2 下一页

评论


相关推荐

技术专区

关闭