APP下载

嵌入式系统中UDP协议可靠数据传输的实现*

2011-01-10方娇莉

云南开放大学学报 2011年2期
关键词:缓冲区实时性序号

方娇莉,刘 明

(昆明理工大学计算中心,云南昆明650093)

一、概述

在嵌入式系统的通信中,一般采用232或485方式进行通信。近年来,为了兼容性与扩展性的考虑,多数嵌入式系统设计中,已经逐步开始采用了IP协议模块进行通信。一般在嵌入式系统中,通信的特点是:数据传输量少,而响应速度要求高。传输层协议中的UDP协议使用尽最大努力交付的特性能够满足数据高速传输的要求,但不能保证数据传输的可靠性。目前,对UDP协议的可靠性应用设计已有一些探讨和论述,[1]大多却设计过于复杂而不适合嵌入式系统。在嵌入式系统中,由于内存小,处理性能有限,对实现的算法要求简捷、高效。这里主要针对嵌入式系统的特点,提出了一系列有效的算法,实现了嵌入式系统中数据的可靠传输。

二、UDP协议分析

在Internet协议族的传输层中,有两种协议:TCP和UDP。TCP协议是可靠的传输协议,但开销较大,尤其在建立和释放连接时需要多次应答,会带来较大的传输延时,很难满足实时性要求较高的嵌入式系统的需求。UDP协议是一种无连接的协议,即发送数据时不需要建立连接,不保证数据的可靠传输。因此UDP协议传输速率高,同时无需像TCP协议那样维护连接状态表,而系统开销较小,比较适合于在嵌入式系统中使用。在网络质量比较高(如:局域网或光纤网络)的通信环境中,直接使用标准UDP协议进行通信,可以保证数据的正常传输。而在通信质量不太高的网络(如:Internet因特网),大量的测试表明,丢包率往往会达到30%以上,而不能保证系统的正常运行。因此,如果采用标准UDP协议进行通信,必须加入可靠性控制,建立基于UDP协议的可靠传输协议(RUDP)。也可以说,在应用层对UDP数据报进行可靠性控制。

三、可靠性设计与实现

通常在传输协议实现要素上,[2]包括:连接管理、流量控制与缓冲、多路复用、确认技术、出错重传等。如果在RUDP的实现中,将流量控制、连接管理、确认及出错重传等机制全都考虑进去的话似乎成了另外的一种TCP协议,[3]很难达到减少系统开销,提高实时性而满足嵌入式系统开发的需求,也失去了RUDP设计与实现的意义。考虑到嵌入式系统的特点:实时性要求高和数据传输量小。在设计上不考虑连接管理,主要考虑数据确认技术、出错重传机制、缓冲区管理的实现以及简单的流量控制,以期提高可靠性的同时,能够保证系统的实时性。在嵌入式系统中,网络体系结构如图1所示,UDP可靠性应用协议(RUDP)工作在应用层(也可以看做是一个独立的层次)。对应网络层次结构,数据分组形成嵌套层次。

(一)数据分组。

数据分组分为两种类型:数据报文和应答报文。数据报文为上层业务功能模块提供有效的数据,应答报文仅用于接收到数据报文时进行应答。这两种数据分组,从嵌套层次来看,都是UDP数据报的净荷。格式如图2所示,数据分组由首字节+数据构成。首字节的首位为标记位,标记位为0表示数据报文;标记位为1表示应答报文。首字节的后7位为序号,序号仅取7位,取值范围为0~127。序号主要是考虑到嵌入式系统的内存较小,不能缓存过多的数据。如果系统内存开销允许的情况下,可以适当增加序号的位数,以便能缓存更大的数据。

(二)数据发送缓冲区管理。

确认技术是提高可靠性的重要机制。在TCP协议中使用了多种确认技术,但都会导致较大的系统开销和延时而不适合于嵌入式系统中使用。停止等待协议比较简单,易于实现,但执行效率将会是很低,[3]延时较大。为提高实时性,提高传输速度,不必等待一个数据报文发送成功后,再发送下一个数据报文,就需要设置缓冲区。在嵌入式系统中,为尽量节省内存,缓冲区管理方面,只考虑发送缓冲区的管理。缓冲区管理是实现数据可靠传输的关键。缓冲区的大小由数据分组的序号确定,这里使用首字节的的7位序号,缓冲区的最大值为128,即最大能缓存128个数据分组。使用循环数组结构,形成一个环形队列。数据分组的序号同时也对应着数据在缓冲区中的位置,其基本结构图3所示。发送缓冲区管理的核心就是缓冲区释放与分配,集中体现在序号的管理,接下来将详细论述实现的流程。

(三)数据发送的实现。

如果有数据要发送,必须先获得一个空闲的存储空间的序号,将数据放入对应的缓冲区队列中。如图4所示,定时器中断后即检查缓冲区中是否有待发数据。而在发送过程中,发送次数和发送计时器是发送设计中的关键。发送计时器管理同一个数据报上次发送和当次发送的时间间隔,这个时间间隔不能小于某一设定值。这样做的目的是为了让接收方来得及处理和接收,根据发送成功率动态改变时间间隔的设定值在这种RUDP协议中可以实现简单的流量控制。其基本思想是:在发送成功率高的情况下适当减少时间间隔;发送成功率降低的情况下,适当加大时间间隔。发送次数管理,是为了避免数据无限制的发送下去,通过发送次数的管理可以及时判断网络物理连通性。

序号按顺序获取,往往在系统运行一段时间后,序号会变得不连续。序号是否连续在这一层并不重要。在嵌入式系统中,通常数据量小,一般情况下,一次传输的数据只需要一个数据报就能完成,不需要多个数据报进行组合,而更重要的是实时性。在需要多个数据分组组合的情况下,相关的处理交于上一层的应用来完成。当接收方收到数据分组后,立即向发送方发送应答分组;发送方根据应答分组的序号,释放相应的缓冲区。

(四)数据接收的实现。

数据接收相对于发送管理较简单,如图5所示。进入定时中断程序后,即检查是否有有效数据。在数据校验方面,为了避免过大的开销,仅采用UDP协议中的简单的校验和方式进行数据校验。如果需要较强的检错能力,可以在应用层来实现。接收数据流程的关键是判断应答数据报还是数据报,如果是应答数据报,表明接收方已经接收到了该序号对应的数据,则将对应的数据包从发送缓冲队列中移除。如果是数据包则交由上层应用来处理,同时向发送方发送应答数据包。

四、性能测试

测试环境的建立,可以在互联网环境中,通过运行多种通信软件模拟一个拥塞的网络环境进行测试,通过ping测试在丢包率达到30%的情况下,若采用标准的UDP协议进行传送数据,其丢包率仍然在30%左右,也就是标准UDP协议的丢包率基本和ping测试的丢包率一致的。应用这种可靠的UDP协议,重发次数设置为3,计时器重复时间间隔初始值设为300ms,可以保证数据正常的传送,丢包率为0。这种方式较大程度上提高了数据传输的可靠性,与此同时由于减少了建立和释放连接的应答次数,较TCP协议实时性也有了较大的提高。

五、结束语

本文主要介绍了一种基于RUDP思想的可靠数据传输协议的实现。这种基于UDP协议的可靠传输方法很好的解决了嵌入式系统中实时性与可靠性的要求,实现的一系列算法简捷高效,能够有效的满足嵌入式系统的性能需求。

[1]Bova.T Krivoruchka.Reliable UDP Protocol.draft- ietfsigtran -reliable-udp-00.txt.Cisco Systems,1999 -02.

[2]Andrew S.Tanenbaum.Computer Networks.北京:清华大学出版社,2008.

[3]谢希仁.计算机网络[M].北京:电子工业出版社,2008.

[4]芦东昕,张华强,王陈.基于UDP的可靠数据传递技术研究[J].计算机工程,2003,(22):62-63.

猜你喜欢

缓冲区实时性序号
缓冲区溢出漏洞攻击及其对策探析
计算机控制系统实时性的提高策略
可编程控制器的实时处理器的研究
技术指标选股
技术指标选股
技术指标选股
技术指标选股
基于B/S的实时用户行为检测管理系统设计与实现
初涉缓冲区
本期导读