物联网与无线传感器网络(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.4.1 基于数据的路由协议

无线传感器网络是一种以数据为中心的网络,因此以数据为中心的路由协议是专门针对无线传感器网络设计的,在无线传感器网络中也是提出最早的一类路由协议。目前有许多比较经典的路由协议算法,下面介绍两种比较有代表性的路由协议算法,即传感器信息协商协议(Sensor Protocol for Information via Negotiation,SPIN)和定向扩散(Directed Diffusion,DD)路由协议算法。

1. SPIN路由协议算法

SPIN是一种以数据为中心的路由协议,主要是针对泛洪路由协议做了一定的改进。

1)基本思想

SPIN是一类基于协商、以数据为中心的路由协议。SPIN假设所有的网络节点都是潜在的Sink节点,某一个要发送数据的节点把数据传送给任何需要该数据的节点,并通过协商机制减少网络中传输的数据量。节点只广播其他节点没有的数据以减少冗余数据,从而有效地减少能量消耗。

SPIN使用三种类型的数据包,即ADV、REQ和DATA。

(1)ADV:广播数据包,当一个节点需要发送数据时,就向周围广播一个带有本节点属性、类型等信息的数据包,该数据包通常要远远小于数据本身的大小。

(2)REQ:请求包,如果接收到ADV的节点需要该数据就发送一个REQ。

(3)DATA:数据包,接收REQ后,要发送数据的节点就发送一个DATA,DATA中包含有效数据。

SPIN的协商过程采用了三次握手方式,其工作流程如图4.1所示。源节点在发送DATA信息前,首先向相邻节点广播包含DATA数据描述机制的ADV信息,如图4.1(a)所示;需要该DATA信息的相邻节点向源节点发送REQ请求消息,如图4.1(b)所示;源节点在收到REQ请求信息后,有选择地将DATA信息发送给相应的相邻节点,如图4.1(c)所示;收到DATA后,该相邻节点可以作为信息源,重复前面的过程将DATA信息传送给网络中的其他节点,如图4.1(d)、图4.1(e)和图4.1(f)所示。需要注意的是,当节点中已经存在相邻节点传送的DATA数据时,就不会再发送REQ报文来请求数据,如图4.1(e)所示,有一个节点没有发送REQ消息,网络中所有节点最终都将获得该数据。

图4.1 SPIN工作流程

SPIN除了提供协商机制,还引入了基于阈值的能量适应机制,当节点发送数据时,首先查看其剩余能量,如果能量充足的话,则采用协商过程进行通信;否则便减少参与行为,并通过进一步协商以确保参与后其剩余能量仍高于最低能量阈值。

在SPIN中,节点不需要维护相邻节点的信息,这在一定程度上能适应节点移动的情况。在能耗方面,模拟结果证明SPIN比传统模式减少一半以上能耗。不过,该算法不能确保数据一定能够到达目标节点,尤其不适用于高密度节点分布的情况。

2)主要问题

SPIN通过节点之间的协商,解决Flooding协议和Gossiping协议的内爆和重叠问题。

Flooding协议是一种最原始的泛洪协议,用于无线传感器网络,在此协议中,节点从其他相邻节点接收到消息之后立即向其所有相邻节点广播,直至数据到达目的节点才停止。例如,节点S想要将数据发送给目的节点D,可以通过三个相邻节点A、B、C来实现,直至传送到目的节点D。但是,Flooding协议存在严重的不足:内爆和重叠。内爆现象是指节点在同一时刻接收到了多份相同的数据,如图4.2所示,节点D收到来自A、B、C三个节点的数据,这将浪费大量能量。重叠现象是指节点多次收到来自同一区域传感器节点的关于同一事件的数据,如图4.3所示。重叠区域内的事件被相邻的节点探测到,那么这个事件就会通过这两个节点传到Sink节点,当节点更多时,传送的次数也就更多,浪费了大量能量。

图4.2 内爆现象

图4.3 重叠现象

Gossiping协议对Flooding协议进行了一定的改进,在发送数据时不再采用广播的形式,而是随机选取相邻节点来进行数据的传送,这就抑制了内爆现象,但却无法解决由重叠现象引起的事件的重复发送问题。

SPIN通过协商机制,解决了传统的Flooding协议和Gossiping协议的内爆和重叠问题,另外SPIN还能够进行简单的能量监测,即根据能量剩余值来进行路由的选择,并进行简单的数据融合,从而大大减小网络负载。

数据融合的核心思想是以数据为中心,数据融合可在多层实现,在转发数据的过程中,中间节点不是根据最短路径来传送数据的,而是首先对多个数据源的数据进行融合处理,提取里面的有效信息,然后再转发给下一跳节点,从而不用多个数据源同时对Sink节点发送数据,可大大减小网络负载。

总的说来,SPIN非常简单而且不需要维护周围节点的状态,协议的转发只牵涉到相邻节点之间的数据通信。但是这样也存在一个问题,即如果相邻节点都不需要接收该信息,那么该信息将不能够继续转发,Sink节点将接收不到该信息;另外,SPIN没有考虑到多个节点同时向一个节点发送消息的情况,有关的退避算法机制还需要进一步考虑。

2. DD路由协议算法

定向扩散(Directed Diffusion,DD)路由协议是一种以数据为中心的路由协议,采用的是基于查询的方法。与上面所提到的SPIN有所不同,DD路由协议是通过Sink节点在全网内广播自己需要的数据的,同时在广播的过程中形成了一条由节点到Sink节点的路径,节点采集到数据之后将会沿着这条路径来传送数据,Sink节点通过选择一条最优的路径来接收数据。

1)基本思想

DD路由协议提供了一种查询的方法,该协议中包括三个不同的阶段:兴趣扩散、梯度建立和路径加强。如图4.4所示,Sink节点首先向全网广播一条被称为“兴趣”的数据包,告知自己需要的数据,这就是兴趣扩散,它是建立路由的开始。兴趣数据包被中间节点逐步转发到网络中相关节点,在这个过程中,逐步地转发建立了多条从兴趣的源节点到Sink节点的路径,这个过程就叫作梯度建立。依据最低代价的原则,兴趣数据包传送到相关数据之后,梯度建立也就完成了。当网络中的相关节点采集到兴趣数据包中所要求的数据之后,也采取广播的方式来向Sink节点发送数据,通过多跳方式最终传送到Sink节点,Sink节点就会从多条路径接收到源节点传送过来的数据。之后,Sink节点根据最小代价原则从这些路径中选择一条最优的路径来继续接收数据,其余路径将被放弃。

图4.4 定向扩散路由协议

2)主要问题

定向扩散路由协议的主要问题就是怎样有效地在Sink节点兴趣扩散过程中进行路径的梯度建立,数据接收之后强化路径的最终选择和维护。

在兴趣扩散阶段,基站节点周期性地向相邻节点广播兴趣消息。兴趣消息中含有任务类型、目标区域、数据发送速率、时间戳等参数。每个节点在本地保存一个兴趣列表,对于每一个兴趣,列表中都有一个表项记录该兴趣消息的相邻节点、数据发送率和时间戳等任务相关信息,以建立该节点向基站节点传递数据的梯度关系。每个兴趣可能对应多个相邻节点,每个相邻节点对应一个梯度信息。通过定义不同的梯度相关参数,可以适应不同的应用需求。每个表项还有一个字段用来表示该表项的有效时间值,超过这个时间后,节点将删除这个表项。当节点收到相邻节点的兴趣消息时,首先检查兴趣列表中是否存有参数类型与收到兴趣相同的表项,而且对应的发送节点是该相邻节点。如果有对应的表项,就更新表项的有效时间值:如果只是参数类型相同,但不包含发送该兴趣消息的相邻节点,就在相应的表项中添加这个相邻节点;对于其他任意情况,都要建立一个新的表项来记录这个新的兴趣。如果收到的兴趣消息和节点刚转发的兴趣消息一样,为了避免消息循环则丢弃该信息;否则,转发收到的兴趣消息。

当传感器节点采集到与兴趣匹配的数据时,把数据发送到梯度上的相邻节点,并按照梯度上的数据传输速率设定传感器模块采集数据的速率。由于可能从多个相邻节点收到兴趣消息,节点向多个相邻节点发送数据,基站节点可能收到经过多个路径的相同数据。中间节点收到其他节点转发的数据后首先查询兴趣列表的表项,如果没有匹配的兴趣表项就丢弃数据;如果存在相应的兴趣表项,则首先检查与这个兴趣对应的数据缓冲池(Data Cache),数据缓冲池用来保存最近转发的数据,如果在数据缓冲池中有与接收到的数据匹配的副本,说明已经转发过这个数据,为避免出现传输环路而丢弃这个数据;否则,检查该兴趣表项中的相邻节点的信息,如果设置的相邻节点的数据发送速率大于或等于接收的数据速率,则全部转发接收的数据;如果记录的相邻节点数据发送速率小于接收的数据速率,则按照比例转发。对于转发的数据,数据缓冲池中保留一个副本,并记录转发的时间。

定向扩散路由协议通过正向增强机制来建立优化的路径,并根据网络拓扑的变化修改数据转发的梯度关系。兴趣扩散阶段的目的是建立源节点到基站节点的数据传输路径,数据源节点以较低的速率采集和发送数据,这个阶段建立的梯度称为探测梯度(Probe Gradient)。基站节点在收到从源节点发来的数据后,启动建立到源节点的增强路径,后续的数据将沿着增强的路径以较高的数据速率进行传输。加强后的梯度称为数据梯度(Data Gradient)。假设以数据传输延迟作为路由增强的标准,基站节点选择先发来最新数据的相邻节点作为增强路径的下一跳节点,向该相邻节点发送路径增强消息,路径增强消息中包含新设定的较高发送数据速率值;相邻节点收到消息后,经过分析确定该消息描述的是一个已有的兴趣,只是增加了数据发送速率,则断定这是一条路径增强消息,从而更新相应兴趣表项中到相邻节点的发送数据速率。同时,按照同样的规则选择增强路径的下一跳相邻节点。

路由增强的标准也不是唯一的,可以选择在一定时间内发送数据最多的节点作为路径增强的下一跳节点,也可以选择数据传输最稳定的节点作为路径增强的下一跳节点。在增强路径上的节点如果发现下一跳节点的发送数据速率明显减小,或者收到来自其他节点的新位置估计信息,则推断增强路径的下一跳节点失效,就需要使用上述路径增强机制重新确定下一跳节点。

定向扩散路由协议是一种经典的以数据为中心的路由协议。基站节点根据不同的应用需求定义不同的任务类型、目标区域、上报间隔等参数的兴趣消息,通过向网络中泛洪这些查询请求进行路由的建立。收到消息的中间节点通过对兴趣消息的缓存与合并,根据参数值计算创建包含数据传输率、下一跳节点信息的数据传递梯度,从而建立多条指向基站节点的路径。兴趣消息中指定的地理区域内的传感器节点启动监测任务,并周期性地上报监测数据。基站节点在数据传输过程中,选择某条路径发送上报间隔更小或更大的兴趣消息,以达到减弱或增强路径的目的。定向扩散路由协议由于采用多路径,鲁棒性好;使用数据聚合能减少通信量;基站节点根据实际情况增强路径可以合理地利用能量;使用查询驱动的机制建立路由,避免了保存全网信息。但是为了动态适应节点失效、拓扑变化等情况,定向扩散路由协议需要周期性地广播兴趣消息,另外,梯度的建立也需要较大的时间和能量开销。