1.本发明涉及水声传感器网络技术领域,尤其集中于水声传感器网络路由层,具体为一种适合水声传感器的网络传输方法。
背景技术:2.相比于无线电波传输信道,海洋水声信道是一个极其复杂的信道,特别是浅海声信道,它是一个随机时-空-频变信道,具有强多径干扰、强环境噪声、可用带宽有限以及长传输时延的特点,主要会造成链路随机通断、数据包碰撞率高以及传感器结点定位困难等特点。另外,传感器结点在部署后难以更换电池,故水声传感器网络的能量非常有限。因此,在这种复杂的信道中进行信息传输,不仅通信速率低,而且可靠性差,上述种种因素均为水声传感器网络协议的设计带来极大挑战。
3.目前国内外为了提高水声传感器网络的数据包投递率以及延长网络寿命,并尽可能保持低的端到端时延进行了大量的研究。数据包投递率与数据包是否发生碰撞以及链路状况密切相关:前者主要通过mac协议进行协调,包括固定分配信道时隙资源的tdma(time division multiple access,时分多址)等,基于随机竞争的aloha以及csma(carrier sense multiple access,载波侦听多址接入)等,但是其会产生大量的控制开销与重传;对于后者,采用链路修复技术付出的代价较大,一般是重新寻找并建立可靠链路。
4.or(opportunistic routing,机会路由)利用了信道的广播通信特性,在每一跳动态地选择一组中继结点作为rcs(relay candidate set,中继候选集),当至少有一个候选结点成功接收到数据包时,上一跳结点才不会进行重发,这有效降低了数据包的重发次数,显著减轻了链路随机通断以及数据包碰撞对网络性能的影响,提高了传输的可靠性。但是,现有的or大多需要传感器结点位置或深度信息,诸如dbr(depth based-routing)以及vbf(vector based forwarding)等。又因水下传感器结点的定位始终是一个难点,故其对or的设计具有极大挑战性。
5.对于lr(layered routing,分层路由),诸如pulrp(path unaware layered routing protocol)等,其在传输信息前,网络中的结点已被由上至下分好层级,数据包的传输不依赖位置或深度信息,仅依靠层级大小来确定中继结点。lr最大的优点是免于定位:不需要使用测深仪获取深度信息,更不需要将结点固定布放在特定深度;结点的小范围移动难以使层级发生较大变化,容忍了洋流的影响;位置或深度信息通常会占据较长的包字段,造成处理开销大;若网络内存在交互机制,更会增加能耗。但是,在现有的大多lr中,数据包是逐层传递至sink结点,历经所有层的传输无疑会延长端到端时延、增加网络能耗等。若考虑将最优层级结点作为下一跳结点,对整体性能的提升会是显而易见的。
6.综上所述,在lr中,每个层级均会参与数据包的转发,数据包历经所有层最终被传递至sink结点。但是,若单跳范围内包含多个不同层级的结点,数据包也可跨越一层或多层直接进行传输。若将其与or结合,可望为水声传感器网络性能的提升给出一种新的方法和策略。
技术实现要素:7.为了克服现有技术的不足,本发明提供一种免于定位的高效水声传感器网络传输方法。本发明针对水声传感器网络数据传输所面临的链路随机中断、数据包碰撞率高以及定位过程复杂等问题,提出以分层阶段取代结点深度或位置信息的使用,以层级大小指导机会路由中rcs的选择和内部协商的方法,旨在解决水声传感器网络中端到端数据包投递率低、网络寿命短以及端到端时延长等问题。
8.为了提高水声传感器网络的数据包投递率以及延长网络寿命,并尽可能地保持低的端到端时延,针对水声传感器结点能量有限的情况,本发明从路由层入手提出一种避免使用位置或深度信息的传输机制,简称nealor(neighbor nodes and energy aware layering opportunistic routing protocol)。
9.本发明解决其技术问题所采用的技术方案的具体步骤如下:
10.本发明对应的传输机制用于传感器结点的数据包转发,主要包括两个部分:(1)交互分层机制,所有传感器结点进行周期性层级选择的同时,通过交互获取其邻居结点数目,从而判断局部网络是否稀疏且有效避免路由空区,最终为机会路由提供准备条件;(2)路由机制,在交互分层机制完成后,基于层级、邻居结点数目以及剩余能量规划数据包的最优传输路径,提高数据包传输的可靠性;
11.一、交互分层机制
12.hello包用于交互分层机制,具体格式如下:
13.包类型type发送结点id层级level
14.其中,发送结点id为广播hello包结点的id,层级level用于标识结点所处层数,除sink以外的结点在本地均建立一个邻居列表q1,用于存储邻居结点信息,对邻居列表q1进行计数,得到邻居结点数n
neighbor
的大小;此外,除sink以外的结点在本地还建立两个列表,分别是已发送列表q2和待发送列表q3;
15.分层交互机制具体步骤如下:
16.步骤1:网络在布放成功后,所有结点的层级均为0,hello包由sink结点产生,并将level字段置0后,以t
hello
为周期进行广播,进入步骤2;
17.步骤2:若有结点成功收到hello包,首先读取发送结点的id是否在邻居列表q1中,若发送结点的id不在邻居列表q1中,进入步骤3;若发送结点的id在邻居列表q1中,则进入步骤4;
18.步骤3:在q1队尾写入发送结点的id以及接收时间,进入步骤4;
19.步骤4:将本地时间与q1时间相减,得到时间差值,若时间差值小于hello包的广播周期t
hello
,进入步骤5;反之,若时间差值大于等于t
hello
,则进入步骤6;
20.步骤5:仅更新对应结点的接收时间戳,进入步骤7;
21.步骤6:将此结点从q1中删除,进入步骤7;
22.步骤7:若自身层级self_level为0,进入步骤8;若自身层级self_level不为0,进入步骤10;
23.步骤8:读取hello包字段level的值,接着更新并保存自身结点的层级,即self_level=level+1,进入步骤9;
24.步骤9:将字段level更新为自身层级后将分层包hello转发出去,即level=self_
level,进入步骤11;
25.步骤10:直接丢弃hello包,进入步骤11;
26.步骤11:若网络最深结点未被分配层级或未能成功感知邻居结点,进入步骤2继续执行;否则,交互分层机制结束。
27.二、路由机制
28.在交互分层机制完成后,路由机制的实现过程如下:
29.路由阶段采用基于接收方的机会路由,即发送结点不能确定下一跳结点,其仅利用信道的广播特性将数据包data广播出去,只有成功接收到data的结点才具有成为中继结点的资格。数据包data的包头格式如下:
[0030][0031]
其中,包序列号表示数据包在源结点的生成序号,其与源结点id两者共同构成区分各数据包的唯一标识;标志位rcs_flag用于表示邻居结点数和局部网络稀疏阈值n
th
的关系;
[0032]
路由机制具体如下:
[0033]
步骤1:若网络中某传感器结点i有数据包data要发送或转发时,首先判断自身层级self_leveli是否为1:若self_leveli=1,结点i将标志位rcs_flag置为1后,将数据包发送;否则,若self_leveli≠1,进入步骤2;
[0034]
步骤2:判断结点i是否为空区结点;
[0035]
结点i与周围邻居结点进行周期性的信息交互,从而获取邻居结点数目n
neighbor
,若n
neighbor
<2,结点i为空区结点,则将data丢弃;否则,进入步骤3;
[0036]
步骤3:判断局部网络状况,比较邻居结点数与局部网络稀疏阈值n
th
的大小关系,即确定标志位rcs_flag的确定;若n
th
>n
neighbor
,说明结点i的邻居结点数较少,则认为结点i周围的网络状况较差,故标志位rcs_flag=0;反之,若n
th
≤n
neighbor
,说明网络状况良好,则rcs_flag=1;进入步骤4;
[0037]
步骤4:结点i在完成步骤3后,将数据包通过物理层的发射机广播出去,进入步骤5;
[0038]
步骤5:设结点j为结点i的某个邻居结点,若结点j成功接收到data,此时的时间戳为t
receiving
,接着获取包头字段数据包id(由源结点id和包序列号seq组成)的值,若该值在q2中存在,则说明该数据包已被发送或转发,此时直接丢弃data并跳至步骤1;若该值在q2中不存在,则判断该值在q3中是否存在。若该值在q3中已有记录,此时跳至步骤8;若该值在q3中不存在,则跳至步骤6;
[0039]
步骤6:结点j解析data包头标志位rcs_flag和层级leveli的值;若rcs_flag=0,说明结点i的邻居数目较少,故将结点j加入结点i的rcs;若rcs_flag=1,说明结点i的潜在转发结点较多,故需判断结点j的层级是否小于结点i的层级,即比较self_level与leveli的大小:若self_level>leveli,则丢弃data;否则,若self_level≤leveli,结点j成为结点i的候选集结点,接着进入步骤7;
[0040]
步骤7:计算data的预定发送时间t
sending
;优先级越高的结点,其对应的等待时间
t
holding
越小;
[0041]
此时,将data的数据包id和对应的预定发送时间一同添加至列表q3中,然后进入步骤8;
[0042]
步骤8:在当前时间t
current
小于预定发送时间t
sending
时,若结点j收到相同数据包id的数据包,不但直接丢弃此数据包,还要将数据包data从q3中移除;否则,若t
current
≥t
sending
,在预定转发时间到达后直接发送data,此时,传感器结点j的角色变为i,跳转至步骤1继续执行,直至data最终到达sink结点。
[0043]
所述等待时间t
holding
的具体计算方式如下:
[0044][0045]
其中,ε表示数据包的最长等待时间,作用是调整t
holding
的大小,从而保证低优先级结点在发送数据包前能够收到来自高优先级结点的转发包;l
self
表示结点自身的层级;l
max
表示网络被划分的最大层级;n
max
表示结点的最大邻居结点数:若结点满足均匀分布,则其与分布密度有关;e
initial
表示结点的初始能量,而e
residual
表示结点的剩余能量;α、β、γ分别表示不同的权重因子,有α>β>γ,且α+β+γ=1。
[0046]
所述预定发送时间t
sending
的计算方式如下:
[0047]
t
sending
=t
holding
+t
receiving
ꢀꢀ
(2)
[0048]
其中t
holding
为等待时间,t
receiving
为接收时间。
[0049]
本发明的有益效果在于:
[0050]
(1)不稳定且多变的水下环境易对网络拓扑产生影响,更会影响邻居结点数的变化,致使均匀分布下的传感器结点具有不同疏密程度的局部网络。在这种情况下,提出基于邻居结点数目的机会路由协议,目的是选取合适范围内的rcs,从而用较少的能量消耗就能保证数据的可靠传输且避免陷入路由空洞。
[0051]
(2)考虑到邻居信息交互机制与网络结点分层机制的共性,将两者有效结合后得出周期性交互分层机制,其可在划分网络层级的同时更新周围邻居结点信息,且可有效避免邻居确认包发生碰撞或冲突,两者独立且互不影响,共同为路由机制作充分准备条件。
[0052]
(3)将分层路由和机会路由两者相结合,提出一种有效避免使用结点深度或位置信息,使数据包沿最优层级传输的高效跨层投递机制。该机制在抑制其他结点冗余转发的情况下,综合选择最优层级中的最优结点作为下一跳结点,在保证投递率的同时平衡网络整体能耗,极大延长网络寿命。
附图说明
[0053]
图1是分层交互机制流程图。
[0054]
图2是路由机制流程图。
[0055]
图3是分层交互机制示意图。
[0056]
图4是路由机制示意图。
[0057]
图5是二维水声传感器网络拓扑结构图(结点数为30)。
[0058]
图6是ε值与网络结点数对数据包投递率的影响关系图。
[0059]
图7是ε值与网络结点数对数据包端到端时延的影响关系图。
[0060]
图8是ε值与网络结点数对网络消耗总能量的影响关系图。
具体实施方式
[0061]
下面结合附图和实施例对本发明进一步说明。
[0062]
随机分布在一定区域内的水下传感器结点会对周围海域进行信息采集并路由传输,而sink结点被单独固定布放在水面上,主要负责收集水下传感器结点产生的数据包,并最终将其通过电磁波发送给陆地基站,从而实现对海底的实时监测等(如附图5所示)。整个网络在初始化操作后,再需分层交互机制才能实现路由机制。
[0063]
下面将结合附图和实例对本发明进行详细说明。
[0064]
步骤1:网络初始化后,所有结点的层级被统一设置为0,即self_level=0。接着,分层交互机制由sink结点发起,其将hello包的level字段置0后,以t
hello
=60s为周期广播hello包,以应对网络拓扑结构的随机变化。随后进入步骤2。
[0065]
步骤2:对于任一水下结点,若其成功收到hello包,首先会读取发送结点的id是否在邻居列表q1中:若不存在,在q1队尾写入发送结点的id以及接收时间;反之,将本地时间与q1时间相减,若差值小于t
hello
,则仅更新对应结点的接收时间戳,否则将此结点从q1中删除,进入步骤3。
[0066]
步骤3:只有当自身层级self_level为0的情况下才读取包段level的值,接着更新并保存自身结点的层级,即self_level=level+1,再将字段level更新为自身层级后将分层包hello以半径r
layering
=400m发送,即level=self_level;否则直接丢弃hello包,进入步骤4。
[0067]
步骤4:除sink结点外,其余结点重复执行步骤2和步骤3,直至所有结点被分配唯一的层级序号以及完成邻居结点的确认工作后(如附图3所示),进入步骤5。
[0068]
步骤5:若网络中source结点有数据包data要发送或转发时,首先判断自身层级self_level是否为1:若self_level=1,源结点将标志位rcs_flag置为1后将数据包发送,并重新开始步骤5;否则进入步骤6。
[0069]
步骤6:判断源结点是否为空区结点。源结点通过周期性的交互分层机制获取邻居结点数目n
neighbor
:若n
neighbor
<2,源结点为空区结点,则将data丢弃;否则,进入步骤7。
[0070]
步骤7:取n
th
=4。若n
th
>n
neighbor
,则认为源结点周围的网络状况较差,下一跳需要更多的结点具有转发机会,故标志位rcs_flag=0;反之网络状况良好,不需要过多邻居结点均去承担data的转发或发送,则rcs_flag=1。在此之后,进入步骤8。
[0071]
步骤8:源结点在完成以上步骤后,将数据包通过物理层以半径r
communicating
=500m广播出去,进入步骤9。
[0072]
步骤9:由附图4可得,若不存在链路中断和数据包随机碰撞,结点a、i、j、k、l均会成功收到来自源结点的data。结点k和结点l属于第7层结点,比源结点的层级小,故结点l和结点k直接丢包,不参与data的转发;结点a、i、j成为源结点的潜在中继结点,进入步骤10。
[0073]
步骤10:结点a、i、j根据自身的层级、邻居结点数以及剩余能量,通过式(1)以及式(2)进行发送时间的计算并进入倒计时(其中l
max
=7,n
max
=6,e
initial
=600)。结点a的层级比结点i和结点j的层级更小,且α>β>γ,在三者剩余能量区别不大的情况下,起决定性作用的是层级的高低,故结点a将最先广播数据包data并将其写入列表q2。结点i和结点j收到
来自结点a的数据包后,则会取消对data的转发,进入步骤11。
[0074]
步骤11:结点b、g、h均会收到来自结点a的数据包,结点h的层级最大,在三者剩余能量区别不大的情况下,其等待时间最长;结点g仅有3个邻居结点(分别为结点a、b、d),而同层级的结点b有6个邻居结点(分别为结点a、c、e、f、g、h),此时邻居结点数成为衡量优先级的主要标准,故结点b成为结点a的下一跳中继结点,其将率先广播data,结点g、h将放弃对data的转发,进入步骤12。
[0075]
步骤12:结点c、e、f收到data后,结点c的层级最低,故优先级最高,等待时间最短,其会成为data到达sink结点前的最后一跳结点。
[0076]
综合以上所述并结合附图4,data从产生直至到达sink结点的路径为:source
→a→b→c→
sink。可以看出,本发明能充分考虑结点通信范围内所有结点的优先级,综合层级、邻居结点数以及剩余能量三项指标进行加权求和,从而选出最优中继结点参与数据包的转发,对于增加端到端投递率、减小端到端时延以及延长网络寿命(初步结果如附图6,7,8所示)的水声传感器网络路由协议具有重要意义和价值。
[0077]
以上所述的实施例仅是对本发明的优选实施方式进行描述,并非对本发明的范围进行限定,在不脱离本发明设计精神的前提下,本领域普通技术人员对本发明的技术方案做出的各种变形和改进,均应落入本发明权利要求书确定的保护范围内。