码迷,mamicode.com
首页 > 其他好文 > 详细

传感器网络的通信与组网

时间:2016-05-08 13:34:03      阅读:362      评论:0      收藏:0      [点我收藏+]

标签:

1.MAC协议

  在无线传感器网络中,如果有多个节点同时接入信道将导致分组之间相互冲突,这样接收方将难以分辨出接收到的数据,从而降低了网络吞吐量浪费了信道资源。传感器网络通信的介质是无线频谱,它是一种稀缺资源。因此在资源稀缺的情况下我们需要提高网络吞吐量,介质访问控制(Medium ACCess Control)MAC协议就是通过一组规则和过程来有效、有序、公平地使用共享介质。它决定者无线信道的使用方式,分配着传感器节点之间有限的无线通信资源,构建传感器网络系统的底层基础结构。由于MAC协议处于传感器网络协议的底层部分,对网络性能影响较大。

  那现在假如需要设计出一个MAC协议,首先我们需要考虑的又是那个很无奈的话题,那就是节能,MAC协议需要在满足应用的需求后尽可能地节约能量。接着是扩展性,传感器节点需要自组织形成网络拓扑结构,这就需要MAC协议能够适应动态的变化。最后就是保证网络的可靠效率,包括上面提到的公平性、实时性、网络吞吐率等。我们知道传感器节点消耗能量从高往低是发送数据、接受数据、侦听数据和睡眠状态,其中睡眠状态消耗能量极低。为了节省能量,应该让传感器节点可以或在完成任务的情况下尽可能的处于睡眠状态。但是节点终究是要进行工作的,因此可以让节点处于侦听/睡眠混合状态,当有数据收发时节点就开启通信模块进行发送或侦听。如果没有数据需要收发,节点控制通信模块就进入睡眠状态。现在问题来了,那就是如何分配睡眠与侦听的时间。首先我们要保证节点睡眠时能够收到发送过来的数据,为此这需要节点与邻居节点之间协调它们的侦听和睡眠周期。

  在一个共享信道中,如果节点之间采用基于竞争的方式的MAC协议,这就需要保证节点之间尽可能的少产生碰撞,恰到时机的发送数据。当传感器网络的MAC协议采用固定分配信道还是随机访问信道方式来分类时,可将MAC协议分为三种:时分复用无竞争接入方式、随机竞争接入方式、竞争与固定分配相结合的方式。一般是采用随机竞争接入方式,典型的基于竞争的随机访问MAC协议采用是载波侦听多路访问CSMA接入方式,和TCP/IP协议簇里的CSMA/CD不同,这种MAC协议采用的是CSMA/CA方式。CSMA/CA指的是信号在传输之前,发射节点先侦听信道是否空闲,如果空闲则直接进入数据传输状态。如果存在载波,则会随机退避一段时间后重新检测信道。它与CAMA/CD的区别是由于无线网络的网卡不易检测信道是否发生冲突,因此CA无法检测冲突只能尽努力去避免冲突,而CD则是可以检测出冲突但无法避免。

2.IEEE 802.11 MAC协议

  上面讨论的是MAC协议的特点,接下来讨论的是具体的MAC协议。IEEE 802.11MAC协议分为分布式协调功能DCF和点协调PCF两种访问控制方式。DCF是基本访问控制方式。PCF是基于优先级的无竞争的访问方式,它的工作方式是AP会轮询当前节点,如果某个节点有数据要进行发送,则AP会以根据优先级赋予优先级更高的节点发送数据的权限。DCF则是采用随机竞争接入方式,节点在侦听到信道繁忙的时候会采用CSMA/CA机制,而且所有定向的通信都会采用立即的主动确认机制,如果发送方没有收到接收方的ACK帧则会重传数据。下面是一个DCF工作方式下的流程图。

技术分享

  在DCF工作方式下如果A要给B发送数据,那么A会广播RTS给B和C,也就是A的无线通信范围的节点。RTS指的是request-to-send,RTS的作用就是告诉其他节点我马上要发送数据了,我发送数据的时间在RTS数据包中,这个时间的官方名词是一个有点高大上的名词NAV(网络分配矢量),还请大家在NAV时间段里面不要发送数据。B收到RTS包后会返回一个CTS,英文是clear-to-send。这个数据包会广播给B所在的通信范围,其中也包括NAV。这样A收到数据包后便开始舒服的发送数据包,此时C和D不会发送任何数据,直到NAV为0,NAV可以理解为一个计数器并在不断减少,当减少到0时就说明此时信道为空闲状态。当B收到数据后还会返回一个ACK给A。

  现在问题又来了,当NAV结束后,此时A、B、C、D同时处于空闲状态,都可以发送数据包。那么此时应该选择谁呢?IEEE 802.11MAC协议规定了三种基本帧间间隔IFS,用来表示无线信道的访问优先级。当上述情况发生时,谁的IFS最小,那谁就先发送数据。下面来看看这三种帧间间隔:SIFS(short IFS)最短帧间间隔,显然它是最小的优先级最高,用于立即响应的服务比如ACK和CTS等;PIFS(PCF IFS)PCF方式下的帧间间隔,前面提到的PCF下有一个优先级指的就是PCF,它表示获得无竞争访问周期里访问信道的优先权;DIFS(DCF IFS)DCF工作方式下的帧间间隔。现在来看此时的ABCD4个节点,如果有节点是采用SIFS,那这个节点就会先发送数据。当然D与AC不在一个通信范围,它与B在同一个范围,如果此时D发送数据给其他节点导致B检测到信道繁忙那B就可以从ABC的竞争中排除了。现在我们就以ABC来讨论同时采用DIFS的情况,如下图所示。此时信道空闲这3个节点会等待信道的空闲时间超过一个DIFS,结束DIFS后这3个节点就要开始竞争了。此时ABC会同时进入一个退避时间,退避时间的设置是经过很多实验和数学共同综合出来的结果这里就不讨论了,其实我也不会只知道个大概。节点在进入退避状态时会启动一个退避计时器,注意只有当信道空闲时才会进行计时,如果信道处于忙碌状态则会停止计时。现在最先完成退避时间的节点将成为竞争优胜者发送数据。

技术分享

  为了提高性能802.11MAC采用了立即主动确认机制和预留机制。立即主动确认机制指的是收到数据就会回复一个ACK帧,它的IFS为SIFS且主动确认机制只用于有明确目标地址的帧,不可以用于广播和组播。预留机制指的就是RTS/CTS模式,在RTS到ACK帧这之间的时间信道将一直被这次数据交换过程所占用。一旦节点收到RTS帧或CTS帧节点将必须更新它们的NAV值。

3. S-MAC

  S-MAC协议是在802.11MAC的基础上进行改进而得出的一个适用于无线传感器网络的MAC协议,它与802.11MAC最大的不同仍然还是那个永恒的话题,省电。S-MAC协议适用于传感器网络数据量不是很大,网络内部就可以处理和融合数据以减少通信量且能够容忍一定程度的通信时延。前辈们经过总结得出传感器网络无效能量主要消耗在4个方面。当采用竞争的方式去使用共享的无线信道时,由于节点不知道邻居节点何时会向自己发送数据,故节点始终保持在接收状态,从而消耗了无用的能量;当邻居节点同时向同一节点发送多个数据帧时会造成信号相互干扰使得接收方无法正确的接收数据,这将会导致发送方重新发送从而造成能量的浪费;网络节点可能会接收和处理无关的数据,这会造成接收与处理模块消耗较多的能量;控制消息过多将会消耗较多的网络能量。针对这四种情况S-MAC有四种解决这四个问题的机制。

  周期性侦听和睡眠机制将时间分为侦听工作阶段和睡眠阶段,侦听/睡眠时间的持续时间要根据应用情况进行设置。当节点处于睡眠阶段时会关闭无线电波,这期间会缓存接收到的数据,在工作阶段进行集中处理,也就是说睡眠状态依旧可以接受数据只是不会及时处理罢了。显然为了节省能量节点要尽可能的处于睡眠状态才行,周期性侦听和睡眠机制会选择一个周期,然后节点周期性的进入侦听和睡眠。为了进行相互通信,相邻节点之间应该尽量维持侦听/睡眠调度周期的同步,为此节点需要将自己的调度周期发送给相邻节点。当节点开始工作时它会先侦听一段时间,如果侦听期间收到其它节点发过来的调度信息则将自己的调度周期与接收到的同步,然后等待一段时间后广播自己的调度周期给相邻节点。现在当节点又收到相邻节点的不同调度,且这些调度信息与自己的调度信息没有相同的则会采纳邻居的调度舍弃原来自己的调度。但是如果这些不同的调度中有与自己相同的调度,则会将那些不同于自己调度的调度信息添加到调度表中。具有相同调度的节点就是前面提到的分层式结构的一个簇,簇头会记录两个或多个调度信息以便还可以与非同步的节点通信。对于新加入的一个节点,它可能会收到不同调度,这个新节点可以选择先收到的调度并记录另一个调度信息。

  流量自适应侦听机制指的是在一次通信中,通信结束后双方不会立即进入睡眠状态,而是保持侦听一段时间。这样的好处就是这段时间如果节点收到RTS控制帧可以立刻回复CTS,无须等待下一次调度侦听周期。没有收到信息的话节点就会进入睡眠状态等待下一次侦听。

  冲突和串音避免机制指的就是采用802.11中的CSMA/CD以及RTS/CTS机制,不同点在于当邻居节点进入NAV计时功能的时候它会进入睡眠状态。

  消息传递机制可以很好地支持长消息的发送。无线信道的传输差错与消息长度成正比,也就是说消息越短消息传输成功率越高。消息传递机制根据这一原理将长消息拆分成若干个短消息,采用一个RTS/CTS握手机制预约这个长消息的发送时间并集中连续的发送全部短消息。这样做有2个好处,一是减少控制信息,二是提高发送成功率。它与802.11MAC的区别如下图,802.11还考虑到了公平性,握手机制只会预约一个短消息。

技术分享

传感器网络的通信与组网

标签:

原文地址:http://www.cnblogs.com/fangyz/p/5469361.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!