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

发布者:芳华逝水最新更新时间:2012-05-17 来源: 单片机与嵌入式系统应用 关键字:VxWorks  以太网  网通信报文 手机看文章 扫描二维码
随时随地手机看文章

VxWorks是美国Wind River公司推出的一款专门为实时系统设计开发的操作系统内核,为程序员提供了高效的实时多任务调度、中断管理,实时的系统资源以及实时的任务间通信。它是一种功能强大而且比较复杂的操作系统,包括进程管理、存储管理、设备管理、文件系统管理、网络协议及系统应用等部分。目前VxWorks应用已经十分广泛,从数码相机、路由器到B2隐形轰炸机、火星探路者,都有它的身影。在863某交通重大专项计划控制系统国产化研究项目中,分区控制计算机(DCC)和电机控制单元(MCU)也都采用了VxWorks操作系统。在现场测试过程中,我们发现基于TCP/IP网络协议传输的数据有时会出现粘包现象(即发送方发送的若干包数据传输到接收方时粘成一包)。针对这种情况,我们进行了专题研究与实验。本文重点分析了TCP/IP协议的粘包问题,并结合实验结果提出了解决该问题的对策和方法。

1 报文粘连问题的现象及分析

1.1  报文粘连问题的现象

  TCP/IP报文粘连是指发送方发送的若干包数据,在接收方接收到时粘成一包,即后一包数据的头紧接着前一包数据的尾。由于报文长度与接收缓冲区长度有可能不成整倍数关系,所以粘连在一起的报文中有不完整的包。VxWorks操作系统会先将由网络传输来的数据放入系统接收缓冲区中,以备用户进程从中调用数据。此处假设接收方缓冲区长为L字节,L应有一定的长度,以保证至少可以存储一包数据。由于DCC和MCU之间需要传输不同种类的报文来进行数据交互,所以用户在程序中应为不同的报文分别设置不同的接收缓冲区来存放不同的报文数据。此处假设只有应答报文和状态报文两种,分别以用户缓冲区1和2来存储;长度应与用户层对应报文的长度相等,假设分别为m和n。粘包情况如图1所示。


图1  粘包情况示意图

1.2  报文粘连问题的分析

  报文粘连既可能由发送方产生,也可能由接收方产生,还可能由进行数据传输的交换机产生。

(1)  发送方引起的报文粘连
  由发送方引起的报文粘连是源于TCP协议本身。因为TCP协议为提高传输效率采用了Nagle算法(详见RFC896),发送方要等收集到1 460字节的数据才会发送一包数据,或是等到发送缓冲区满后才会发送一包数据,这就造成了报文的粘连。

(2)  接收方引起的报文粘连
  由接收方引起的报文粘连,往往是因为接收方进程没有及时处理数据造成的。接收方要先把收到的数据放入接收数据缓冲区,用户进程再从该缓冲区中读取数据。如果在下一包数据到达时前一包数据还未被用户进程取走,则新一包数据就接到前一包数据之后,而用户要根据事先设定好的缓冲区大小从系统接收缓冲区中读取数据,这就造成了一次取到了多包数据。

(3)  由交换机引起的报文粘连
  由交换机引起的报文粘连,往往是因为由交换机相连的各个部件在一段时间内发送的报文数据太多,以至于超出了交换机的处理能力。这样,本来发送端分开发送的数据报文在交换机内部的缓冲区中粘连在一起。现在,在实验现场DCC等使用VxWorks操作系统的部件需要使用一个独立的端口进行程序下载,还要有一个独立的端口提供给SecureCRT软件以进行实时监控;同时DCC与MCU和中央控制系统的数据传输也要在同一台交换机中进行。这就有可能导致在某一段时间内数据量超过了交换机的处理能力。

1.3  文粘连对系统的影响

  如果系统发生了报文粘连现象而不进行相应处理,则将导致整个系统无法正常运行。

  如果用于传输数据的报文被粘连导致无法正常处理,则将使接收方无法进行运算,现场实时的数据无法获得,从而使标志位无法置位,程序无法继续进行。如果作为生命信号的报文被粘连导致无法正常处理,则将使接收方认为发送方出现故障;若此情况连续发生,则接收方将认为发送方死机,从而停机,以保证整个系统的安全。

2  报文粘连问题的解决方法

2.1  发送方的解决方法

  对于由发送方引起的报文粘连,可以采用以下两种方法解决。

(1)  关闭Nagle算法
  由于VxWorks系统支持Windows Sockets 1.1标准,可以将setsockopt函数中的level项设置为IPPROTO_TCP1,这样就可以关闭Nagle优化算法。

(2)  将Winsock kernel buffer设置为0
  此方法只有在支持Windows Sockets 2.0标准的系统上才能使用(VxWorks不能支持),可在发送方为工控机、接收方为使用VxWorks操作系统的处理器的情况下使用。只需将 setsockopt项中的level设为SOL_SOCKET,将SO_SNDBUF值设为0。[page]

2.2  接收方的解决方法

  对于由接收方引起的报文粘连,也有两种方法解决。

(1)  提高报文处理任务的优先级
  使用VxWorks操作系统可以方便地设置任务的优先级。使用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  分包处理过程

2.3  交换机的解决方法

  对于由交换机引起的报文粘连,有3种解决方法:

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

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

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

3  结论

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

  ①  在关闭Nagle算法的情况下,发现Nagle算法依然在使用。最终的结论是,这是Winsock的一个BUG,并且已经在微软的BUG目录中得到了证实,所以此方法无效。
  ②  将Winsock kernel buffer设置为0后粘包问题得到了解决,但传输速度明显降低。经测试,每秒大概只能传送5帧数据,这在VxWorks这种硬实时系统中是无法接受的。
  ③  提高报文处理任务优先级的方法可以对报文粘连起到防治,但有可能产生一些不易发现的任务调度问题。
  ④  分包处理的方法虽然不能防止粘连的发生,但是可以完全防止报文粘连对系统产生的影响。实践证明,使用分包处理的方法可以在高速数据传输的情况下保证传输的正确性,而且不会产生任何副作用,对处理速度的影响也很小,可以忽略不计。这种方法已经在实验现场使用了很长一段时间,运行情况良好。

参考文献

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

张明(硕士)、郑伟(副教授),主要研究方向为轨道交通控制系统理论及应用、嵌入式操作系统、工业过程控制系统设计应用;
张福仲,主要研究方向为电厂热工过程自动化。

关键字:VxWorks  以太网  网通信报文 引用地址:VxWorks中以太网通信报文的粘连问题

上一篇:VxWorks系统概念妙喻
下一篇:基于Intel PXA270的Windows CE5.0下Boot Loader实现

推荐阅读最新更新时间:2024-05-02 22:04

电口以太网物理层一致性测试原理与过程
   1、 以太网物理层信号特点   以太网对应OSI七层模型的数据链路层和物理层,对应数据链路层的部分又分为逻辑链路控制子层(LLC)和介质访问控制子层(MAC)。MAC与物理层连接的接口称作介质无关接口(MII)。物理层与实际物理介质之间的接口称作介质相关接口(MDI)。在物理层中,又可以分为物理编码子层(PCS)、物理介质连接子层(PMA)、物理介质相关子层(PMD)。根据介质传输数据率的不同,以太网电接口可分为10Base-T,100Base-Tx和1000Base-T三种,分别对应10Mbps,100Mbps和1000Mbps三种速率级别。不仅是速率的差异,同时由于采用了不同的物理层编码规则而导致对应的测试和分析方案也
[测试测量]
电口<font color='red'>以太网</font>物理层一致性测试原理与过程
简化您的以太网设计,以太网PHY基础知识和选择过程
是100BASE-T1、1000BASE-T、100BASE-TX、10BASE-T还是10BASE-Te?对于那些不太精通以太网物理层(PHY)术语的人来说,评估各种类型的术语是非常难的。这些数字、符号和缩写指的是什么?什么是介质独立接口(MII)?汽车物理层和工业物理层的区别在哪?如何为网络协议摄像头、车联网控制单元和可编程逻辑控制器选择物理层?所有的物理层都满足各种现场总线要求吗? 在技术文章系列“简化您的以太网设计”的第1部分中,我们将介绍以太网物理层基础知识,帮助您选择合适的终端应用物理层。我们还将提供TI物理层选择流程图,帮助您简化物理层选择过程。 什么是以太网物理层? 实际上,基础以太网物理层非常简单:如
[网络通信]
简化您的<font color='red'>以太网</font>设计,<font color='red'>以太网</font>PHY基础知识和选择过程
如何设计便于部署的10BASE-T1L单对以太网状态监测振动传感器
由IEEE制定的新型单对以太网(SPE)或10BASE-T1L物理层标准,为传输设备运行状况信息实施状态监测(CbM)应用提供了新的连接解决方案。 SPE提供共享电源和高带宽数据架构,可通过低成本双线电缆在超过1000米的距离实现10Mbps数据和电源的共享。 ADI公司设计了业界首款10BASE-T1L MAC-PHY(ADIN1110),一款集成MAC的单对以太网收发器,它使用简单的SPI总线与嵌入式微控制器通信,可降低传感器的功耗并减少固件开发时间。 图1.10BASE-T1L单对以太网状态监测(振动)传感器原型 在本文中,将了解如何设计一款体型小巧但功能强大的传感器,如图1所示。本文将介绍: u 如何设计
[传感器]
如何设计便于部署的10BASE-T1L单对<font color='red'>以太网</font>状态监测振动传感器
工业以太网冗余原理分析及解决机制
1、引言 在一个桥接的局域网里,为了增强可靠性,必然要建立一个冗余的路径,网段会用冗余的网桥连接。但是,在一个透明桥桥接的网络里,存在冗余的路径就能建立一个桥回路,桥回路对于一个局域网是致命的。它会带来如下问题: A.广播风暴 B.同一帧的多份拷贝 C.不稳定的MAC地址表 因此,在交换网络中必须有一个机制来阻止回路。 2、生成树协议 生成树协议就是IT界中常用的机制.生成树协议是一种桥嵌套协议,在IEEE 802.1d规范里定义,可以用来消除桥回路。它的工作原理是这样的:生成树协议定义了一个数据包,叫做桥协议数据单元BPDU(Bridge Protocol Data Unit)。网桥用BPDU来相互通信,并用BPDU
[嵌入式]
为今天、明天和未来提供可靠的以太网连接
单对以太网演示器- HARTING和Belden展示现场SPE视频传输/ HARTING展示小型化IP65/67防护等级的ix Industrial®连接器 埃斯普尔坎普/纽伦堡/慕尼黑,2022年11月8日—以太网正在征服越来越多的工业应用领域。一点一点,一步一步地,它正在渗透和攻破最后的现场层的壁龛。除了实时能力外,这种发展确保了越来越多的连续性,还需要同时传输更高速率的数据和电压。与这些发展相一致,基础设施必须与市场保持同步。浩亭将在SPS 2022 (德国纽伦堡电气自动化展,以下简称SPS) 上展示工业以太网、千兆以太网和单对以太网的解决方案。为今天、明天和未来提供可靠的以太网连接。 浩亭在SPS 单对以太网(
[工业控制]
为今天、明天和未来提供可靠的<font color='red'>以太网</font>连接
全厂自动化中的以太网/IP
对于初创企业来说,以太网解决方案具有卓越的优势、能效比和设备选择自由性,这些优势全部来自其底层技术的灵活性、数十年的发展以及供应商群体的成熟度。 在本部分,我们将看看EtherNet/IP®,并考察如何在全厂自动化和控制系统中实施EtherNet/IP®。该标准以以太网为基础,基本兼容现有基础设施,这使其成为提升工厂性能、优化成本控制的绝佳选择。 思科与罗克韦尔自动化有限公司(Rockwell Automation)在2011年联合发布的一份出版物中解释道,“在竞争激烈的制造环境中,要实现必要的灵活性、可见性和效率,采用开放式行业标准网络技术的单一系统架构显得至关重要。” EtherNet/IP 是自动化的
[网络通信]
以太网标准与驱动系统设计
  因为多种原因,工业以太网已成为工厂自动化的主流技术。而没有引起同样重视的是,需要在供应商系统中实现这一通信技术。本文从工厂自动化供应商开发从机系统的角度出发,介绍实现工业以太网的各种选择,例如I/O模块和驱动等从机系统。   这些OEM面临的难题可以从查看机系统体系结构开始。供应商并非针对某一协议来设计从机系统,而必须支持可以在工厂中实现的任何标准,不能指定某一种协议,因此系统必须适应任何一种协议。   开发的从机协议新标准也有独特的硬件特性,它们不能使用标准MAC实现。这些都直接影响对实现平台的选择。   以太网简介   一开始,以太网——10 Mbps最初的以太网、100 Mbps的快速以太网,以及1 Gbps的千兆以太网
[嵌入式]
贸泽备货Analog Devices ADIN2111长距离以太网交换机助力工业自动化
2022年7月1日 – 专注于引入新品的全球半导体和电子元器件授权分销商贸泽电子 (Mouser Electronics) 即日起备货Analog Devices (ADI) 的ADIN2111双端口以太网交换机。Analog Devices不断扩大其10BASE-T1L单对以太网解决方案产品组合,推出 ADIN2111为10BASE-T1L线路、环形和菊花链网络提供完整的单芯片解决方案 。与分立式解决方案相比,这些交换机的功耗降低高达 50% ,占板空间减少高达 75% 。ADIN2111交换机还增加了适用于控制器、传感器和执行器的长距离以太网连接,可帮助实现更高效且可持续的楼宇管理。 贸泽电子供应的Analog De
[网络通信]
贸泽备货Analog Devices ADIN2111长距离<font color='red'>以太网</font>交换机助力工业自动化
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved