一种分布式的基于预留的多信道MAC协议
2020-01-10张闪闪
甄 雪,张闪闪
(曲阜师范大学 信息科学与工程学院,山东 日照 276826)
0 引 言
无线传感器网络的研究进展使得人们能够更好地认识物理世界。由于数据汇聚的存在,传感器网络可以支持许多应用,包括安全监视[1]、定位[2]等。文中考虑的是静态传感器网络中的周期性数据汇聚。在静态的传感器网络中,通常建立一棵最优的数据汇聚树收集网络中的数据,其中数据汇聚树是固定的,并且将数据传输到固定的汇聚节点[3-4]。
2008年,Mo等研究发现并行约会协议比单约会协议实现的效果更好[5]。2011年,Almotairi等提出了一种具有跳跃预留的多信道MAC协议[6]。2012年,Chang等提出了一种ECU-MAC协议,它可以同时提高信道利用率和增大网络吞吐量[7]。2014年,Zhang等设计了一种FD-MMAC协议,结合一套先进的PHY-层技术,利用全双工通信中的研究进展协调信道访问[8]。2015年,Khanian等提出了一种分布式机会媒体接入控制(MAC)方法,可以最大化多信道无线网络中预期的总吞吐量[9]。2016年,Zhuo等提出了iQueue-MAC,其中混合利用了CSMA和TDMA机制,降低了数据包的时延并增大了吞吐量[10]。2017年,Swain等提出了一种高效节能的多信道MAC协议,使节点能够动态地在信道间进行切换[11]。
1 网络模型
给定一棵基于树型的网络拓扑[12-13],其中只有一个汇聚节点,有多个传感器节点和中继节点,传感器节点收集周期性数据流,并以多对一和多跳通信的方式将数据传输到汇聚节点[14-15],如图1所示。另外,所有节点都具有单个半双工无线电接口[16]。可以看出每跳的传输时延都将影响数据包到达汇聚节点的整体时延,因此,要想降低时延,则应该考虑降低每一跳的传输时延。另外,也可以看到每个节点可能有多个孩子节点,那么就会存在多发送端单接收端问题,容易造成冲突,因此还要考虑解决冲突的机制。
图1 传感器网络
2 最佳信道的选择
假设网络中有多个信道,n是信道数量。在无线传感器网络中的数据传输之前,每个节点尝试以不同的传输功率在每个信道上向父节点传输一个消息,父节点记录每个消息的接收信号强度指示值并将其回复给孩子节点。
ri(pj)=ai·pj+bi
(1)
其中,ai和bi代表信道i上的节点参数。
利用最小二乘近似求得参数ai和bi[17]。该方法需要很小的计算开销。根据样本向量,通过最小化以下的式子得到式1中的两个参数ai和bi。
(2)
因此,通过以下式子可以得到ai和bi的值:
(3)
其中,i为信道号;j为发送功率等级;N为不同的发送功率等级数量。
每个节点将不同的发送功率等级及父节点测到的相应的RSSI值应用于式3,这样可以得到不同信道上的a和b两个参数。每个节点根据使用的发送功率级别和不同信道上的a和b两个参数,利用式1得到不同信道上的RSSI值,从而选择RSSI值最大的信道,称此信道为该节点的最佳信道。
根据以上方法,每个节点(除了汇聚节点)计算得到自己的最佳信道。选择最佳信道进行通信可以提高数据包传输率,降低重传次数。
3 R-MMAC协议
文中提出的基于预留的多信道MAC协议(R-MMAC)也使用了接收端发起的方法[18]。在这个过程中,当汇聚节点和中继节点唤醒后,它们先向孩子节点发送唤醒信标。如果孩子节点有数据包要发送,则需要等到接收完唤醒信标之后。网络中的节点根据唤醒调度和预留调度进行唤醒。唤醒调度和预留调度都包含调度的信道和时间。
唤醒调度用于接收潜在发送端的数据包。每个节点利用公共的伪随机发生器确定未来的唤醒调度序列,其中节点的ID为种子。如果节点在唤醒调度时间中唤醒后,没有通信要进行,则节点进入睡眠状态。由于节点通过邻居发现机制可以获得邻居节点的ID[19],所以每个节点可以知道邻居节点的唤醒调度。因此,发送节点根据父节点的唤醒调度时间,稍微提前唤醒,以便接收父节点的唤醒信标,从而传输数据包。
预留调度是发送端和接收端在传输周期性数据流的过程中制定的,用于发送以后的数据包。当传输周期性数据流的第一个数据包时,发送端和接收端预留周期性数据流的第二个数据包的传输。以此类推,发送端和接收端为未来数据包的传输制定预留调度。这样发送端和接收端在预留调度的时间和信道上唤醒,可以及时地传输下一个数据包。
3.1 预留机制
预留机制包含三个阶段:(1)预留建议阶段;(2)预留决定阶段;(3)添加预留阶段。首先,所有节点根据自己的唤醒调度唤醒,汇聚节点和中继节点在唤醒的信道上向孩子节点传输唤醒信标。如果孩子节点没有数据包要传输,则进入睡眠状态。由于节点知道父节点的唤醒调度,所以节点根据父节点的唤醒时间,提前唤醒。
首先,如果发送端有数据包要传输,则接收到唤醒信标之后在接收端所在的信道上传输数据包和对下一个数据包的建议A,A中包含建议的下一个数据包的传输时间和最佳信道,分别定义为ChA和tA。同时,发送端也将自己的预留调度列表L传输给接收端,以避免重叠预留。
其次,父节点接收到建议A后进入预留决定阶段。父节点根据接收到的信息以及自己的预留调度列表决定最终预留的时间和信道,然后用信标B向发送端(孩子节点)传输预留决定D,D中包含决定进行传输的信道和下一次的传输时间(分别定义为ChD和tD)。
最后进入第三个阶段,父节点和孩子节点将预留决定D(也就是ChD和tD)添加到自己的预留调度列表中。后面会仔细说明如何确定建议A和决定D。
算法1:预留机制。
1.Node state:(lea f,relay,sink)
2.Set of int children,parent
3.Message type data,suggestion A,reserved scheduling listL,wake up beacon,decision D
4.Ifi=sink ori=relay then
5.send wake up beacon to its children when it is awake
6.while true do
7.receive msg(j)
8.case msg.type of
9.data∧A∧Lj:send D tojand add D toLi
10.end while
11.Else
12.while true do
13.receive msg(j)
14.case msg.type of
15.wake_up beacon: send data,A andLito its parent
16.D:add D toLi
17.end while
18.End if
图2显示了由节点S向汇聚节点F传输数据的预留过程,其中考虑具有三个信道的网络拓扑。
图2 预留机制
3.2 预留中的冲突解决
如果一个节点至少有两个孩子节点,那么在预留机制中有可能发生冲突。孩子节点同时向它们的公共父节点发送数据包,此时在父节点处发生冲突。这样,父节点不再向孩子节点回复信标B,而是再次发送唤醒信标,其中包含退避的窗口大小,使得孩子节点重传数据包。一段时间内,如果节点未收到回复信标B,则认为发送失败,并等待来自父节点的回复。等待随机退避一段时间之后,重传数据包。
算法2:冲突解决算法。
//jreceives packets fromjn
//jn:the child of the current nodej:the parent node ofjn
1.If the node isjthen
2.jsends wake_up beacon including a back-off window size
3.Else if the node isjnthen
4.ifjnreceived D from j then
5.jncompletes the packet transmission and goes to sleep
6.else ifjnreceived wake up beacon including a back-off window size then
7.jnretransmits data packet after the random back-off time
8.end if
9.end if
10.end if
11.End if
图3和图4分别显示了冲突拓扑和冲突的解决过程,节点j有两个孩子节点,分别为j1和j2。假设节点j1、j2同时产生周期性数据流,且节点j和节点j1、j2都没有预留,所以此时这些节点的预留调度列表L为空。
图3 冲突拓扑
图4 冲突解决
3.3 建议A和决定D
每个节点根据测到的不同信道上的RSSI值,向父节点建议最佳信道。当节点和父节点执行第一个数据包的传输时,它们会预留第二个数据包的传输,其中建议的信道为该节点选择的最佳信道。根据周期性数据流中数据包的产生间隔,将产生第二个数据包的时刻预留为第二个数据包的传输时刻。这样,可以尽可能早地传输第二个数据包。父节点接收到建议的信道和时间之后,同意建议的信道,将建议的信道作为决定中的信道。而对于预留的时间,父节点根据接收到的预留调度列表、自己的预留调度列表和建议的时间,选择二者都处于唤醒状态的最早时间作为预留的第二个数据包的传输时间。
3.4 重传时间
已经有人研究了数据包接收率PRR和信干噪比SINR之间的关系。只要知道了接收端的SINR,根据已有的经验PRR-SINR模型[20-21]就可以得到数据包接收率。
假设节点n1为发送节点,节点n2为接收节点,二者用信道x进行通信。同时利用信道x进行通信的其他k个发送接收节点对的集合为M={vi,vj,pmi},vi为发送端,vj为接收端,pmi为发送端的发送功率。对于接收节点n2在信道x上的SINR值[22]可以计算如下:
(4)
然后根据已有的PRR-SINR模型,得到节点n1在信道x上向节点n2传输的PRR值。
根据得到的数据包接收率PRR决定预留的传输时间。实际上,数据包传输过程中总存在丢失现象,因此,设置一个数据包接收率阈值α,只要接收节点的数据包接收率PRR大于等于阈值α,则称数据包接收成功。许多因素影响数据包接收率,如信道状况、其他节点的干扰以及周围的环境等等。当数据包丢失率较高时,通过重传降低数据包丢失率。根据式5计算每个节点至少需要重传的次数k:
(1-PRR)k+1≤(1-α)
(5)
其中,1-PRR表示数据包丢失率,得到至少需要的重传次数k之后,即可计算需要预留的传输时间T:
(6)
4 性能评估
为了验证性能,利用OMNET++5.3作为仿真工具,将所提的R-MMAC与典型的单信道MAC协议—X-MAC和多信道MAC协议—EM-MAC进行了性能比较。分别探索了数据包产生间隔和节点数目对端到端时延的影响。
在本次仿真中,将仿真区域设置为1 000 m*1 000 m,使用8个信道,每个信道的带宽为250 kbps,节点的传输范围为87 m。每次仿真运行50 s,并执行20次,计算其平均值。下面仔细说明数据包产生间隔和节点数目对端到端时延的影响。
4.1 数据包产生间隔对端到端时延的影响
在探究数据包产生间隔对时延的影响时,固定树型拓扑的节点数为18,将数据包产生间隔分别设置为1 s、1.5 s、2 s、2.5 s、3 s、3.5 s和4 s。
图5展示了随着数据包产生间隔的变化,X-MAC、EM-MAC和R-MMAC协议从感知节点到汇聚节点的时延变化。
图5 数据包产生间隔与端到端时延
可以看出随着数据包产生间隔的增大,三种协议的端到端时延都呈现下降的趋势,那是因为数据包产生间隔越大,需要传输的数据包个数较少,信道争用现象不激烈。但是,明显可以看出,当数据包产生间隔较小时,X-MAC产生的数据包时延较大。因为此时网络中产生的数据包个数较多,单信道的信道争用问题较为严重,并且没有考虑相应的冲突解决方法。而对于EM-MAC协议和文中所提的R-MMAC协议,二者实现的时延明显较小,因为它们都采用多信道通信方法,缓解了单个信道的资源争用。然而,R-MMAC协议比EM-MAC协议的时延更低一点,因为R-MMAC选择最佳的信道进行传输,利用较少的传输次数便可实现所需的数据包接收率,而EM-MAC协议只是避免了较差的传输信道,要想实现要求的数据包接收率,所需的时间相对较长一些。
4.2 节点数目对端到端时延的影响
探索节点数目产生的影响时,将数据包产生间隔设置为1 s,并将网络中的节点数分别设置为3、6、9、12、15和18进行仿真。图6展示了节点个数对X-MAC、EM-MAC和R-MMAC协议的端到端时延的影响。可以看出,随着节点数目的增大,X-MAC的时延呈现上升趋势,那是因为随着节点数的增大,网络中的负载增大,X-MAC协议采用的是单信道进行通信,并且没有进一步考虑冲突的解决方法。而EM-MAC和R-MMAC协议,随着节点数的增大,二者的传输时延变化不大,因为它们采用多信道通信,即使网络负载增大,节点间的并行传输也有利于降低时延。但是,当网络中的节点数为3时,R-MMAC协议的时延稍高于X-MAC和EM-MAC协议,因为R-MMAC需要选择最佳信道,网络负载较低时,选择最佳信道的时间占用一定比例。然而随着节点数的增大,当网络中的负载较大时,R-MMAC的时延较低。
图6 节点数与端到端时延
5 结束语
提出了一种基于预留的多信道MAC协议,称为R-MMAC协议。R-MMAC协议是在多信道环境中实现的,并且利用了预留机制。在多信道条件下,每个节点根据接收信号强度指示RSSI值选择自己的最佳信道进行预留。一方面,节点使用最佳信道传输数据,提高了网络吞吐量。另一方面,利用预留机制降低了传感器节点到汇聚节点的传输时延,因此也降低了未来数据包传输的冲突概率。另外,还提出了针对预留时发生冲突的解决算法。利用信干噪比SINR和数据包接收率PRR得到了预留的传输时间。在OMNET++5.3中将R-MMAC协议的性能与X-MAC和EM-MAC协议进行了比较。结果显示R-MMAC协议实现了更低的端到端时延。未来随着网络密度的增大,节点之间的干扰问题会更加严重,在设计协议时,可以考虑加入相继干扰消除技术,以提高协议的性能。