基于NS3的RCHF MAC协议优化改进分析*
2019-04-30韩多亮杜秀娟朱建连
韩多亮,杜秀娟,朱建连
(青海师范大学 青海省物联网重点实验室,青海 西宁 810008)
0 引 言
随着海洋资源在国际竞争中的地位日益重要,海洋开发和信息产业不断发展,水下传感器网络(Under-Water Sensor Network, UWSN)成为人们研究的热点,可广泛应用于海洋资源勘探、海洋环境监测以及资源开发等领域[1]。水下传感器网络具有长延时、低带宽和高误码率等特点,在一定范围内信号不能同时传输,所以水下传感器网络是共享信道。可见,设计节能、高传输可靠性的MAC协议,在水下通信中非常重要[2]。
合理有效的MAC协议是解决UWSN通信中数据包冲突的有效方法。MAC协议根据节点对信道的占用方式,主要分为无竞争的MAC协议和基于竞争的MAC协议[3]。无竞争的MAC协议有TDMA、FDMA和CDMA,根据水下信道的特殊性,实现水声通信的资源复用。基于竞争的MAC协议,节点通过随机接入信道或者握手进行信道预约,然后有选择性地接入信道[4]。
1 相关工作
针对水下传感器网络,研究者已经提出了很多MAC协议。
夏威夷大学于1968年提出了Aloha协议,节点只要有数据产生,就会将数据立即发送到信道上,若在规定时间内收到回复,则表示发送成功;否则,发送节点重新发送数据。传输过程中,如果数据产生冲突,则会等待一段随机的时间再次发送,直到数据成功发送为止[5]。该协议在数据传输过程中重传和冲突处理机制较少,导致交付率和能耗较大。
Roberts等于1972年提出了时隙Aloha协议,将时间分为离散的时间片,节点如果要发送数据,必须等到下一个时间片开始,因此避免了节点随意的发送数据[6]。与Aloha协议相比,时隙Aloha协议减小了信道冲突,节约了能耗,但没有对重传和回复确认做处理,冲突较大,能量损耗严重。
Marcal Molins等提出了Slotted FAMA协议。该协议引入了时隙结构,节点在数据传输过程中进行三次握手。节点在发送数据前利用控制报文预约信道,如果预约成功,则在时隙开始时发送报文;如果预约失败,则节点进入退避状态,等待下一次的信道预约[7]。该协议保证了在某一时刻信道上只有一对节点进行通信,有效减少了通信中的报文冲突。
Professor Du 等提出了一种基于RLT编码的无握手可靠传输的MAC协议(RLT Code Based Handshake-Free,RCHF),节点根据自身和邻居状态进行数据的发送与接收[8]。本文针对RCHF MAC协议实验过程中发现的问题进行优化改进,利用NS3网络平台进行仿真,并在青海湖进行测试,根据实验过程中的输出信息,对改进后节点的状态和层级变化进行验证。实验结果表明,改进后的RCHF MAC协议能准确及时地更新节点的状态和层级。
2 网络模型
网络初始化状态:30个传感器节点随机均匀分布在M×N×N的长方体内。1个sink节点布在水面(长方体上表面),模型如图1所示,图中“·”表示传感器节点,“●”表示sink节点,假设水下传感器网络具有以下性质:
(1)水下传感器网络是由固定在水下的静态节点、悬浮在水中的动态节点和水面的sink节点构成;
(2)所有节点都具有唯一的ID,非sink节点均匀地分布在水下;
(3)节点能感知本身的深度信息;
(4)节点根据预先设置好的功率进行数据通信,部署完成后,功率不再发生改变;
(5)节点根据数据获取时间,周期性采集信息,并将数据传送至sink节点;
(6)节点具有相似的处理数据的能力[9]。
图1 网络模型
3 RCHF协议概述
RCHF MAC协议中,源节点将数据包分组为k个数据块。然后,源节点对分组后的数据包编码并发送。编码后的分组会被逐跳转发至sink节点,从而上传至服务器。
网络初始化后,每个节点维护一个邻居动态表,主要包括节点的id、层级和状态。状态字段记录邻居节点的实时状态。状态“0”表示邻居节点处于发送状态,状态“1”表示邻居节点处于接收状态,“2”表示处于未知状态,“3”表示邻居节点处于发送避免阶段。
当节点具有发送数据资格时,先在邻居表中搜索状态为“2”或者“3”的下一跳节点,如果发送节点自身状态为接收或者未知,发送节点则发送第一帧,并将自己的状态切换为接收状态,准备接收接收节点回复的第一帧确认控制报文(ACK)。收到第一帧ACK后,将剩余的N-1帧发送出去,再将自己的状态切换为接收状态,准备接收最后一帧ACK控制帧。如果状态为“0”或“1”,它将推迟交付,直到状态大于“1”。
数据发送流程如图2所示。
图2 发送数据流程
在ACK控制帧中,主要包括接收节点接收的帧的数量和错误率。通过比较原始包的个数和帧中块的大小,判断是否接收完整。如果接收节点能够重组整个数据块,发送节点收到ACK后,通过解析ACK控制帧;如果未收到的帧序号为0,则将自己的状态置为“3”;如果不能重组整个数据块,根据ACK中未收到的数据帧序号,发送节点将未收到的数据重新编码发送给接收节点。
ACK控制帧部分信息如表1所示。
表1 ACK控制帧部分信息
当节点收到数据后先解码,更新邻居表,根据帧内的接收节点的id号,判断节点本身是否是接收节点。若不是,直接丢弃数据包;若是,则判断该帧是否是第一帧。若是,则开启定时器并立刻回复ACK控制;若不是,则将数据发送出去。接收数据流程如图3所示。
图3 接收数据流程
4 协议优化与改进
目前,RCHF MAC协议已经应用于湖试和仿真实验。实验过程中,对协议做了改进与优化:(1)在ACK控制帧中添加一个控制字段,用于判断接收节点是否成功接收数据,并直接区分接收数据的类型;(2)对邻居表的更新做了改进,以保证节点能正确及时更新节点的状态和层级。
4.1 ACK控制帧的优化
在ACK确认帧帧格式中,数据字段起始处添加一个数据类型确认字段,占2比特,其中第一比特表示接收节点对一个数据帧和数据块的确认。该比特为“0”时,表示接收节点对一个数据帧的确认;该比特为“1”时,表示对一个数据块的确认。第二个比特表示接收节点是否完全重构数据包。该比特为“0”时,表示接收节点已经对一个数据块中的所有原始包成功重构;该比特为“1”时,表示接收节点未完全重构一个Block中的所有原始包。优化后的ACK控制帧格式如表2所示。
表2 ACK控制帧部分信息
发送节点收到ACK控制帧,即可根据ACK帧格式中的数据字段起始处的控制字节的第二个比特,确定自身下一步的状态和进程。若第二个比特为“0”,则发送节点将进入传输避免阶段;若第二个比特为“1”时,则发送节点对未恢复的原始包进行重新编码,并发送给接收节点。发送节点和接收节点可以直接根据第2个比特位的值改变自身状态,从而确保节点的状态能正确及时改变。
4.2 邻居表的更新优化
通信过程中,数据的发送与接收均基于节点状态,所以邻居表的维护和更新在通信过程中至关重要。
实验中发现,节点位置发生变化,由两跳邻居转变为一跳邻居后,节点层级仍保持不变,说明问题的拓扑如图4所示。其中,1号节点是sink节点,4号节点是源节点。实验初始时,3号节点是1号节点的两跳邻居,层级为3;当3号节点位置发生变化后,3号节点变为1号节点的一跳邻居,3号节点的层级应更新为2,但一段时间后3号节点层级仍然未变,数据传输不能正常进行,能耗增加。
图4 实验拓扑
在每个节点的邻居表中增加一个老化时间,一段时间后节点将直接删除邻居表中老化时间已到的邻居。当节点收到广播和数据包时,根据邻居表中的信息及时更新邻居表,更新自身的状态和层级,以保证数据的正常传输。
5 仿真实验
NS3是一款面向网络系统的离散事件仿真软件,相比于NS2,各层均进行了改进,得到了教育研究机构的认可。仿真实验基于NS3进行,网络模型如图1所示。
根据网络模型部署节点,针对问题和提出的解决方案进行开发实现,协议改进优化的部分代码如下:
对协议优化进行技术上的实现后,进行湖试和仿真实验,并对实验过程和实验结果中节点的状态、层级进行分析。结果表明,经过优化改进,当节点发生移动时,节点能够及时准确地更新层级,并根据邻居表中的信息更新节点状态。图5为仿真实验时输出的信息,图6为湖试时输出的信息。
图6 实验输出信息
实验过程中,对ACK控制帧中的数据类型确认字段进行验证,根据两个比特值的变化,可以判断接收节点是否成功重构数据并区分确认的数据类型,及时更新状态。
6 结 语
随着海洋资源在国际竞争中的地位日益重要,水下传感器网络在未来的海洋开发中将迎来更广阔的使用前景。水下环境复杂多变,对各层协议的要求不同。MAC协议在数据传输过程中占据重要地位,因此本文就RCHF MAC协议在应用过程中发现的问题进行分析,做出优化改进。仿真结果表明,节点可以根据ACK控制帧和邻居表中的信息及时更新状态,节约了能耗,提高了传输可靠性。