尹然然
(安徽交通职业技术学院,安徽 合肥 230051)
嵌入式系统中RUDP协议的研究与设计
尹然然
(安徽交通职业技术学院,安徽 合肥 230051)
嵌入式系统设备之间通常使用传统传输协议TCP或UDP进行数据通信,然而TCP传输延迟较大,UDP可靠性较低.本文研究设计了一种更适合嵌入式可靠传输的协议——可靠用户数据报协议RUDP,并对基于RUDP的嵌入式系统中可靠数据传递的实现原理和实现方法进行了分析和介绍.
嵌入式系统;RUDP协议;TCP协议;UDP协议
嵌入式系统是以计算机技术为基础,实际应用为中心,软硬件可裁剪,适应应用系统对成本、功能、功耗、可靠性有严格要求的专用计算机系统[1].在嵌入式系统中,通常包含多种设备,怎样能够实现设备之间可靠、高效的数据通信,成为大家研究的热点问题.传统的传输协议都无法同时满足嵌入式系统实时性和可靠性的要求.本文在传统传输协议UDP的基础上,针对嵌入式系统设备特点设计了一种协议——可靠用户数据报协议RUDP.RUDP协议弥补了UDP可靠性方面的不足,又吸取了TCP的部分优点.RUDP的设计相对灵活,便于它在多种系统中使用.
近年来,以太网/互联网架构成为嵌入式系统通信的主流,取代了传统的通信方式.随着嵌入式终端的大量应用和控制节点的不断增多,网络的负荷不断增大.如何解决基于网络通信的嵌入式分布系统中设备间可靠、高效的通信问题,就显得尤为重要.
传统的嵌入式系统传输层一般采用传输控制协议TCP或者UDP[2].TCP协议是面向连接的传输协议,实时性比较差;UDP协议是非面向连接的协议,无法保证数据的可靠传输.因此,要实现可靠、实时的嵌入式系统通信用它们是不合适的.
为解决上述嵌入式系统网络通信中的问题,一种可行的方法就是在传输层以上改进当前已有协议.在嵌入式系统中,既能实现数据传输的即时性又能保证可靠性.
2.1 嵌入式系统概念
北京航空航天大学何立民教授对嵌入式系统这样定义:“嵌入到对象体系中的专用计算机系统”.
2.2 嵌入式系统组成
嵌入式系统一般由嵌入式计算机系统和执行装置组成.
2.3 嵌入式系统应用领域
嵌入式系统具有非常广阔的应用前景,其应用领域主要包括:工业控制、信息家电、交通管理、家庭智能管理系统、POS网络及电子商务等.
嵌入式系统通常使用的以太网协议是IEEE 802.3标准.从硬件角度看来,以太网接口电路主要由MAC控制器和物理层接口(Physical Layer,PHY)两部分组成.网络通信模型层间结构如图1所示.
图1 网络通信模型层间结构
虽然以太网的传输速率在不断提高,但网络负荷也在不断增大,传统的通信方式也会越来越吃力.嵌入式系统中如果采用TCP协议,当设备间建立TCP连接并发送数据后,出错后大量的重传数据必定大大增加了网络的拥塞程度,进而影响数据的实时传输[3].嵌入式设备之间数据通信的信息量较小,使用UDP协议虽然能够提高信息的传输速率,但传输中往往会造成数据包的丢失.
为解决上述问题,一种可行的方法就是在传输层以上选择和改进现有的协议.因此,本文在UDP协议基础上增加了保证数据可靠传递的必要功能,设计了一个基于简单分组的可靠传输协议RUDP.RUDP以RFCll.1和RFC 908为理论基础,结合了TCP和UDP的优点,是一种新型的传输层协议.
如图2所示为远程控制终端和嵌入式系统通信模式,描述了嵌入式Web服务器和远程控制终端Web浏览器之间的数据通信.两者之间通过远控 ternet通信,采用基于RUDP的数据传输可以同时实现嵌入式系统对实时性和可靠性的要求,克服了传统传输协议的诸多弊端.
图2 远程控制终端和嵌入式系统通信模式
3.1 RUDP的体系结构
RUDP协议软件模块采用UDP协议承载,提供可靠的通信功能.按照计算机网络层次体系的概念,RUDP协议的层次模型是在UDP/IP协议的传输层和应用层之间加入了RUDP子层.层次结构如图3所示:
图3 层次结构
RUDP层的主要功能是保证数据的可靠传输.嵌入式设备通过网络进行消息的传输,在这样一个公共的环境中,大量无用的信息被接收,对这些数据的解析将极大地增加设备的负担.针对这一问题,我们在RUDP层增加了一个标志位,可以让设备迅速判断出所接收的数据包是否有效.该层中还增加了一系列其他控制位以保证嵌入式设备之间数据传输的可靠性.
3.2 RUDP的功能
嵌入式可靠传输模型RUDP主要功能有:
(1)基于消息的收发功能:RUDP的传输层利用基于消息的传输协议,所以只需知道接收端能否接收数据而不必考虑可以接收多少.
(2)校验和:采用UDP的校验功能,保证数据包的正确和顺序到达.
(3)丢弃重复包和保存失序包的功能:对收到的数据包进行确认,丢弃确认过的重复包,保存未确认的数据包[4].
(4)超时重发功能:RUDP中借鉴TCP中的超时重发机制来保证数据包的可靠传递.
3.3 RUDP协议报头设计
由于RUDP是承载在UDP之上的,因此它的数据传输仍然是通过UDP的套接字进行的.RUDP数据报的封装如图4所示:
图4 RUP数据报的封装
表1给出了RUDP的报文格式,主要包括了用于标记消息类型的控制字段、序号字段、确认号字段等.
表1 RUDP报文头设计
3.4 RUDP协议工作过程
RUDP协议的工作过程是:
3.4.1 )建立虚连接
RUDP包被封装在UDP包里发送.RUDP协议的连接过程和TCP很相似,但它们有本质区别.这里的连接叫做“虚连接”.所谓虚连接就是这条连接并不用来传输数据而只用来表明数据传输是否可达.
通过三次握手的方式,发送方和接收方建立虚连接(过程如图5所示).
需要说明的是:如果双方同时发起连接请求,则比较双方IP地址大小,允许IP地址大的一方发起的连接请求.通信双方连接一旦建立,将不接受任何的连接请求.
3.4.2 数据发送
发送方发送数据,接收方接收数据并处理.接收方从序号缓存中删除正确接收到的报文序号,并发回确认信息.其工作过程如图6所示:
图5 RUDP三次握手
图6 数据报传输过程
3.4.3 拆除连接
当接收方成功接收所有数据之后,发送方将发出一个连接拆除请求.拆除连接的过程如图7所示:
图7 连接拆除过程
3.5 RUDP协议的实现
3.5.1 UDP层实现
利用winsock的配置,将网络类型设置为AF_Ik配 T,将传输方式设置为SOCK_DCKAM,即为UDP传输协议.将winsock绑定到如上设置,用sendto和d ceivefe m函数发送和获取数据包,实现了UDP包的发送和接收.
3.5.2 RUDP层实现
RUDP编程模型如图8所示:
图8 编程模型结构图
图8中方法具体说明如下:
定义RUDP类,私有成员为socket号,提供方法:
(1)rudp_odpn(),封装winsock的socket函数,绑定网络类型为AF_I 数绑 T和数据传输类型,SOCK_DCKAM,即指定了最后为UDP传输;
(2)rud p_bdpd(),将socket绑定到某一端口;
(3)rud p_sdpd(char*,int,sockaddr_in*,_ ort*, short*),发送端发送数据;
(4)rud p_rdpeive(char*,int,sockaddr_in*,_ ort, short),接收端接收数据;
(5)rud p_cdpse(),关闭socket.
在图8所示的编程模型结构图中,Sending()只是发送连接请求的特殊报文没有实际数据的发送.Send()才是实际数据的发送.Receive()前一次是响应发送方的连接请求,传输的报文也是进行连接的特殊报文.后一次用来接收发送方发来的实际.由于RUDP封装在UDP内部,因此这些报文从表面上看来仍然是UDP报文.
3.5.3 应用层实现
(1)发送端
定义滑动窗口大小为固定值.
发送线程:
步骤一:当滑动窗口大小大于0,调用rudp_sdpd()发送递增的顺序号的包,并将包缓存.每发送一个包,窗口大小减一;
步骤二:当滑动窗口为0时,停等一个时间间隔,如果接收线程没有改变窗口大小,则重置顺序号为缓存中最小的顺序号,窗口大小增一,重复步骤一.
接收线程:
获取接收端的响应ACK包,检查顺序号,如果顺序号为发送缓存中最小的顺序号,则表示最前面的包被服务器收到,则将缓存中该序号的包丢弃,窗口大小增一.
(2)接收端
不停的监听某一端口上的数据包,收到数据包后,调用rudp_rdpeive()解包并打印数据包的内容,获取顺序号.然后按顺序号传入rudp_sdpd(),打包发送确认包给发送端某一固定端口;
本文描述了嵌入式系统的概念及特点,针对嵌入式系统的特殊要求引入了RUDP协议.介绍了RUDP协议的体系结构、工作原理和基本功能.用C#设计实现了RUDP通信软件.它是承载在UDP协议之上的,相对于UDP协议增加了相关机制提高传输的可靠性.RUDP协议采用类似TCP的技术在数据传输之前建立好连接,并增加相应控制机制进行流量控制,实现通信双方的可靠数据交互.
〔1〕许海燕,付炎.嵌入式系统技术与应用[M].机械工业出版社,2002.
〔2〕[美]W.Richard Stevens.TCP/IP详解[M].北京:机械工业出版社,2004.1~200.
〔3〕James F.Kurose Keith W.Ross,等.计算机网络自顶向下方法.北京:机械工业出版社,2008.12,149~154.
〔4〕芦东昕,张华强,王陈.基于UDP的可靠数据传递技术研究[J].计算机工程,2003,29(22):62~63.
TP 316
A
1673-260X(2013)02-0032-03
《基于支持智能交通系统的无线传感器网络技术的研究》(2011SQRL184)