时间:2024-05-04
张闪闪,甄 雪
(曲阜师范大学 信息科学与工程学院,山东 日照 276826)
无线传感器网络(wireless sensor networks,WSNs)是大量小型或微型低能耗传感器节点协作地感知和采集监测区域的各种信息并处理后,通过自组织多跳的方式形成短距离的无线通信网络。目前,WSNs已经广泛应用于智能建筑[1]、抢险救灾[2]、健康监测[3]、目标跟踪[4]等重要领域[5]。WSNs在用来提供更好服务的同时又面临很多挑战。由于WSNs中的节点大都采用电池供电,能量非常有限,并且节点一旦部署很难回收,所以对WSNs的能量效率研究一直是热点和难点问题。像所有共享媒体的网络一样,MAC是实现网络成功操作的重要技术。但是现有的无线媒体访问控制协议,例如蓝牙和802.11MAC协议都不能被直接应用到WSNs中,因为它们都没有将节能作为主要目标。
已有许多研究表明,空闲监听消耗接收所需能量的50%~100%。例如,Stemm和Katz测量到空闲:接收:发送比率为1∶1.05∶1.4[6],而Digitan 2 Mbps无线局域网模块(IEEE 802.11/2 Mbps)规范中空闲:接收:发送比率为1∶2∶2.5[7]。因此,为了延长网络的生存周期,有很多协议采用占空比机制来减少空闲监听造成的能量消耗。在占空比机制中,每个节点周期性地在活跃期和睡眠期之间切换。在活跃期,节点监听信道并且传输数据,在睡眠期,节点切换到低功率状态(例如关闭收发器)进入睡眠模式。过低的占空比虽然节省能量但会造成密集传输,所以设计一个好的MAC协议,选择合适的占空比数值来实现高吞吐量低时延是WSNs的设计难点。
采用占空比机制的MAC协议一般分为两类:同步竞争和异步竞争。它们都是通过减少空闲监听,增加睡眠时间来节约能量的。有许多同步占空比协议被提出,例如S-MAC[8]、T-MAC[9]、CL-MAC[10]、TAS-MAC[11]。但是这类同步协议要求每个节点可能会维持一个或多个同步时间表,并且对节点之间的时钟同步要求严格,这会产生很大的控制开销以及能量消耗,而且当网络负载发生变化时,高负载冲突较多,低负载空闲侦听较多,所以同步协议并不能达到很好的效果。依靠前导符采样的异步协议,例如B-MAC[12]、Wise-MAC[13]、X-MAC[14]、L-MAC[15],允许节点维持自己独立的工作周期,收发双方不需要同步,采用低功率监听(LPL)前导序列技术唤醒接收节点,消除了同步协议的限制,在吞吐量延迟以及能量高效性方面超过了许多同步协议。但是,此类协议也有自身的缺点,例如长的前导符造成的非目标节点的串音问题以及异步之间互相等待引起的较高端到端时延等。
文中提出了一种基于缓冲区队列长度的异步MAC协议,不同于其他考虑接收节点操作的算法,而是从发送节点出发,利用缓冲区队列长度判断网络负载改变占空比,当网络负载高时节点可以延长发送时间来降低节点的端到端时延,尽快降低网络负载,网络负载低时,在保证数据发送量的条件下增加节点的睡眠时间,节省能量。
由于固定的占空比在网络负载变化时不能表现更好的性能,因此希望设计一个能根据网络负载大小改变占空比的异步MAC协议。首先将每个节点的周期分为非活跃阶段和活跃阶段,非活跃阶段即睡眠期,活跃阶段包括监听和传输,节点在这两个周期之间进行转换。设每个节点开始的睡眠-唤醒周期长度为T。
活跃阶段:此阶段包括检测事件、竞争信道、信标包和数据包的传输和确认。协议开始时设定的活跃时间为Tactive,其中包括检测事件Td,竞争时间为Tcontend,每个信标包的传输时间为tbeacon,接收一个确认包的时间为tack,传输数据时间为Tdata,包括对分组的确认时间。
睡眠阶段:此阶段节点转入睡眠状态来节约能量,设睡眠时间开始时为Tsleep。在睡眠状态下,节点将采集的数据放入自己的缓冲队列中。
从以下几个阶段来详细介绍设计的MAC协议在这两个阶段的通信过程:
众所周知,两个节点通信时双方必须都处于活跃阶段,所以源节点发送数据时要等待目的节点唤醒才可以。异步通信中普通的前导符采样采用以下原理:节点周期性地唤醒一小段时间来对信道进行采样。如果信道是空闲的,那么节点立刻回到睡眠状态。如果检测到信道忙,则节点保持监听状态直到所有的数据都被接收或者是发生超时。这个方法要求在第一个数据帧前加上一个前导符,这个前导符的长度至少是一个信道采样间隔的长度,以免接收节点睡眠过程错过前导序列。但是此种方法非目标节点在长前导符发完之前不能发现该包并不是发给自己的,这造成了很大的能量浪费并且与节点密度成正比。为了避免这种问题,采用分组的前导符采样来进行异步唤醒。使用文献[16]中提出的STEM-B前导符变形,利用一系列的信标包来作为前导符,每个信标包包含了发送端和接受端的MAC地址以及此信标包的序列号。因此节点能够判断它是不是即将进行数据传输的目标节点,与传统的前导符采集协议相比,非目标节点可以尽早丢弃分组从而更早进入睡眠。当源节点唤醒时,在Td时间内检测是否有事件发生,如果有事件发生则发送信标包等待目标节点唤醒。因为每个节点周期性的唤醒和睡眠,当网络中节点密度大,网络负载高时,可能有多个节点同时唤醒想要发送数据,所以会产生冲突,因此利用CSMA机制进行信道争用。设信道争用时间为Tcontend,在此时间内没有收到任何信息则获得信道发信标等待目的节点唤醒,bn就是信标包,如果接收到信标,则判断信标是否发给自己,如果是则回复ACK等待接收数据,如果不是则转入睡眠,等待下一周期重复上述过程。
当节点获得信道与目的节点建立通信后开始传输数据,如果将一个长消息装入数据包后,一旦损坏就需要重传整个长消息,而无线信道中传输差错与消息的长度成正比例关系,因此长消息有着比短消息更低的成功传输概率,这会有很大的能量时间以及带宽消耗。因此该协议不像SW-MAC[17]和DS-MAC[18]那样发送大分组转入睡眠,而是将长消息分段,在唤醒时间连续发送数据包,并等待确认,直到唤醒时间到期,如图1所示。
图1 QL-MAC协议数据传输
所以节点唤醒之后有以下几种情况发生:
(1)节点有数据发送且获得信道,发送一系列含有目标地址和序列号的信标包,然后在信标包之间预留接收目的节点确认的时间tack。然后开始传输数据,所以此时数据传输总时间为:
Ta-Td-Tcontend-p(tbeacon+tack)
(1)
此处p为传输到第p个信标包时目的节点唤醒。若在Tcontend期间收到了信标,则判断此信标是否是发给自己的,如果是则回复ACK准备接收数据,如果不是则丢弃。
(2)节点有数据发送但没有获得信道,为节省能量节点转入睡眠,所以活跃时间为:
(2)
(3)节点唤醒但是在Td时间没有数据要发送,此时设置监听时间为Tlisten=tbeacon+tack,在此时间内如果有信标包接收则接收信标包,回复ACK并转发数据,此时数据传输时间为:
(3)
如果没有接收到信标包则睡眠,此时
(4)
文中希望利用提出的协议根据网络负载的大小来自适应调整节点的睡眠时间。因此,就需要提出一种方法来度量网络负载情况。检测网络负载一般有以下几种方法:一是通过串听RTS/CTS等控制分组,二是通过估算传输分组之间的端到端时延,三是通过缓冲区队列长度。这是因为在采用CSMA协议的数据传输中,对于竞争失败的节点,数据会积压在此节点本身的缓冲区队列中等待下一次争用信道。所以当网络负载处于较高情境时,缓冲区内积压的数据分组就会增加,可以传输的节点很难在较短的活跃期内传输完所有数据,并且其他没有获得信道从而处于退避阶段的节点也会有很多数据分组在缓冲区内积压。所以可以通过缓冲区队列长度反应网络负载。因此传感器节点通过本地缓冲区队列内待发数据分组的积压情况就可以真实迅速反映网络当前的负载情况,于是就利用这个特性来自适应调整节点在该周期的睡眠时间。
对于发送节点:
因为希望设计的协议能根据网络负载调整占空比,文中的重点在于找到一个缓冲区队列的阈值来判断网络负载大小。所以计算在整个睡眠-唤醒周期中能传输的分组数量为:
(5)
其中,tpacket是一个分组传输的时间。
在最好的情况下信道空闲,节点仅传输一个信标就接收到来自接收端的ACK,此时时间为tpacket+tack,那么可求出最大传输分组个数nmax为:
(6)
实际情况中,由于可能产生信道争用,并且接收节点的唤醒时间可能不会那么及时,所以一次能发送的分组个数远小于nmax。
假设每个节点在Td时间计算其缓冲区当前队列长度即缓冲区中分组数量,记为L。虽然一次能发送分组的个数远小于nmax,但是单纯的nmax作为阈值来和队列长度比较,当出现L和nmax很接近的时候,占空比调整会过于频繁,所以将2nmax和nmax/2作为阈值。L>2nmax,说明此时网络负载大,L 图2 改变节点占空比 如图2所示,在加倍占空比操作中,保持周期T不变,通过延长活跃时间来实现。在减半占空比操作中,保持活跃时间不变通过延长睡眠时间增大周期T来实现。这样做的好处是:当网络负载大时,唤醒时间加倍,这样可以尽快发送完分组且降低节点的端到端时延;当网络负载小时,唤醒时间不变,睡眠时间延长,这可以在保证节点每个周期发送数据量的情况下增加节点的睡眠时间,节省能量。 对于接收节点: 当发送节点的占空比改变时,接收节点也要做出相应改变,这种情况只需要在占空比加倍时候改变,否则就会出现当占空比加倍时发送端没有发送完但接收端的活跃时间已经到期的情况。为了避免此类情况发生,在信标包和确认包中加入一个1 bit的Flag字段,正常占空比用0来表示,如果占空比加倍则改为1,接收节点根据Flag位对自己做出调整。而发送节点占空比减半时接收节点不需要改变,因为接收节点也会接收到其他节点的数据包,不能仅根据其中一个发送节点就延长自己的睡眠时间。 在数据传输的过程中,当另一个节点在发送的时候节点唤醒,那么可能发生串听。为了解决这个问题,使用虚拟载波监听(virtual carrier sense,VCS)。VCS采用网络分配向量NAV获得信道控制信息。在通信范围内的任何节点都能看到此值,它采用单位时间来维护并基于本地时钟递减。当NAV的值不为0的时候表明信道被占用。在睡眠阶段NAV计时器保持工作直到减为0。当NAV的值为0的时候节点处在活跃状态,那么节点唤醒竞争信道,如果节点处于睡眠状态则继续睡眠等待下一个周期。 图3 信标包和确认包格式 如图3所示,可以在信标包和确认包中的duration字段添加两个节点的通信时间来配置NAV值。这可以在发送端和接收端占用信道的时候,告知其他节点信道忙,无须争用信道,对于其他节点来说,可以减少不必要的争用,并且减少串听。占空比变化和NAV配置如下所示: (1)若L>2nmax,则表明缓冲区队列长度远大于此周期内能传输的最大分组数量,说明节点此时的网络负载已经偏高,此时需要尽快发送分组,睡眠时间不变,通过延长唤醒时间将占空比加倍,此时Ta=2Ta,NAV=2Ta-Td-Tcontend。 (2)若L (3)其余情况执行原占空比,NAV=Ta-Td-Tcontend。 具体节点操作的伪代码如下所示。State(NAV,channel state,node state)分别代表NAV值,信道状态和节点状态。在NAV值中,0代表NAV=0,1代表NAV≠0。信道状态分为忙和空闲。节点状态包括活跃和睡眠。φ代表任意状态。 算法:节点数据传输。 1 if node A has data to transmit then 2 node A contends the channel; 3 node A detects the queue length L; 4 switch the state(NAV,channel state,node state) do 5 case(0,idle,active); 6 ifL>2nmaxthen 7 double the dutycycle 8 set NAV=2Ta-Td-Tcontend 9 else ifL 10 half the dutycycle 11set NAV=L*(tpacket+tack) 12 end if 13 else 14 keep original dutycycle 15 set NAV=Ta-Td-Tcontend 16 end if 17 node A send beacon packet to node B 18 case(0,φ,sleep) 19 node continues sleep and waits for next cycle 20 case(0,φ,φ) 21 node countdowns NAV 22 else if node A received the beacon packet then 23 check flag 24 if flag=1 then 25 setTa=2Ta 26Ts=T-2Ta 27 node A replies ACK to sender 28 else 29 node A replies ACK to sender 30 end if 31 end if 32 else 33 node keeps active until the end ofTlisten 34 node turns to sleep and wakes up in the next cycle 35 end if 当节点唤醒之后,先监听信道,若检测到信道忙则进入睡眠状态倒计时NAV,当NAV=0时且节点处于活跃状态则再次接入信道,否则继续睡眠等待下一周期。若检测到信道空闲且NAV=0,那么根据当前缓冲区长度判断是否需要更改占空比,若负载过大,则将占空比加倍,过小则将占空比减半,并且设置NAV持续时间占用信道发送数据,若负载正常则占空比不变;如果一个节点在最大监听时间内没有事件发生,即不发送数据也不接收数据,直接转入睡眠状态节省能量。图4给出了节点的有限状态机转换图。 图4 有限状态机 为了验证QL-MAC的性能,在OMNET++(Version:5.2.1)仿真器中对QL-MAC协议和X-MAC,S-MAC协议在端到端时延和能量有效性方面作性能比较。S-MAC是无线传感器网络的典型同步MAC协议,而X-MAC解决了异步MAC协议中前导符过长的缺点,二者在无线传感器网络中都表现出了很好的性能。使用链式拓扑和星型拓扑。在仿真中,每个节点之间的距离是200 m,通信范围是250 m,确保节点仅能和一跳邻居通信。采用单信道进行通信,节点工作在半双工模式下,不考虑干扰,利用源节点产生数据分组的时间间隔来表示网络中的负载情况。设置此间隔从1 s变化到10 s,当间隔为1 s的时候表示此时网络负载最高,10 s时表示网络负载最低。在实验过程中,每个仿真运行60 s,节点初始占空比为10%,每个周期为1 s。 图5 端到端时延对比 如图5所示,不论链式拓扑还是星型拓扑,随着包间隔时间的增加,X-MAC的网络延迟逐渐降低并趋于平稳,当包间隔时间为10 s时,网络延迟最小。在链式拓扑下,QL-MAC的时延逐渐增加然后趋于平稳,这是因为QL-MAC在高负载时,增加活跃时间,减少睡眠可以获得比低负载下更好的时延,即使后来时延增加也是低于X-MAC。在星型拓扑下,高负载时节点竞争激烈,X-MAC的preamble包竞争变强,导致比链式更高的时延,但是当负载低时,由于跳数减少时延下降明显,此后趋于平稳。QL-MAC在星型的高负载下也是竞争激烈,相比链式时延增加,但是仍然低于X-MAC,随负载变低,QL-MAC的优势逐渐降低,但是仍然和X-MAC不相上下。 图6 节点平均能量消耗对比 从图6可以看出,随着网络负载变低,系统消耗的平均功率在降低。当高负载时,X-MAC数据传输效率低,节点需要唤醒睡眠多次才可传完,而QL-MAC协议会根据高负载延长活跃时间,减少多次睡眠唤醒之间消耗的能量,从而节约小部分能量,在低负载下QL-MAC优势更加明显。总之,QL-MAC协议在能量有效性方面比S-MAC和X-MAC要好。 提出了一种基于CSMA和缓冲区队列长度的异步MAC协议,主要目的是用来减少动态链路负载下的端到端时延。该协议使用CSMA争用信道,从发送节点出发根据缓冲区队列长度自适应改变节点的睡眠时间,当网络负载较大时,增大活跃时间,当网络负载较小时,延长睡眠时间,并通知接收节点做出相应改变。最后通过仿真表明,该协议获得了良好的时延和高能效。1.4 虚拟载波监听
2 节点操作
3 仿真与分析
4 结束语
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!