李付勇,夏洁,姜胜明
(上海海事大学信息工程学院,上海201306)
MAC[1,2](Medium Access Control)协议是无线多跳网络[3](Multi-Hop Wireless Network)的基础,控制着节点对无线媒介的占用,决定了无线信道的使用方式,其性能直接影响了整个网络的性能。无线自组网中信道共享且受节点发射功率限制,每个通信节点的传输范围是受到限制的。通常需要中间节点作为中继实现节点间多跳通信,因此数据冲突与节点所在位置相关。此外,无线通信中,受到障碍物和信道衰落的影响节点间通信会出现时延。综上传输范围、节点位置和时延等因素,无线网络中隐藏终端和暴露终端[4,5]的问题是无法避免的。终端问题严重降低了MAC协议的性能,为了获得更高的信道利用率、更低的延迟和更加公平的竞争,必须解决终端问题。
隐藏终端是指在接收方通信范围内且在发送方通信范围之外的节点,而暴露终端指的是在发送方的通信范围内且在接收方传输范围之外的节点。
以隐藏终端问题为例:当一个节点发送数据时,在其传输范围之外的节点无法察觉到有其他节点正在发送数据,这可能会导致数据冲突。如图1所示,当A向B发送数据时,C也向B发送数据,因此,这两组消息将在B发生冲突,导致传输失败。此时,C被称为隐藏终端。
图1 隐藏终端示意图
针对以上终端问题,已有方法总结如下:1)通过发送忙音信号通知邻居节点,如BTMA协议系列;2)数据传输之前,发送方首先发送请求帧给接收方,接收方收到请求时以确认帧的方式告知其他邻居节点它即将进行接收,即 RTS/CTS[6]方式,如 CSMA/CA、MACA[7]、MACAW[8]、FAMA[9]。综上解决方法,解决隐藏终端的关键是如何通知邻居节点了解接收节点的接收状态。本文提出一种基于节点状态更新的DBTMA[10,11]改进方法,该方法通过实时监控、更新并收集节点状态来判断是否进行数据传输。仿真表明该方法准确掌握接收节点的行为,减少请求握手次数和状态误判,从而有效避免隐藏终端问题,提高数据传输效率、网络吞吐量和信道利用率。
DBTMA全称为双忙音多址接入协议,该协议采用多信道方式——将信道分为两个彼此独立的子信道:数据信道和控制信道。在数据信道上发送数据,在控制信道上发送控制帧(RTS和CTS),并且在控制信道上增加忙音信号BT(t发送忙音)——表明数据信道正在传输数据和忙音信号BTr(接收忙音)——表明数据信道上正在接收数据。BTt发送忙音信号为RTS帧的传输提供保护,并增加接收方的RTS接收成功率;BTr对RTS做出响应并为传输的数据提供连续的保护。所有听到任何忙音的节点都不允许发送RTS请求。当收听BTr信号建立时,发送RTS帧的节点需要立即放弃传输。隐藏终端因为侦听到BTr忙音信号不会发送数据,避免了数据冲突的发生因而得到解决。
工作于DBTMA协议的节点共有七种状态,具体如表1:
表1 DBTMA的七种状态描述
DBTMA协议的工作方式通过图2隐藏终端示意图进行解释。
图2
根据1.2 DBTMA协议工作方式一节可知,运行DBTMA协议的节点必然处于以下七个状态之一IDLE,CONTEND,S_RTS,S_DATA,WF_BTR,WF_DATA,WAIT。基于此,设计一个7位二进制节点状态码:如表2:
表2 节点状态码结构
以1表示在此状态,0表示不在此状态,从而每个节点都有一个状态码,此状态码用来描述节点状态信息。由此可以得到七个基于二进制的7位二进制状态码status_code(如表 2):0000001WAIT,0000010WF_DATA,0000100WF_BTR,0001000S_DATA,0010000S_RTS,0100000CONTEND,1000000 IDLE。
基于节点状态码和DBTMA协议忙音策略设计节点状态码计划表,如表3:
表3 节点状态码计划表结构
btt字段为1表示当前节点建立btt信号,btr字段为1表示当前节点建立btr信号,is_busy字段为1代表当前有忙音信号(即节点btt或btr任意字段值为1)。
传统收集网络节点信息的方法都是广播,但是广播代价是不容忽视的。为此,提出以下优化方法:以集群式网络为例。根据2.1设计节点状态码结构可知,节点处于IDLE(空闲)状态时状态码为1000000,此时节点状态码最大负载最小。周围邻居节点将各自的状态码发送至此节点并将其作为邻居的负载点,如果有多个最大状态码的节点,随机选择一个作为负载点。
根据2.3节点状态信息的收集得到邻居节点的负载点,该负载点拥有邻居节点的所有状态码(包括自己的状态码)。负载点将邻居节点的所有状态码信息封装在状态表中,并将表信息发送至周围邻居节点,从而各个节点均知道了邻居节点的状态码。网络中各节点均按此规则收集邻居节点的状态码,从而得到网络中所有节点的状态码。由于无线网络中所有节点均有可能发生移动且节点状态随时变化。因此负载点的选取和状态表信息均需要及时更新,具体更新策略为:节点状态码同步更新到状态表中;上次确定为负载点的节点主动向周围邻居节点发出状态码快照并收集到状态表中,比较个节点的状态码大小;将各节点状态码发送至周围邻居节点并确定状态码最大的节点作为负载点而本次作为负载点的节点主动放弃下次负载点的机会。
以图3集群网络示意图为例,具体阐述节点状态码数据的收集和共享细节:
图3 集群网络示意图
图中共有A、B、C、D四个集群以及一个中心节点E。网络初始化时,假设A3,B3,C3,D3分别为各自集群中状态码最大的节点。A集群中A(ii=1,2,4,5)分别将各自的状态码发送给A3节点,B集群中B(ii=1,2,4,5)分别将各自的状态码发送给B3节点,C集群和D集群以此类推。A3、B3、C3、D3分别拿到各自集群中所有节点的状态码,A3、B3、C3、D3再将各自集群中的状态码发送给中心节点E,至此E节点拿到网络中所有节点的状态码。E节点将所有节点的状态码数据封装在状态表中并将此表下发给 A3、B3、C3、D3。A3、B3、C3、D3再将状态表发给所在集群中的其他节点。至此,网络中所有节点均拥有了网络内各个节点的状态码。
基于状态表决策流程图,如图4所示。以图1隐藏终端示意图为例,其具体决策机制结合状态表具体阐述如下:
说明:
条件1,4:查看状态表有btt字段值为1的邻居节点
条件2,5:查看状态表无is_busy字段值为1的邻居节点
条件3:查看状态表有is_busy字段值为1的邻居节点
网络初始化时,各节点均处于IDLE状态,此时状态表数据如表4:
图4 节点决策流程图
表4
(1)当节点A100000有数据分组需要向B1000000发送,满足条件2时更新自身状态码为,即(2)建立BTt信号进入S_RTS状态,此时状态表数据如表5:
表5
表6
B1000000接收到A节点发送的RTS请求帧,BTr字段设为1,之后建立起定时器并进入WF_DATA状态,即B1000000更新自身状态码为,此时状态表数据如表7:
表7
节点A0000100持续查看状态表发现建立了BTr信号,确认自己的信道请求成功。(4)等待一段时间进入WAIT状态,即更新自身状态码为A0000001,此时状态表数据如表8:
表8
A0000001定时器超时后,(5)进入S_DATA状态即更新自身状态码为A0001000,此时状态表数据如表9:
表9
A0001000传输完成,(6)重新进入IDLE状态,即更新自身状态码为A1000000,此时状态表数据如表10;
表10
表11
同理,当 A100000满足条件3时,(7)进入CONTEND状态,即更新自身状态码为A0100000并同步到状态表中;A0100000收到RTS时,(8)满足条件4时,建立BTr进入WF_DATA状态,即更新自身状态码为并同步更新到状态表;(9)接收完数据分组或等待数据超时后进入IDLE状态,即更新自身状态码为A1000000。当满足条件5时进入S_RTS状态,即更新自身状态码为并同步更新到状态表。
同理,当 A100000满足条件1时,(10)进入WF_DATA状态,即更新自身状态码为并同步更新到状态表;(9)接收完数据分组或等待数据超时后进入IDLE状态,即更新自身状态码为A1000000。
如图1隐藏终端示意图,A节点向B节点发送数据时,即A节点处于A0001000状态,B节点处于状态,此时网络中节点状态表数据信息如表12。
表12
(1)nRF51822蓝牙协议
本文提出的基于节点更新状态DBTMA改进方法的实际实现平台是基于nRF51822蓝牙协议,该协议的分析模型如图5:
图5 nRF51822蓝牙协议分层模型
主协议层的 GAP(Generic Access Profile),管理广播和连接的有关参数且具有以下特征:
①角色
GAP中规定一个设备不是集中器角色就是外围设备角色,集中器是连接的发起者,外围设备是被连接者,相当于链路层的主机和从机。另外该蓝牙协议规范还定义了观察者角色和广播者角色,观察者角色只监听空中事件,广播者角色只广播信息而不接收信息。
②广播
集中器能够与外围设备建立连接,外围设备必须处于广播状态,它每经过一个时间间隔发送一次广播数据包,这个时间间隔称为广播间隔,它的范围是20ms到10.24s,广播间隔影响建立连接的时间。
集中器发送一个连接请求来发起连接之前,必须接收到一个广播数据包,外围设备发送一个广播数据包之后一小段时间内只监听连接请求。
一个广播数据包最多能携带31字节的数据,它通常包含用户可读的名字、关于设备发送数据包的有关信息、用于表示此设备是否可被发现的标志等类似的标志。
当集中器接收到广播数据包后,它可能发送请求更多数据包的请求,称为扫描回应,如果它被设置成主动扫描,外围设备将会发送一个扫描回应做为对集中器请求的回应,扫描回应最多可以携带31字节的数据。
③扫描
扫描是集中器监听广播数据包和发送扫描请求的过程,它有2个定时参数:扫描窗口和扫描间隔。
(2)nRF51822蓝牙协议在基于节点更新状态DBTMA改进方法的应用
基于节点更新状态DBTMA改进方法的状态表信息存放于外围设备的广播数据包中,当集中器角色发起连接前,首先查看数据包中邻居节点的状态码。根据2.5节基于状态表的决策策略是否发起连接,当外围角色监听到集中器的连接请求时更新自身状态码到广播数据包中的状态码中。此时,当别的集中器接收到外围设备的广播数据包时,查看其状态码信息发现外围设备正在接收数据。因而,不会发送请求到外围设备,隐藏终端问题得以在实际平台中实现。
为了测试和分析基于节点更新状态DBTMA改进方法的有效性和性能。本节在仿真环境下,通过改变原MAC帧结构,即在原MAC帧中加入本文所提出的7位二进制状态码,观察各个协议之间的性能。每次仿真结果为每10次运行结果的平均值。
仿真环境:首先,研究了不同隐藏终端情况下的各方案的性能。我们在具有N(N=1,2,…,6)个独立网络集群和一个公共接收节点Ad Hoc网络中模拟各个协议。每个集群有5个节点,每个节点通信范围内互通。以N=4为例,如图2。RTS数据帧长度为200b,数据包长度为4096b,信道传输速率为1M/S。图6比较了在相同环境下各个协议方案的性能。
图6 协议性能对比图
从图6中我们可以看出基于节点状态更新的方法相比较于其他任何一种MAC方案有着更高的吞吐量。当N为1时,该方法的网络利用率低于DBTMA这是由于状态表的首先收集网络中各个节点的状态码并通知集群中的各个节点,造成初始时效率低于DBTMA协议。但是当N≥2时,该方法相对于DBTMA信道利用率和吞吐量明显更具有优势,因为本文提出的基于节点状态更新的解决方法初始时以很小的代价收集网络中各个节点状态信息。状态表准确实时地更新各节点的接收状态,减少对接收端握手请求次数和避免对接收端接收计划的误判,从而能够大大提高网络的吞吐量和信道利用率。
本文在深入学习MAC层隐藏终端和暴露终端问题研究的基础上,提出了一种基于节点更新状态的DBTMA改进方法,巧妙利用各个节点状态设计节点状态码结构并封装状态码信息于状态表,状态表实时收集并更新节点状态码信息。节点基于状态表信息判断是否发送数据,该方法相比较于DBTMA协议,通过减少对接收端握手请求次数,提高了网络吞吐量和信道利用率,避免了对接收端接收计划的误判从而数据传输更加准确有效。