灌区无线传感器网络E-RMAC协议的研究与仿真
2019-05-31王永涛,黄翠,黄维,梁俐,陈跃威
王 永 涛,黄 翠,黄 维,梁 俐,陈 跃 威
(1.贵州省水利科学研究院,贵州 贵阳 550002; 2.贵州农业职业学院,贵州 贵阳 551400; 3.贵州东峰自动化科技有限公司,贵州 贵阳 550002)
灌区信息监测站网建设点多、面广,存在交通不便、施工困难等不利因素影响,极大地制约了灌区信息化的发展应用水平。目前贵州省大型灌区的管理决策一般是以人工经验为主,并没有准确全面感知作物水、肥状况、生长状态和环境参数。无线传感器网络具有成本低、网络结构灵活、数据传输距离远等特点,为水利信息化提供了有力的技术支撑。RMAC无线传感器网络通讯协议能够尽可能地减小节点的能量消耗和延长整个网络的生命周期,但同时也存在许多不足。本文在此基础上,提出了改进型的E-RMAC协议,并进行了仿真。为初步形成以物联网为基础,无线传感器网络为支撑、自动化技术为手段、高效节水灌溉技术为核心的技术体系提供了重要支撑。可实现作物生长最佳条件的精准调控,达到增产、改善品质、调节生育期、节水节肥、减少环境污染、提高经济效益的目的[1]。
1 RMAC协议
1.1 RMAC传输思想
具有占空比的MAC协议能够有效解决无线传感器通信网络能量有限的难题,在单周期内实现多跳传输的RMAC(the Routing enhanced MAC protocol)协议是其中最为典型的无线传感MAC协议。该协议是 Shu Du, Amit Kumar Saha, David B.Johnson于2007年提出的,很好地实现了节点能量的高效性,大大降低了节点间端到端的传输延迟时间,同时提高了节点的吞吐量。RMAC应用了跨层思想,由路由层信息获知下一跳传输节点的地址。协议将整个传输周期分为:同步期(SYNC),数据时段(DATA),睡眠时段(SLEEP)。在同步期所有节点实现全网同步,在数据时段节点实现通信信道预约,睡眠期节点可以实现数据包传输。这样一来,通过提前预约信道,大大降低了节点因竞争信道造成的能量消耗,同时降低了节点发送数据报时的碰撞概率[2]。
信道预约时RMAC会在数据时段内向其下游节点发送一个先导控制帧PION(Pioneer Control Frame)实现预约通信。PION帧代替了SMAC的RTS/CTS控制帧,且能在一个数据时段内实现多跳传输。PION帧起到两方面作用:① 向它的下游节点发送请求通信的请求信息,如SMAC的RTS;② 向它的上游节点回送确认通信的确认信息,如SMAC的CTS帧。将两种控制功能集中于一个帧中,在多跳转发中效率比较高[3]。在睡眠时段,节点开始发送数据包,节点完成任务就进入睡眠状态,如果节点没有任务也进入睡眠状态。
1.2 PION帧结构和工作机制
与RTS和CTS帧不同的是,PION帧的字段不仅包含了本地节点地址、上游节点的地址、下游节点的地址、包传输需要时间的域值,还包含了跨层信息:数据包传输的最终目的地址,以及PION在传输路径上已经转发的跳数。其中最终目的地址是由网络层传输的,源节点在产生PION帧时将PION转发跳数置为0。
当源节点S有数据要发送给目的节点D时,在DATA时段节点S在退避窗口CW中随机选择一个退避值,完成退避后再经过DIFS时段确定信道空闲后开始向节点A发送一个PION帧,其中A是S的下一跳节点。当A接收到S发送的PION帧后,如果A不是数据包传输的最终目的地,A就构建新的PION帧。首先,A通过网络层获取数据包当前传输的下一跳节点地址,并将PION转发跳计数器值加1,记录上一跳节点地址和目的地址后经由SIFS时段(SIFS用于节点从传输或接收状态的状态转换和数据处理)开始传输自己的PION帧。此时的PION帧代表两层含义:① 对节点S的请求确认,如同SMAC的RTS的功能;② 对下一跳节点B的传输请求,如同SMAC的CTS的功能。与其它协议不同的是,当S接收到A发送的PION帧后并不立即发送数据包而是等到本周期的睡眠时段开始传输数据包。一个周期的数据时段只用于建立确切的数据传输调度的PION帧的发送与接收,数据包只在睡眠时段传输,PION帧在传输路径上不断地向下传输,直到PION传输到目的节点或者本周期的数据时段结束为止[4-5]。
1.3 数据传输机制
如果节点在数据时段完成了信道预约,所有数据包将在睡眠时段实现传输。在睡眠初始时段,节点会变为睡眠状态,每个节点会根据接收到的上游节点的PION帧信息获知自己什么时候处于活动状态,协同完成数据包的转发[6]。
当A将 PION帧发送出去且S接收到了之后,就在当前工作周期下的睡眠时段开始数据包的传递,在睡眠时段的相应时间里A就可以接收数据包,A收到后就向S发送已经收到包的回复信息ACK帧,S就立即进入节能状态睡眠模式。如果A成功完成了下一跳节点B的通信请求,就会把数据包传给B节点。如果B发送了确认信息ACK帧且A收到后就立即进入睡眠状态,这样的过程一直持续至包发送到目的地或者在数据时段内传输到一个节点失败后,接收到它下游节点发给它的回复后,PION帧停止发送数据包,此情况下,节点会保存数据包。到下一工作周期的数据时段,节点会向其下一跳节点发送新的PION帧,并置PION转发跳计数器值为0,在睡眠时段再传输数据包。如此的进程会被重复执行直到数据包传输到目的地。
在上述过程中,节点适时清醒时刻的计算是通过PION帧中的转发跳计数器值得到的,假如一个节点是此次PION转发路径中的第i跳节点,则其清醒时刻为
Twakeup(i) = (i-1)(durDATA+SIFS+durACK+SIFS)
(1)
式中,durDATA和durACK分别代表了发送独个数据包和独个ACK帧的时间长度,假如整个网络施行的是同规格的包,则durDATA为一确定值,否则,应在PION帧中相应的字段里记录包的尺度,以便整个传输路径上的所有节点能计算出正确的清醒时刻[7]。
1.4 网络分配矢量设置
为了避免包的碰撞,RMAC采用了802.11体系的虚拟载波侦听思想来设定网络分配矢量NAV(Network Allocation Vector)[8]。但是有别于现有其它的网络分配适量,这个网络分配矢量是一个时间段,相邻节点如果串听到该节点的PION帧,ACK帧会计算一个时间段,并在相应的时间段节点处于睡眠模式。
如果C和A是邻居关系,为了避免在A节点处发生碰撞,那么在A节点接收数据包时C节点不能发送任何数据包。因此,如果C无意中接收到A传给B的PION帧,C将会设置出相应的3个时间段到NAV中。
(1) 回复完成的PION帧时隙段:[now,now+durPION],durPION表示发送一个PION需要开销的时间。这个时隙段用于确保在A接收B发送的确认PION帧时C不会发送任何数据包。
(2) 数据包发送时隙段:[tdatastart,tdataend],tdatastart的值是C根据下一次睡眠时间再综合A的Twakeup时间得来的,tdataend=tdatastart+durDATA。这个时隙段可以保证在S给A发送数据包时,C不会发送任何数据包,以免干扰A的接收。
(3) 接收成功报告时隙段:[tackstart,tackend],其中tackstart=durDATA+durACK+3SIFS+tdataend,tackend=tackstart+durACK,其中durACK是发送ACK支配的时间。这个时隙段能保证A在接收B发送的ACK帧时,C不会发送任何数据包。
C设置好NAV时间段后,如果接收到其它节点发送的PION帧,且转发时间与已设定好的NAV不冲突的话,C就会向其上游节点发出确认PION帧;如果时间上有冲突,C就不向其上游节点发送确认PION帧,其上游节点会在下一个工作周期的数据时段向C重发PION帧[9]。
1.5 丢帧处理机制
如果在数据时段某个节点丢失一个PION帧,则发送该PION帧的节点就收不到其下游节点发送的确认PION帧,在睡眠期,上游节点就不会发送数据包给下游节点。在此情形下,节点只有在下个工作周期的数据时段重新向下游节点发送一个新的PION帧。但是,如果下游节点不知道其上游节点没有接收到自己发送的确认帧,下游节点会在睡眠时段一直处于接收状态,无形之中浪费一部分能量。更为严重的是,先导控制帧已经在下游节点传输了很多跳,这会导致多数节点因等待参与数据传输而浪费大量能量。RMAC协议采用超时机制实现了节点自动进入睡眠模式[10]。
如果在睡眠模式下节点丢失了数据包或者ACK确认帧,在本周期内没有重传机制实施重传,节点只有在下个周期的数据时段开始新的信道预约,完成数据包的发送。
2 RMAC协议改进
2.1 RMAC协议缺陷
通过对RMAC协议的详细分析,发现有下列问题亟需解决以进一步优化协议的性能。① 数据时段的利用率不可靠;② 帧传输丢失处理的低效;③ 不可避免存在的能量消耗和传输延迟。在RMAC协议原来工作机制上,本文提出了新的单周期高效多跳传输的E-RMAC(Efficiency-RMAC)协议,该协议采用了重传机制,在信道预约阶段采用了单次重传机制,在数据包发送阶段采用了多次重传机制[11]。
2.2 E-RMAC信道预约机制
E-RMAC协议数据时段的工作机制为:S为源节点,A是S的下游节点,如果S接收到A发送的确认PION帧,S跳过时隙段T转为节能的睡眠模式。如果B成功地把确认PION帧传输给了A,A就会立即进入T时隙段,再如果发生了超时就立即进行睡眠模式,此时,T时间段为预先设定的一定值且小于durPION。如果B接收到A发送的PION帧却没接收到C发送的确认PION帧,则B进入T时间段,此时T时长为durPION,执行完T时间段并不进入睡眠状态.而是在C所对应的T时间段内向C重发PION帧,发完PION帧后立即进入睡眠状态,此时的转发跳计数器值不累加。如果D成功地把确认PION帧传输给了A,此时在T时隙段内C成功接收完B另一次传输的PION帧后马上进入睡眠模式。假如D发送的确认PION帧被C接收失败了,那么经过SIFS后重新传输PION帧到D,这个时候D发送PION帧后进入T时隙段。这样的过程执行下去直到PION被运送到目的节点或者数据时段宣告结束时停止[12]。
2.3 E-RMAC数据包传输机制
为了尽可能实现数据包在单一周期内可靠的传输,E-RMAC采用了多跳传输模式,并且源节点和在数据时段未成功接收到下游节点发送的PION帧的节点以及最终目的节点都不执行时隙段T。此处T分两种情况取值:一个是定值;另一个是durDATA。
通过NAV排除隐含干扰节点的情况。A接收S传输的数据包,S会收到A传输的ACK,当A获得了数据包,确认包ACK被正确接收后S马上进入睡眠模式。在T时间段若发生超时,A就向B发送数据包,B运用公式Twakeup推算出合适的活动时刻参与A之间的通信,A接收到ACK后进入睡眠模式。
如上所述,在T时隙段中发生超时B就对C发送数据包。如果B对C传输包失败了,那么C反过来不向B发送确认包ACK,同时启动T时隙段。接下来在ACK时隙段内B没收到由C传输的ACK,B就经过SIFS后启动T时隙段,该时隙段用于向C重发数据包,之后又是B等待C的ACK。在这个过程中,B重发的数据包对C成功后,C就对B传输ACK,B转入睡眠模式,通信成功。C启动下一次T时隙段超时,C对D发送数据包。在前一过程中,D会处于等待通信状态直到自己侦听到C传输给B的ACK。当C获得了D的ACK后,则转入睡眠模式。如果D非本次通信的目的处,那么节点间的协调通信过程始终不会终止,直到在数据时段内,节点没能够接收到下游节点传输的确认PION帧或者传输目的成功就终止所有通信。
2.4 E-RAMC相关参数计算
2.4.1Twakeup算法
E-RMAC的Twakeup由数据时段和睡眠时段共同协同完成作用,头节点和其相邻节点的Twakeup只与数据时段有关联,除此之外所有非所述节点还与睡眠时段有很大关系。其中, PION已成功传输的跳数和是否需要重发PION决定了节点在数据时段的睡眠时间。
Tsleep1=TDATA-[CW+DISF+2·durPION+2·SIFS]
(2)
Tsleep2=TDATA-[CW+DIFS+4·durPION+3·SIFS]
(3)
Tsleep3=TDATA-[CW+DIFS+ (i+2)·(durPION+
SIFS) +T]
(4)
Tsleep4=TDATA-[CW+DIFS+ (i+4)·durPION+ (i+
3)·SIFS]
(5)
式(2)~(3)表示的是源节点不需要重发PION和需要重发PION时的睡眠时间;式(4)~(5)表示的是PION已经成功传输跳数大于等于1的节点,其在没必要和渴望再一次发送PION时的睡眠时间。
节点处于睡眠状态下刚开始时的时段睡眠时间:
Tsleep5= (i-1)·(durDATA+durACK+3·SIFS+T)
(6)
节点处于合适的时刻Twakeup(i)是根据式(2)~(6)得到的。睡眠时段节点处于活动状态后且一直保持此状态,直至确定已经成功收到上游节点传输的数据包且把数据包传输到下游节点后才转入睡眠模式。
2.4.2 NAV算法
E-RMAC与RMAC的计算方法相似,假如D与B的关系是邻节点关系,则相应的NAV时间段设置如下。
(1) 发送与接收PION帧时间段为:[now,now+2·durPION],当D旁听到B传输到C的信道预约帧后,设置该时间段。这个时间段主要是使D处于闲置状态时正确接受B与C、A之间发送的控制帧。
(2) 数据传输时间段为:[tdatastart,tdataend],其中tdatastart的值由下一个休息时间和B的Twakeup时间计算得到,tdataend=tdatastart+2·durDATA+3·SIFS+durACK,在这个时隙段内D必须处于空闲状态。
与RMAC不同的是,此处D走完上面过程后必须侦听大约durACK长的时隙段,如果在此时间段D收到了B发送的数据则没必要再设置下一个新的数据传输时间段;如果在此时间段B传输的确认帧被D收到了或者D没有接收到B传输的任何帧,则D需要重设置下一个数据时间段。
下一个新的数据时隙段为:tdatastartnext=tdataend+durACK+SIFS,tdataendnext=tdatastartnext+durDATA,执行完新的时间段后D还需要再监听durACK时间段,重复上面的过程。
(3)确认帧时隙段为:[tackstart,tackend],与RMAC不同的是处于tdataend时D必须进行durACK的时长的侦听监测,得出以下情况:
假如B传输的DATA正好被D旁听到了,相应设置ACK时隙段:tackstart=tdataend+durDATA+SIFS,tackend=tdatastart+durACK,当上面设置的时间段都走完了后D还要走完SIFS再接着侦听T大小的时隙段,倘若D在上面这个时间里面并没有感知到B的所有帧,D就不会计算新的ACK时隙段,换言之,D就要做出相反的行为设置对应的时隙段。
如果B成功发送给D它的ACK确认帧,D就会等待2·SIFS+T的时间后继续侦听;倘若B发送的DATA被D旁听到了,则ACK时间段设置方法和第一种情况类似;如果接收到B发送的ACK则重复经由2·SIFS+T后继续侦听的过程,根据侦听结果作出判断。
若D并未接受到B传输的所有帧,就需要D等待2·SIFS+T后持续侦听,根据侦听结果按第一或者第二种情况设置相应的ACK时间段[13]。
3 RMAC仿真性能分析
实验采用NS2仿真平台进行仿真,NS2模拟过程大致分三大部分。首先添加需要模拟协议的代码。该步骤需要在NS2里面的许多文件中添加相应的程序块和持续的调试,本文主要是通过make和make clean命令实现,针对出现的问题不断修改。在修改和添加代码时,不仅要修改源代码,还要修改OTCL代码。添加完代码后需要编写Tcl文件,该文件的后缀名是.tcl,主要用于事件驱动、环境设置、通信协议的添加、通信时间设置、节点发送包的数量及速率、仿真数据的收集等。最后完成仿真数据的分析,NS2中通过awk程序可提取本文需要的数据,最后通过画图软件绘制出仿真结果图。通过读图观察分析出协议的性能,包括传输时延、网络吞吐量、时间抖动等性能[14]。NS2网络模拟基本流程如图1所示。
3.1 E-RMAC仿真参数配置
为了对比,本文在相同的仿真环境下实施了SMAC、RMAC和E-RMAC仿真。其中SMAC采用了非自适应载波侦听机制,为了排除节点同步造成的影响,假定所有协议在实验开始前节点已实现了同步。仿真拓扑为链状(Chain)和十字交叉状(Cross)[15]。链状拓扑实现总共24跳节点间等间隔依次分布,十字交叉状拓扑实现的是两个24跳的链状拓扑相互交叉分布,具体如图2和图3所示,仿真参数如下。
图1 NS2网络模拟基本流程Fig.1 Basic flow chart of NS2 network simulation
图2 链状拓扑
Fig.2 Chain topology
图3 十字交叉状拓扑Fig.3 Crossed topology
3.2 传输时延分析
由于SMAC是基于竞争性协议,采用的是单周期内单跳传输。本周期内数据没传输完,只能在下个周期继续竞争信道再传输,因而从图3可以看出在两种拓扑下其时延最大。由于RMAC采用的是提前预约通信,在一个周期内能进行多跳传输,这样大大降低了数据包的时延。从图中看到RMAC与SMAC相比传输效率明显提高了,平均提高了约4.3倍。由于E-RMAC完善了RMAC的丢帧处理功能,保证了包在每个周期尽可能的传输。从图4可以看出,在两种拓扑下包的传输时延E-RMAC均优于RMAC,大约平均提高了46%。
图4 包的传输时延Fig.4 Transmission delay of packets
3.3 网络吞吐量分析
如图5所示,随着网络cbr流的增加,整个网络的竞争增大,SMAC的吞吐量趋于一固定值且远小于RMAC和E-RMAC。
图5 网络端到端平均吞吐量Fig.5 Average throughput of network end-to-end
RMAC的多跳传输机制在一定程度上缓解了网络竞争,增大了吞吐量。由于E-RMAC在多跳传输的基础上实现了丢包重传机制,增加了每个周期包的成功传输概率,尤其在十字交叉拓扑中吞吐量远优于SMAC和RMAC。
4 结 语
RMAC协议采用的是提前预约信道,在单周期内实现数据包多跳传输,大大提高了数据包的转发速率,特别适合一些基于事件驱动的无线网络环境应用。但其处理包丢失的缺陷导致了其存在一定的不完整性。不管从预约信道还是从数据包传输上讲,一旦发生包的丢失,将会导致很多节点浪费一部分能量用于等待接收数据包。若该事件发生在大的网络中,将会浪费更多的能量,如果将其用于基于事件驱动的无线网络中,其会大大延迟报告事件的发送,势必会造成很大的危害。
本文方法改进了丢包处理策略,保证了预约包和数据包在单周期内尽可能的发送与接收。从协议效率上来讲,不管是网络数据包成功发送流量还是所有节点的能耗都有所提高。通过仿真图可以看到,在复杂的拓扑中E-RMAC协议的性能更优越。因此,本文研究的E-RMAC协议应用于大范围的监测网意义较大。在大网络、多节点的大型灌区信息化建设应用中能大大降低布网成本,实现经济性和实效性,提高灌区信息化的发展应用水平。