APP下载

基于改进代码分发协议的远程代码更新技术研究∗

2017-10-16

计算机与数字工程 2017年9期
关键词:关节点代码消息

高 菲

基于改进代码分发协议的远程代码更新技术研究∗

高 菲

(宝鸡职业技术学院 宝鸡 721000)

首先对经典的代码分发协议进行改进,控制信息使用Trickle协议进行维护,用于通知整个网络当前分发的版本信息,利用广播的形式分发数据,使通信范围内所有节点都能接收到数据。之后,设计远程代码更新系统,将系统分为三个部分,分别为上位机、网关节点以及传感器节点。重点设计具有代码更新功能的传感器节点的软件,将节点的存储空间分为引导部分和程序部分,利用不同的存储器映射进行版本切换。实验结果表明系统能够成功完成远程代码更新;能够同时更新多个节点,能够支持多跳的更新,在发生丢包的情况下,能对丢失数据进行请求,保证传输代码的完整性。

无线传感器网络;远程代码更新;数据分发;代码分发

AbstractThis paper aims at improving the classic code distribution agreement,controlling information by the Trickle proto⁃col for maintenance and version information for the entire network current distributing,through broadcast in the form of a distributed data,which makes communication within the scope of all nodes receiving the data possible.After the remote code update system de⁃sign,the system is divided into three parts,respectively for PC,the gateway node and sensor node.The key design is softwear which has the function of code updating of sensor nodes.The nodes of the storage space is divided into guiding parts and procedures,using different memory mapping to switch from the version.Experimental results show that the system can successfully complete re⁃mote code updates,and it can update multiple nodes at the same time,can support multiple hops update.In the event of a lost pack⁃age,it can also request data loss to ensure the integrity of the transmission code.

Key W ord wireless sensor network,code update,data distribution,code distribution

Class NumberTP393

1 引言

无线传感器网络由大量拥有无线发射模块的节点组成,节点依据各自的应用环境配备不同的传感器,利用传感器采集数据后,以无线的方式传输至汇聚节点,以达到远程监测的目的。节点部署完毕后,很多情况下需要对节点进行代码更新。远程代码更新已成为无线传感器网络领域重要的研究课题。目前,国内外研究人员针对远程代码更新方法已进行相关研究,研究方向主要为代码分发以及数据压缩。若要使用代码更新技术需要额外的存储空间,完成代码更新需要完整的解决方案,因此对远程代码更新技术的研究很有必要。

2 代码分发协议

在实现代码更新的过程中,各个节点需要各自广播当前节点的版本信息与网络中的控制信息,以保证整个网络均能收到网关节点发送的控制消息,并运行在正确的版本上。各节点通过比对版本信息,判定是否需要进行数据交换,完成整个代码的分发工作。Trickle数据分发协议能够解决小数据量的分发,可以用于代码更新过程中控制字以及版本信息的分发。当数据量达到一定规模的情况下,需要使用不同的协议用于完成整段代码的分发功能。Deluge协议是一种泛洪式的代码分发协议,即代码通过广播的形式,以扩散的方式分发至各个节点。

为适应低功耗、低成本的系统设计,需要对协议进行适当修改。同样将分发过程分为三个阶段:维护阶段、RX阶段以及TX阶段。Deluge协议使用了流水线技术以提高代码传播速度,但其提高的程度不高,取消流水线技术,待节点完全接收完毕后再行使分发的功能,从而减轻了接收端的负担。

Trickle协议可以满足少量数据分发节点维护过程,使用Trickle协议进行维护,维护的数据包括上位机发送的对全网的控制命令,如节点重启、版本切换以及代码分发,同时控制命令包含了待分发网络的版本信息,通过网络版本信息与节点当前版本比对,节点即可知道自己应该处于接收还是分发状态。

更新过程如图1所示,网络由4个节点组成,分别为网关节点,传感器节点A、B、C,其中网关节点与节点A、B在一跳的范围内,节点C与网关节点相距较远,无法直接通信。最初各节点处于维护状态,各节点随机地广播ADV消息,以保证全网的版本一致。网关节点从上位机接收到了新版本代码,需要分发至整个网络。分发过程如下。

1)网关节点首先利用Trickle协议发送CTL消息,该消息中包含最新版本号以及最新版本文件大小,该消息将会发送至整个网络。

2)当CTL消息传播完毕后,各节点将随机发送ADV消息,ADV消息中包含当前节点的版本信息新版本节点发现旧版本信息后尽快广播一个ADV消息,让周围节点知道该节点版本是最新的。

3)节点A、B接收到网关节点发送的ADV消息,从消息中解析出网关节点有新版本数据可用,随即进入RX状态,节点A抢先向网关节点发送了REQ消息。

4)网关节点接收到来自节点A的发送消息后进人TX状态,广播DATA数据。

5)节点A、B同时接收到来自网关节点的DA⁃TA数据,节点B受到抑制,无需再发送REQ消息。

6)节点A、B接收到完整更新数据,重启节点,重新进入维护状态,此时节点A、B运行新版本的程序。

7)节点B重启后,发送ADV消息,由节点C接收到,转入RX状态,重复之前节点A、B接收的步骤。

图1 分发流程

在更庞大的网络中,更新代码将一层层的向外扩散,直至整个网络都运行最新的代码。在更新过程中,待接收的节点永远处于接收状态,直至代码完全更新完毕对于节点而言,单一的接收、发送状态,减轻了节点在同一时刻的负担。

3 更新系统设计方案

远程代码更新系统以硬件进行划分,可以划分为三个部分,分别为:上位机、网关节点以及传感器节点。为了能实现代码的远程更新,需要对三部分进行逐一设计,最终使得代码能完整的从上位机传至网关节点,再从网关节点分发至整个网络。

3.1 远程代码更新过程

远程代码更新过程如图2所示:在上位机编写带有分发协议的基本程序。将基本程序通过串口烧写至各个节点,各个节点在网络上正常工作。需要进行代码更新时,在上位机编写新的程序,编译完成后通过串口烧入网关节点。上位机通过串口向网关节点发送分发指令,网关节点收到指令后,将指令消息广播至整个网络。节点A、B利用分发协议先接收到完整程序,启用新版本程序。节点C从节点B接收新版本程序,并重启更新。

图2 远程代码更新图

3.2 更新系统组成部分

为完成上述的代码更新过程,需要分别设计上位机软件、网关节点程序以及节点程序三部分。

上位机软件使用C#编程,上位机程序共需要完成两部分功能,首先将iHex文件发送至网关节点,其次需要给网关节点发送控制命令,控制整个网络的分发状态。

网关节点使用C编程,负责接收上位机发送的新版本程序,接收上位机发送的控制命令。做出相应的响应。解析上位机发送新版本程序的命令,负责将新版本程序分发至各个传感器节点。传感器节点的程序又分为两个部分,启动引导部分与运行程序部分。启动引导部分负责各版本之间的切换工作,在分发过程中,程序会对版本启动信息进行修改,在启动过程中读取启动信息,跳转到特定版本的运行程序。运行程序包含正常的采集数据或其他节点功能程序,还包含了分发协议。在运行过程中,节点功能程序与分发协议互不干扰。

4 代码分发协议详细设计

节点代码分发协议与网关节点使用的协议一致,传感器节点在模块部分相比网关节点减少了串口接收功能。分发协议主要模块如图3所示,总模块利用Trickle接收到的信息进行判定分发方式,Object分发模块负责对整个版本的分发或接收,调用页分发模块进行每一页的分发或接收,当新版本程序接收完成后进行重启。新版本程序装入节点,并成功重启后,将作为分发节点,将新版本程序分发到更远的节点。

图3 代码分发模块

4.1 分发总模块

分发总模块为分发协议最顶层的模块,控制整个协议的工作状态。在节点启动初始化完毕后。将调用Trickle分发模块,开启Trickle分发功能,用于维护一段控制信息,该信息包括控制命令、分发代码的版本号以及分发代码的大小。

typedef nx_struct DelugeCmd{

nx_uint8_t type;

nx_uint8_t uidhash;

nx_uintl6_t size;

}DelugeCmd;

在维护阶段,节点周期性的广播该信息,以保证全网信息一致。当Trickle模块从其他节点接收到新的控制消息时,将会以事件的方式通知分发总模块有新消息,分发总模块对该事件进行响应。分发模块读取新消息的控制字,节点收到的控制命令有两种情况,分别为停止分发和分发。

当节点接收到停止分发命令,则调用Object分发模块的接口停止代码分发,Object分发模块再调用页模块的接口停止当前页分发操作,最终整个程序停止分发或接收代码。

当节点接收到分发指令后,需要读取分发指令的程序版本号以及程序大小。将读取到的版本号与自身的版本号进行比对,决定该节点是处于接收状态还是分发状态。调用Object分发模块的pub⁃lish或receive接口,使程序进入接收或分发状态。调用方式如下。

task void taskRequest(){

switch(state){

case S_PUB:

call ObjectTransfer.publish(lastCmd.uidhash,lastC⁃md.size);

break;

case SRECV:

call ObjectTransfer.receive(lastCmd.uidhash,lastCmd.size,bootArgs.bootBank);

break;}}

收到版本信息后,会设置当前节点状态。并且在任务队列中加入taskReguest任务,任务的调度方式是先进先出的,用于处理对时间要求不高的事务。对于分发任务,需要传递代码版本号以及代码大小的参数。对于接收任务,需要额外传递启动Bank号的信息,通过当前启动版本所在Bank位置的信息,决定新版本程序存放位置。

4.2 Ob ject分发模块

Object分发模块管理整个代码的分发或接收进度,全网广播消息,使各节点完成各自的分发或接收工作。该模块提供的接口被分发总模块调用,向总模块提供分发、接收和停止的功能,在同一时刻,节点仅可能有一种状态,即分发、接收或停止。当接收到停止指令时,停止一切消息的传输,并调用页模块的接口,使得页模块也停止传输数据,等待下一步的命令。

在该模块中周期性地广播ADV消息,与Trick⁃le维护的消息不同,该消息除了包含代码版本号和代码大小外,还包含了当前节点已完成的页数。通过已完成页数,可判断出该节点是处于接收还是分发模式。

typedef nx_struct ObjDesc{

nx_object id t objid;

nx_page num_t numPgs;

nx_age_num_t numPgsComplete;

}ObjDesc;

若节点接收到其他节点广播的ADV消息,通过收到的ADV消息判断广播节点与当前节点的状态是否一致,如果状态一致,即同时处于分发状态或同时处于接收状态,则抑制本轮广播,并且当节点多次抑制广播信息后,将延长广播周期,以节省能耗。

若分发节点接收到由接收节点广播的ADV消息,则继续等待定时器的触发,广播当前ADV消息,以使得接收节点可以从当前节点获取新版本信息。若接收节点接收到由分发节点广播的ADV消息,则调用页模块提供的接口,准备请求接收需要接收的页,接收节点每次仅请求接收一页消息。Object分发模块管理着当前节点已接收到的页数,有分发节点时调用页模块接口请求接收下一页。页模块完成一整页的接收后,会通知Object分发模块,Object分发模块将完成页数加一,等待ADV消息再请求接收下一页。

4.3 页分发模块

在程序的分发过程中,以页为一个单位进行传输,定义每个页的大小为1024个字节。Object分发模块负责管理当前程序以完成的页数,页分发模块完成对某一页的发送或接收操作。将程序分割成页后,由于1024字节大小依旧超出了无线传输包的字节限制,需要使用位图对数据包进行管理。

定义一个byte类型数组pktsToReceive[N],该数组的总位数表示一页中共有多少数据包等待传输,例如一个包中可以装100个字符的数据,则每一页需要传输11个包,则此处N为2,数组中共有16位。数组中的每一位代表一个数据包是否接收,作为接收节点,将该数组包含在REQ消息中,向分发节点REQ消息。分发节点接收到REQ消息后,查看其中的请求页号以及pktsToReceive数组,得知接收节点需要的数据部分,分发节点从Flash中读取应分发的数据,并且进行广播发送。

页分发模块负责传输和接收两种消息,分别为请求消息与数据消息。

typedef nx_struct DelugeReqMsg{

nx_uintl6_t dest;

nx_uintl6_t sourceAddr;

nx_object_id_t objid;

nx_page_num_t pgNum;

nx_uint8_t requestedPkts[DELUGET2-KTes BIT⁃VEC_SIZE];

}DelugeReqMsg;

请求消息包含了请求节点的地址、目的地址、请求的版本号、页号以及位图信息。

typedef nx_struct DelugeDataMsg{

nx_object_id_t objid;

nx_page_num_t pgNum;

nx_uint8_t pktNum;

nx_uint8_t data[DELUGET2 PKT_PAYLOAD SIZE];

}DelugeDataMsg;

数据消息包含了发送的版本号、页号、数据包号以及数据信息。

页分发模块同样有三种状态,分别为分发、接收和停止状态,其状态与Object分发模块的状态一致,当Object分发模块状态发生改变时,页分发模块的状态也会随之改变。

接收状态下,页分发模块完成两个功能。分别为数据请求与数据接收。每当Object分发模块得知有其他新版本节点时,将告知页分发模块,页分发模块准备向新版本节点请求接收数据。由于可能有多个节点同时得知网络中存在新版本节点防止多个节点同时向新版本节点发送请求数据,节点经过一段随机时间的延时后再向新版本节点发送请求。无论是否发送了请求数据,各节点均能接收到来自新版本节点的广播数据,判断该数据是否为当前节点需要的数据,若需要该数据则写入Flash,并且抑制当前即将发送的请求。当节点接收到待接收页的完整数据后,通知Object分发模块,并将待接收页设置为下一页。分发状态下,等待接收其他节点发送的请求数据。当接收到其他节点的请求,分析请求信息,准备请求信息中需求的数据,由于请求的数据可能需要多个数据包才能传输完毕,逐步广播所有需要发送的数据包,在完整数据发送完成前,忽略其他节点的请求。

5 多节点更新实验

采用一个网关节点、多个传感器节点进行实验。传感器节点分布在网关节点周围。且传感器节点可直接与网关节点进行通信。分发代码的大小为26.65KB,传感器节点数量从一个逐步增加至二十个。其位置示意图如图4所示,网关节点通过上位机接收指令,进行分发,传感器节点均匀分布在网关节点周围,且能相互通信。

图4 单跳节点位置示意图

图5 表示了分发至不同数量节点所需使用的时间。当更新一个节点时需使用的时间为139s,随着节点数量的增多,分发时间略有下降,时间稳定在115s左右。由于发送REQ的等待时间是随机的,当节点数量增多,总体REQ时间会相对减小,从而分发速度变得更快了。且当网络中发生丢包的情况,当一个节点接收到了ADV消息。而另一个节点没接收到的情况下。依旧能够有一个节点向网关节点发REQ消息。而不会等待网关节点发送第二次的ADV消息,同样加快了分发速度。

图5 节点更新时间

当传感器节点数量增加到12个后,分发速度显著下降。由于无线信道的稳定性相对有线传输较差,当节点增多时,丢包的可能性增大,即重传的次数增多,导致分发速度下降。大量节点同步更新的过程中。若有某个节点A未接收到某个数据包,其请求信息可能会淹没在其他节点中,即其他节点抢先向网关节点请求数据包。其他节点请求的数据包不是节点A可用的数据,导致该节点无法直接从网关节点偷听得到数据,需等到其他节点完全更新完毕后,才能从之前丢失数据的地方继续接收新的数据。单个节点的数据包丢失,将使得整个网络的更新时间变得更长,当无线信道环境足够理想时,如更新19个传感器节点的情况,其更新速度与更新节点数量无关。

6 多跳更新实验

多跳实验中,各节点以图6方式进行放置,网关节点放置于实验室房间内,传感器节点A放置于门口,传感器节点B放置于走廊。传感器节点A可与网关节点或传感器节点B直接通信,网关节点与传感器节点B不能直接进行通信,代码分发需要通过传感器节点B进行分发。在更新过程中,首先需要将代码分发至传感器节点A,再由传感器节点A将代码分发至传感器节点B,待更新代码的大小同样为26.65KB数据。

图6 多跳节点位置示意图

分发过程中,为了构成多跳的网络,将节点布置在距离较远的位置,由于接收信号强度较弱,更易受到干扰,因此丢包的概率显著提升,观察侦听软件侦听到的数据包可发现,传感器节点A多次向网关节点发送了重发的请求。在经过220s后,完成了从网关节点传输至传感器节点A的更新。又经过了500s,最终完成了全部的更新,总共经历了720s。

在传感器节点A与传感器节点B旁各放置一个节点,同样为一跳,多跳网络完整更新的时间缩短为480s,相比2个传感器节点的更新速度有显著提升。当节点增多时,收到包的概率也相对增加,从而缩短了更新所用的时间。多跳网络的理想更新时间应为当前网络跳数乘以单跳网络的时间,未达到理想速度估计是由于无线信道的不稳定,常有丢包出现,当数据无法正常传输至节点,更新时间将会延长。

7 结语

无线传感器网络,是近几年来计算机技术方面的热门研究对象之一,而远程代码更新技术是无线传感器网络的一个重要技术,利用远程代码更新技术,可以减少不必要的重复性操作,且对特殊环境下的程序调整尤为重要。本文是无线传感器网络远程代码更新的系统设计方法研究,并进行系统的实现。通过研究各协议,完成无线传感网络远程代码更新的设计,更新程序能准确无误的分发至各个节点。

[1]Kulkarni S S,Wang L.MNP:Multihop Network Repro⁃gramming Service for Sensor Networks[C]//IEEE Interna⁃tional Conference on Distributed Computing Systems,2005.ICDCS 2005.Proceedings.IEEE,2005:285-286.

[2]Kulkarni S,Wang L.Energy-efficient multihop repro⁃gramming for sensor networks[J].Acm Transactions on Sensor Networks,2009,5(2):1-40.

[3]Rossi M,Bui N,Zanca G,et al.SYNAPSE++:Code Dis⁃semination in Wireless Sensor Networks Using Fountain Codes[J].IEEE Transactions on Mobile Computing,2010,9(12):1749-1765.

[4]Gao Y,Bu J,Dong W,et al.Exploiting Concurrency for Efficient Dissemination in Wireless Sensor Networks[C]//International Conference on Distributed Computing in Sen⁃sor Systems and Workshops.IEEE,2011:1-8.

[5]ZHAO.Integrated mutual selection based code dissemina⁃tion for reprogramming wireless sensor networks[J].Jour⁃nal of China Universities of Posts&Telecommunications,2013,20(1):79-84.

[6]Dong W,Liu Y,Zhao Z,et al.Link Quality Aware Code Dissemination in Wireless Sensor Networks[J].IEEE Transactions on Parallel&Distributed Systems,2014,25(7):1776-1786.

[7]Alam SM I,Sultana S,Hu Y C,et al.SYREN:Synergis⁃tic Link Correlation-Aware and Network Coding-Based Dissemination in Wireless Sensor Networks[C]//IEEE,International Symposium on Modeling,Analysis&Simula⁃tion of Computer and Telecommunication Systems.IEEE,2014:485-494.

[8]Kim D,Nam H,Kim D.Adaptive Code Dissemination Based on Link Quality in Wireless Sensor Networks[J].IEEE Internet of Things Journal,2016,PP(99):1-1.

[9]Concepts R.Wireless sensor networks:a survey[J].Com⁃puter Networks the International Journal of Computer&Telecommunications Networking,2014,38(4):393-422.

[10]Levis P,Madden S,Polastre J,et a1.TinyOS:An oper⁃ating system for sensor networks[J].Ambient Intelli⁃gence,2004:383-396.

[11]Li J,Wang F,Duan W Research of TinyOS in Wireless Sensor Networks[J].Computer Measurement&Control,2006,14(6):838-840.

Research of Rem ote Code Update Technology Based on the Im proved Code Distribution Agreement

GAO Fei
(Baoji Vocational Technology College,Baoji 721000)

TP393

10.3969/j.issn.1672-9722.2017.09.029

2017年3月13日,

2017年4月20日

高菲,女,硕士研究生,研究方向:计算机教育。

猜你喜欢

关节点代码消息
基于关节点数据关注RGB视频的双人交互行为识别
基于深度学习和视觉检测的地铁违规行为预警系统研究与应用
重载机车网络重联TCN 故障节点识别方法研究*
关节点连接历史图与卷积神经网络结合的双人交互动作识别
一张图看5G消息
创世代码
创世代码
创世代码
创世代码
晚步见道旁花开