The ContikiMAC Radio Duty Cycling Protocol

 

The ContikiMAC Radio DutyCycling Protocol

RDC机制之ContikiMAC协议

 

目录

摘要... 2

1 介绍... 2

2 ContikiMAC.. 3

2.1 ContikiMAC时序... 4

2.2 包检测和快速睡眠... 6

2.3锁相传输... 7

3. 实现... 8

4. 评估... 9

4.1 微观基准... 10

4.2 网络功率消耗... 14

5 相关工作... 15

6 总结... 15

  

 

摘要

  为了降低系统功耗,低功耗无线设备必须尽可能地将无线电收发器关闭,但是为了接收来自邻居节点的通信消息,它必须被经常唤醒。本论文描述了ContikiMAC RDC(Radio-Duty-Cycling)机制,该机制通过使用一系列时序限制,从而达到既关闭收发器又能高效唤醒的目的。在ContikiMAC机制的作用下,参与网络通信节点的无线电开关在99%的时间内都是关闭的。本论文描述了ContikiMAC机制,监测了ContikiMAC操作的能耗,评估了快速睡眠和锁相优化的效率。

1 介绍

  低功耗无线设备必须具有严格的电源消耗以达到增加设备寿命年限的作用。在低功耗无线设备的所有组件中,无线收发器的功耗最大。无线收发器被动接收其它设备消息与主动向其它设备发送消息所消耗的电量是一样的,所以为了达到节能的目的,收发器必须被完全关闭。但又由于收发器在关闭状态时不能接收到任何数据,所以需要一种机制周期性地打开收发器。在这些年,很多种这样的机制被提出来。在Contiki2.5中,默认的机制是ContikiMAC

ContikiMAC设计的初衷是易于理解和实现。ContikiMAC只使用异步机制,无需发送信号消息,也没有附加包头。ContikiMAC包是普通的链路层消息。ContikiMAC具有显著的节能唤醒机制——周期性暂停(duty cycling)机制。该机制的实现依托于精确的时序——一系列严格的时序。除此之外,ContikiMAC使用最优化的快速睡眠和最优化的锁相传输。

ContikiMAC中的机制受到已经存在的周期性暂停协议启发。很多协议都使用了周期性唤醒的思想,比如B-MACX-MACBox-MAC。最优化的锁相技术最先被WiseMAC提出,现在也已被用在其它很多协议中。数据包的多拷贝已经被TinyOS Box-MAC协议所使用。

  本论文的剩下部分以如下形式组织:第二章描述ContikiMAC机制及其基本原则,第三章描述Contiki2.5ContikiMAC协议的实现过程,第四章在一个数据采集网络中评估ContikiMAC的能量效率,第五章描述相关工作,第六章作总结。

2 ContikiMAC

ContikiMAC是一个RDCRadio DutyCycling)协议,使用周期性唤醒机制来侦听来自邻居节点的消息包。对于接收器,如果在被唤醒时检测到了数据包,它将继续保持唤醒状态来接收包。当成功接收到包后,接收器发送一个链路层确认消息。对于发送端,如果想发送一个包,就需要周期性地发送该包,直到收到来自接收器的链路层确认消息。广播包不会引起链路层确认消息,相反,发送端在整个唤醒间隔内都将周期性发送该包,以确保所有的邻居节点都能收到广播包。图1和图2展示了ContikiMAC的机制。 

 

1. ContikiMAC:节点在多数时间处于睡眠状态,且被周期性唤醒以检测无线信号。如果检测到一个传输包,接收器就保持唤醒状态以接收下一个包并发送一个链路层确认消息。为了发送包,发送端周期性地发送同一个包直到收到链路层确认消息。

 

 

2. 广播消息在两个唤醒间隔内周期性地发送

2.1 ContikiMAC时序

ContikiMAC的节能唤醒机制依赖于传输时精确的时序ContikiMAC使用空闲信道评估(Clear Channel Assessment CCA)机制,也即使用接收到的信号强度(Reveived Signal Strength IndicatorRSSI)来判断信道上的状态。如果RSSI低于一个给定的阈值,CCA返回一个正值,表明信道是空闲的;如果RSSI高于该阈值,CCA返回一个负值,表明信道正在被使用。

 

3. ContikiMAC传输以及CCA时序

 

ContikiMAC的时序如图3所示,从图中可以看出其时序要求:

ti:每个包传输之间的间隔 
tr:RSSI
需要的稳定时间,也是CCA需要的稳定时间 
tc:
每个CCA之间的间隔 
ta:
接收到一个包与发送确认消息之间的间隔 
td:
成功检测到接收端的确认消息所需要的时间。

这些时序必须满足很多约束条件。首先,包之间的时间间隔ti必须比CCA之间的时间间隔tc小,这能保证第一个CCA或者第二个CCA检测到有包在传输。如果titc大,就有可能两个包都不能检测到有包在传输。

如图4所示,ContikiMAC所支持的最短包大小也依赖于ti tc的时序。为了确保两个CCA能够检测到包,传输包不能太短以致于在两个CCA之间就传送完了而无法检测到。明确地,最短包的传输时间必须必大于tr+ tc+tr 

 

4. 包必须足够大

CCA检测到包时,ContikiMAC保持无线收发器处于开启状态,以接收完整的包,并发送确认消息。传送确认包需要的时间ta和确认包被检测到所需要的事件td为检测间隔tc建立了更小的范围。 
  现在我们可以建立ContikiMAC的完整时序约束条件: 

ta+td <ti < tc < tc+2tr <ts (1)

方程1中的某些参数被设定为常量。首先,包接收和确认消息传输之间的间隔taIEEE 802.15.4中被定义为12个符号。在802.15.4中,一个符号是4/240ms,所以ta=48/250=0.192ms。其次,IEEE802.15.4接收器能够可靠检测确认消息(确认消息前有4字节长的先导码和1字节长的帧定界符)需要花费40/250ms,所以td=40/250。最后,CC2420收发器的数据手册中给定tr0.192ms 
  将常量替换了,方程1变为了

0.352 < ti <tc < tc + 0.384 < ts (2)

剩下的变量ti,tcts都是可选的。从方程2我们可以得到一个下界,即ts > 0.736ms,这就是我们能处理的包的最小长度。在一个比特流为250kbps的条件下,这意味着包至少需要23字节长(包括先导码,帧定界符和长度字段,所以还剩下16字节的数据字段)。 
  为了确保所有的包都比最小包尺寸长,有些包可能会被填充附加信息。如果网际层协议能保证包始终大于给定的最小包长,就不需要填充帧。例如,如果网际层的协议是IPv6IPv6包头的长度总是比IEEE 802.15.4链路层最小包尺寸大。如果使用IPv6头部压缩协议6LoWPAN,包可能太小,因此采取的措施是:如果包尺寸比所给尺寸阈值小,就不进行压缩。 
  在Contiki 2.5中,ContikiMAC所使用的配置:

  • ti = 0.4 ms
  • tc = 0.5 ms
  • ts = 0.884 ms

2.2 包检测和快速睡眠

ContikiMACCCA包检测是不可靠的:它只检测信号强度是否比一个给定值大。检测到无线信号可能是邻居节点正在向本接收器传输包,也可能是邻居节点正在向其它接收器传输包,甚至是其它设备(不属于该网络,比如一个人带了一个手机进入该范围)发出的无线信号。ContikiMAC必须对此进行辨别,并作出相应的应对措施。 
  如果一个邻居节点正在向一个接收器传输一个包,那么接收器就应该保持在唤醒状态来接收完整的包,并发送一个链路层确认消息。而检测到该包的其它节点,应该再次快速进入睡眠状态。不过,这些节点并不能快速进入睡眠,因为它们必须接收完整的包。有一个很简单的方法,当CCA检测到无线信号时,在tl +ti + tl时间内一直保持唤醒状态。 
  其中,tl是可能的最长传输时间,这确保包能够完整地被接收器接收到(如果在包传输开始时CCA就检测到了信号)。 
  最优化快速睡眠能够让接收器接收到无线噪声时更早地进入睡眠状态。首先,如果CCA检测到无线信号,且持续时间大于tl,且CCA检测到噪声,那么节点就回到睡眠。也就是说,信号活跃期后面没有跟随一段信号安静期。第二,如果信号活跃期后跟随着一段信号安静期,但是安静期时间比ti(两个成功传输的时间间隔)小,那么节点就回到睡眠。第三,如果信号活跃期后跟随一个时间长度正确的安静期,然后再跟着活跃期,但是没有检测到包头,那么节点就回到睡眠状态。该过程如图5所示。 

 

5. ContikiMAC最优化快速睡眠:如果在tl之前一直没检测到安静期,进入睡眠;如果安静期大于ti,进入睡眠;如果没有接收到包,进入睡眠

2.3锁相传输

  如果我们假设每个接收器都有一个周期的、稳定的唤醒间隔,那么发送器就能利用接收器的唤醒相位来优化它的传输。发送器可以通过接收器发送的链路层确认消息来推断出接收器的唤醒相位。由于接收器必须处于唤醒状态来接收包,如果发送器接收到一个链路层确认消息,就可以假设发送器已经在接收器的唤醒窗口中正确地传输了包,因此就找到了接收器的唤醒相位。发送器在知道接收器的相位后,就可以在接收器下次将要唤醒时开始发送下一个包。整个流程如图6所示。 

 

6锁相传输:成功传输一个包后,发送器获取到接收器的唤醒相位

3. 实现

Contiki 2.5ContikiMAC中,采用实时real-time定时器(rtimer)来执行周期性唤醒功能,这样就能保证即使很多进程在运行,也能保证ContikiMAC的稳定性。实时定时器能够在精确的时间点上抢占任何Contiki进程。ContikiMAC以一个protothread进程的方式运行唤醒机制,被一个周期的实时定时器调度。这个protothread进程执行周期性的唤醒和最优化快速睡眠。 
  包的传输是用通用的Contiki进程驱动的。如果一个唤醒进程在无线收发器忙的时候被调度,唤醒定时器将在一个唤醒间隔后调度一个新的唤醒进程

锁相机制独立于ContikiMAC,以模块的形式实现,便于用在其他的周期性暂停机制中,比如Contiki X-MAC锁相机制维护了一个邻居链表以及它们的唤醒相位ContikiMAC传输逻辑记录了每个包传输时的时间,当它收到一个链路层确认消息后,将上一个数据包的传输时间通知给锁相模块。该时间近似于接收器的唤醒锁相。 
在开始传输之前,ContikiMAC传输逻辑调用锁相模块,检测其是否记录了接收器的唤醒相位。如果记录了,锁相代码就将包放到传送队列中排队,并在预期的接收器唤醒时间点设置一个回调定时器ctimer。当产生回调时,ContikiMAC就会开始传输。这种情况下的传输将会比普通传输时所消耗的时间短很多,因为传输是在邻居节点将要唤醒时开始的。传输时间少了,进一步也减小了拥塞。 
  如果一个被记录的邻居节点被重启了,或者它的时钟与记录的唤醒相位产生了大的漂移,那么传输将会失败。为了防止这种情况发生,ContikiMAC为每个邻居节点维护了一个计数器,用于记录失败的次数。当失败次数达到一个固定值的时候(在Contiki 2.5中该值是16),就将该节点从链表中删除。同样地,如果在一个固定的时间内(在Contiki 2.5中时30秒)没接收到链路层确认消息,无论计数器的值是多少,都会从链表中删除该节点。

4. 评估

  本论文对ContikiMAC做了两方面的评估:个体ContikiMAC的能耗和数据采集传感器网络中ContikiMAC的能耗。除了这里所展现的结果,我们还将ContikiMAC运用在许多最近的工作中。更多的关于ContikiMAC的性能结果,读者可参考Dunkels等人的文献[3]DuquennoyOsterlindDunkels 的文献[7]Duquennoy等人的文献[8]KovatchDuquennoyDunkels的文献 [16]LundenDunkels的文献[17]TsiftesDunkels的文献[24]

4.1 微观基准

  我们通过运行ContikiMACTmote Sky mote来测量个体能量消耗。我们将一个100欧姆的电阻与Tmode Sky电源串联,然后使用示波器测量电阻上面的电压。ContikiMACTmote Sky I/O的某个引脚上注册无线信号的状态,其中高电平表示无线信号处于开启,低电平表示无线信号处于关闭,然后用相同的示波器测量这个引脚的状态。测量时的唤醒频率是8Hz,即唤醒间隔为125ms 
  图7画出了在没有任何包传输时的ContikiMAC的唤醒情况。在下面那幅图中,我们可以看到,无线信号两次被打开以执行两次CCA。图8显示了当第二个CCA检测到一个假的无线信号活跃期时的ContikiMAC唤醒状态。无线信号继续保持了一会儿开启状态,直到最优化快速睡眠关闭了无线信号。 

 

7. 检测不到信号时的ContikiMAC唤醒情况。在下图中可以看到两个CCA

 

 

8. 检测到虚假无线信号是的ContikiMAC唤醒情况


  图9和图10分别显示了接收广播和组播的情况。在这两种情况下,作为ContikiMAC唤醒机制的一部分,无线信号都被打开,第一个CCA就检测到了活跃的无线信号。我们可以看到,在接收组播的过程中,无线信号开启的时间更长。这是因为接收确认消息也是接收组播包的一部分。 

9. 接收广播:唤醒、包检测、接收广播包

 

 

10. 接收组播:唤醒、包检测、接收组播包


  图11描述了广播传输情形。广播必须唤醒并传递包到所有的邻居,因此它在整个唤醒间隔期间内都在运行。由于广播不需要接收链路层确认消息,因此发送器可以在两个传输之间关闭无线信号,以达到节能目的。图12描述了向周围邻居发送组播消息的情形。在这种情形下,邻居大约每隔60ms被唤醒一次,因此发送器每隔70ms就重复传输包。传输的开始阶段是信道空闲检测的初始化阶段。经过锁相技术后,随后的传输可以被优化,即在邻居即将唤醒时开始传输。图13描述了经过锁相优化后传输次数减小的情形。 


11. 广播传输

 

 

12. 非同步组播传输(随后在110ms时被唤醒)

 

 

13. 同步组播传输(随后在110ms时被唤醒)


  通过计算从图7到图13的面积,我们可以得到每个情形下的能源消耗,其计算结果如图14所示。我们可以看到,广播传输比唤醒所需要的成本大了很多数量级。这是非常好的:唤醒时ContikiMAC中最常见的操作——每秒会执行很多次。 
  通过图14,我们可以比较ContikiMAC唤醒操作与其他周期性暂停机制中唤醒操作的成本。表1展示了在ContikiMACContiki X-MAC,以及HuiCuller的周期性暂停机制[14]中唤醒的成本。 

 

14. 单一ContikiMAC操作的能源消耗

 

Protocol

Energy (uJ)

X-MAC [1]

132

Hui and Culler[14]

54

ContikiMAC

12

1:唤醒操作的能源消耗比较

4.2 网络功率消耗

  为了评估ContikiMAC消耗的网络功耗和优化效率,我们在Contiki仿真环境中运行了一系列的仿真。Contiki仿真环境由Cooja网络仿真器和MSPsim设备仿真器组成。MSPsim提供了精确循环(cycle-accurate)的Tmote Sky仿真和CC2420收发器的精确符号仿真。它使在一个时序精确、受约束的环境中研究ContikiMAC行为成为可能。 
  我们使用具有20个节点的仿真拓扑运行了一系列仿真。所有的节点都运行ContkiContiki Collect协议Contiki Collect协议是Contiki Rime协议栈的一部分,它使一个地址开发的采集协议。Contiki Collect协议建立了一个树根,并向包的路由方向扩展。我们通过对Contiki Collect协议做实验[15],发现该协议与其它数据采集协议相似,比如TinyOS采集树协议[12]

节点每隔120秒向根节点发送一个数据包,每个节点发送100个数据包,直到根节点收到所有数据包,仿真才结束。在所有的仿真实验中,根节点可以成功接收到所有的数据包。

5 相关工作

  无线收发器的高功耗是一个热点问题,这使得许多研究都花在RDC上面。RDC机制可以分为两类:同步和异步。同步机制依赖于每个正在被同步的邻居节点,而异步机制不依赖于任何同步。异步机制可以进一步被划分为发送器使能和接收器使能。在发送器使能机制中,由发送器使能发送器和接收器之间的通信;在接收器使能机制中,由接收器初始化通信。ContikiMAC是一个发送器使能的异步机制 
  异步协议的优点是不需要同步,且其研究社区已经扩展了很多不同类的异步协议。早期关于传感器网络架构的工作发现了一个简单异步机制——低功耗侦听,节点被周期性唤醒,以侦听媒介中有无唤醒请求。如果发现了唤醒需求,无线信号就保持唤醒以接收包。当要发送包时,发送器首先发送一个唤醒请求,以唤醒邻居节点。后来,低功耗侦听机制被移植到X-MAC中。在X-MAC中,唤醒请求由一系列的选通(strobe)包组成。当接收器被唤醒后,它发送一个链路层确认消息,以表示它处于唤醒状态且已经做好接收包的准备。ContikiMAC与低功耗唤醒机制及其相似,但是在数据包传输时具有精确的时序,它的唤醒机制更高效。

6 总结

  本论文描述了为低功耗无线传感器网络设计的ContikiMAC RDC机制,即Contiki 2.5中默认的RDC机制。ContikiMAC设计的初衷是易于理解和实现,使用异步和隐式同步,不需要附加头部。ContikiMAC使用一个精心设计而又简单的时序策略使唤醒更高效,使用锁相机制使传输更高效,使用快速睡眠机制使接收器收到错误信号时快速进入睡眠。测试证明,唤醒机制比已存在的周期性暂停机制更省电,锁相和快速睡眠也使网络功耗降低10%80%(依赖于网络中设备的唤醒频率)。

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值