5.2.2 无线传感器网络传输层协议分析

1. 基于拥塞控制的传输层协议

1)PECR协议

PECR是一种能够自适应调整的拥塞控制机制,在保证可靠性的基础上,能够最大限度地节省能量。PECR作为一种拥塞控制机制,包括两个阶段,即拥塞检测和拥塞控制。

具体过程如下。首先,PECR在网络初始化时根据最小跳数路由协议来确定整个网络的路由表,使得每个节点都能够确定每个节点的父节点和子节点。节点周期性地检测节点队列缓存区的占用率和节点的剩余能量值,假设当前时间为t,当前节点的拥塞度为Ct(i),当前节点的剩余能量值为Pt(i),其中i为节点编号。节点将当前的拥塞度Ct(i)和节点剩余能量值Pt(i)通过明文方式向其上游节点反馈,上游节点比较其所有的下一跳节点的拥塞度Ct(i)和剩余能量值Pt(i)来实现分流。检测下一跳节点拥塞度是为了使分流之后形成的链路不会形成新的拥塞,从而浪费时间和能量。检测下一跳节点的剩余能量值是为了避免新链路形成以后节点因为能量耗尽而导致链路失效的情况发生,从而需要再次寻找链路,再次计算路由信息值,影响网络性能。

(1)拥塞检测。对于拥塞控制传输协议来说,拥塞检测是实现拥塞控制的重要组成部分。就现在提出的协议而言,主要有两种方法来进行拥塞检测:基于信道采样的方法和节点缓存占用情况的方法,第一种方法需要节点时刻保持侦听状态,耗费大量的能量,因此PECR协议采用节点缓存占用情况的方法来检测拥塞。

假设节点在第k个时间采样点的缓存占用大小为b(k),因此在k-1到k个时间采样点之间,数据增量C(k)为

C(k)=b(k)-b(k-1)

由于节点的缓存占用率既可以增加,也可以减少,因此数据增量C(k)的值可正可负:当它为正时,表示节点接收数据速率大于发送速率;为负时表示节点接收数据速率小于发送速率,节点的缓存占用率正在变小。

节点在第k-1个时间点和第k个时间点的时间间隔为

在网络流量没发生明显变化时,即假设在第k个到第k+1个时间点内数据的增量等于k−1到k时间点内数据的增量,即

将数据增量考虑在内以后,可以计算k+1个时间点缓存区的拥塞度,即

若在时刻k+1处拥塞度CGT>aa为拥塞阈值,则显示该节点处于拥塞状态,通过广播的形式发送一个拥塞通告,告诉其上游节点不再对其发送信息,采用减慢发送速率的方法或者采取分流机制。

根据上述分析我们知道,拥塞阈值a决定着无线传感器网络的准确度和拥塞缓解的效率,如果拥塞阈值a设置得过大,节点对于拥塞不能快速反应,可能会导致缓存区满,发生溢出等现象,造成数据包的丢失,影响网络的性能。如果拥塞阈值a设置得太小,造成节点缓存区浪费,不能实现最优路径传输,耗费能量和资源,降低网络的使用寿命。因此,在确定拥塞阈值a的大小时,必须首先考虑网络所需要实现的目标,综合考虑节点缓存区队列的大小、网络规模和传输速率等复杂因素。

(2)分流调节。考虑到节点的能量有限,无线传感器网络的传输协议必须简单易行,最大限度地降低其运算复杂度,减少处理时间,提高其时延性能。其中拥塞控制方法有两种:减速和分流调节机制。采用速率调节的方法来进行拥塞控制所需要的代价较大,所需算法比较复杂,但是速率调节又是最有效的调节拥塞的方法,因此PECR协议采用的方法是,当源节点检测到拥塞时,立即采用分流机制来控制拥塞。PECR协议采用的是减速分流调节机制,PECR协议流程如图5.2所示。

图5.2 PECR协议流程图

① 节点根据最小跳数协议初始化自己的路由表信息,确定每个节点的下一跳节点,若节点个数比较少,路由表信息可直接依据节点分布情况给出。

② 节点周期性地检测缓存占用率并将其作为拥塞信息写入反馈数据包中,并向其相邻节点发送此报文,报文包含节点用户编号User ID、拥塞度Ck(i)、剩余能量Pk(i)等信息。

③ 源节点收到下游节点反馈的拥塞信息后,立即将此拥塞信息写入本地缓存的相邻节点拥塞表内。

④ 进入分流过程,节点将检测自己选择的下一跳节点是否满足拥塞度和剩余能量值的要求,若满足则选择此节点作为下一跳节点;若不满足,则进入选择下一跳节点阶段。

⑤ 排除④中选择的下一跳节点,检测自己所有的下游节点,确定一个节点的集合,这些节点同时满足拥塞度小于系统预先设定的拥塞度,且剩余能量值高于指定的阈值,这个集合为

比较集合里面所有节点的拥塞度,选择最低的那个节点作为分流的下一跳节点,暂时按照这个路由开始转发数据包,网络内其他节点也依此来寻找符合条件的下一跳节点,直到建立一条最优新路径为止。

⑥ 如果存在极值情况,节点所有的下一跳节点都不满足要求,拥塞度过大或者剩余能量值太小,节点将转回无线传感器网络的网络层,让网络层来寻找最优的路径转发节点,当然这不属于本协议讨论的范围。由于路由表更新或者拥塞解除之后,通过反馈机制通知节点转回原来的最优路径,避免使用临时路径浪费能量,影响传输时延。

2)CODE

CODE是一种拥塞控制协议,中文名称为拥塞的发现与避免,包括一个拥塞检测机制和两个拥塞缓解机制,也是基于逐跳的保证机制。

(1)拥塞检测机制。CODE是一个比较成熟的无线传感器网络传输层协议,采用的拥塞检测方法是信道监听和缓存队列检测相结合的方式。源节点在发送之前首先检测发送队列中数据的占用情况,若为非空则开始侦听信道情况,检测到信道为空闲状态则开始发送数据;若检测到拥塞,则通过反馈机制通知上游节点拥塞信息,节点开始进入拥塞控制阶段。

(2)开环控制机制。若节点检测到拥塞后,立即以广播的形式将拥塞消息通知所有的相邻节点,节点收到反馈信息后,立即进入拥塞控制阶段,根据具体情况,节点可能丢弃一些本应该传输的数据分组或者减慢发送速率,情况严重的话可以停止一段时间后再发送数据包。

(3)闭环调节反应机制。在无线传感器网络中,越靠近Sink节点的地方,数据流量越大,越容易发生拥塞。若只采用开环控制机制,在反馈结束后,源节点将继续以原速率发送数据,很容易再次造成拥塞,因此,在靠近Sink节点的地方拥塞控制必须是持续不断的,CODE机制采用的就是闭环调节反应机制,当靠近Sink节点时,发送源节点会定时检测信道占用率,若信道占用率超过信道容量的给定比率,源节点会进入闭环调节反应机制,速率调整依据AIMD调整方式来进行,靠近Sink节点的各个方向的数据包发送速率将会有所不同,以此来减轻Sink节点附近的负担。

2. 基于可靠性传输层协议

1)PSFQ

PSFQ协议提出得比较早,是逐跳可靠性保证的传输协议,PSFQ(Pump Slowly Fetch Quickly)也称快取慢充协议,“快取”即节点向它的相邻节点快速索取数据,“慢充”即等到所有的数据接收完整后再发送给它的下一跳节点。

(1)基本思想。

PSFQ协议要求:用户节点将数据分割成多个报文传输,每个报文被单独当作一个分组,每个报文包含一些基本的消息,如剩余跳数TTL(Time-To-Live)、报告位、当前报文序号、文件所在报文的序号等。每一个用户节点按照报文分割后的顺序,每隔一段固定的时间广播一个新的报文分组,直到所有的报文都发送出去为止。每个节点接收到数据报文后检查缓存中是否已经存在该报文,如果不存在则将该报文中的属性TTL减1,然后刷新缓存;否则将收到的报文丢弃。固定的时间可用tmin来表示,其大小为数据能够传送到所有目的接收者所提供的最短时延界限。

PSFQ为了保证网络的可靠性,采用以下三种机制来确保数据的可靠传输:

• 缓存机制,每个中间节点都缓存接收到的数据报文。

• NACK确认机制,相邻节点收到源节点发出的数据包后,在检查数据包时发现数据包中序号是不连续的,找出丢失的数据包序号后,相邻节点通过广播NACK报文向源节点或者有丢失数据信息的节点索取丢失的数据包。

• 逐跳错误恢复机制,节点接收到所有的数据报文之后才向下一跳节点发送数据。

(2)关键技术。

① 逐跳错误恢复。与传统的端到端的错误恢复机制不同,PSFQ采用一种逐跳的错误恢复机制,错误的发现和重传也在相邻的两个节点之间进行。逐跳的端到端错误恢复机制相对于端到端的错误恢复而言,其最大的好处就是信道错误率低得多,随着跳数的增多,错误发生的概率也就越高。例如,假设无线信道中的数据包错误率为p,那么经过n跳之后数据传输成功的概率为(1−p)n,则端到端的传输协议的错误率要比逐跳的传输协议的错误率高多了。从这个表达式中,我们可以看出,网络的规模越大,分布越密集,那么节点经过的跳数就越多,传输的错误率就越高。一般来说,使用端到端的传输协议来传输一个单独的信息基本上是不可能的,因为端到端的错误率一般要达到10%以上,在密集的传感器网络中甚至更大。

本协议提出的逐跳错误恢复机制主要针对中间节点,具有非常大的意义,中间节点的每一跳都负责数据包丢失的监测和恢复算法,这种方法将整条链路上的多跳错误处理转移到了每一跳来处理,可减少错误的积累,适用于大规模的无线传感器网络,错误容忍度也更高。

②“取充”之间的关系。对于一个消息恢复机制系统来说,数据的传输时延与逐跳间重传的次数密切相关。重传的次数越多则时延越大。为了保证数据的实时性,协议设置一个可控的时间帧,在该时间帧内,要尽量保证数据传输的成功率足够高。实现这个目标最直接的方法就是允许节点在下一个数据包来临之前进行多次重传,确保数据能够成功地传输出去,这样在下一个数据来临之前就能够将缓存清空,保证数据的时延最小。为了平衡数据传输的成功率和时延,本协议提出了一种算法,假设数据包的错误率p保持恒定,允许k次重传,则两个节点之间数据包能够成功传输的概率为

式中,θ(k)是在k次重传之内成功恢复的概率,φ(k)是第k次重传成功传输的概率。随着k值的增加,数据的传输成功率也相应地升高,但当k>5时,成功率虽然提高了,时延性能却急剧下降,因此协议规定重传次数为5是一个临界值,即最优的充和取的时间定时器时间之比为1:5。

③ 数据连续发送。在消息确认机制中,如果数据包是按序号来进行传输的话,本地丢失的事件可能会传播到它的下游节点,这样会浪费大量的能量。丢失数据之后会立即触发错误恢复机制,节点立即发送一个NACK消息用来向它的相邻节点索取信息,然而其下游相邻节点没有丢失的数据包,所以数据包不能够被恢复,确保中间节点只转发连续序号的数据。

另外,协议要求进行数据缓存的管理,这样能确保数据按照顺序发送,从而完成丢失数据的恢复。慢充机制不仅能够阻止丢失事件向下游节点传播,也可避免一些不必要的数据丢失引起索取机制的触发,这样能提高网络的容错度。协议通过将数据丢失事件控制在两跳相邻节点之间,并在丢失数据恢复之前不再传输序列号更大的数据,跟一般的存储-转发形式类似,节点接收到一个完整的数据之后(即所有的数据段全部接收)才将此数据发送给下一节点。这种方法在高错误的网络中尤为有效,因为它将错误分段到了每一个单跳传输中。

PSFQ采用的多跳传输保证机制,能够在一定程度上保证数据的可靠传输,但是采用广播的形式来传送数据比较耗费能量,效率也不是很高,要求的数据存储空间比较大,因此整个网络的数据流量不是很大,吞吐量也不是很高。

2)ESRT协议

在无线传感器网络中,Sink节点作为网络中最为强大的一个节点,负责调配各节点以最优方式来组织网络,因此Sink节点关注的是网络中所有节点的整体状态。基于这种情况,ERST协议被提出来了,它是一种自适应调整协议,能够将数据可靠、低能耗地传送到Sink节点,是一种典型的可靠性协议。

(1)基本思想。

ESRT在综合考虑节点现有的拥塞情况和可靠性情况下,确定最优策略使网络性能达到最优。这个协议包括两部分,一是系统可靠性的测量,二是根据可靠性做出相应的调整。如果系统的可靠性不符合网络系统所要求的可靠性值,则ESRT会自动调节网络发送节点的发送速率,使之达到系统所要求的可靠性指标;如果系统的可靠性超过了网络要求,则ESRT在不牺牲可靠性的条件下,适当地降低源节点的发送速率,减小节点拥塞,最大限度地节省能量。根据这种机制,ESRT可以确定网络系统的5种状态:

Si∈{(NC,LR),(NC,HR),OOR,(C,HR),(C,LR)}

其中,N为No(无),C为Congestion(拥塞),L为Low(低),H为High(高),R为Reliability(可靠性),OOR为Optimal Operating Region(最优状态)。ESRT采用队列缓冲情况来检测网络的拥塞状况,在事件到Sink节点模型中,节点在一个时间周期内发送的数据包数只跟发送频率和源节点的个数有关,因此在一定时间间隔内数据包的增量保持恒定。节点通过调节可靠性与拥塞度的平衡情况实现最优状态。

(2)关键技术。

① 可靠性的度量。为了进一步了解ESRT协议,必须理解ESRT协议的运行过程,ESRT是一种可靠的传输协议,根据可靠性来相应地调整网络的状态,因此可靠性的度量是网络调整的第一步,占据非常重要的地位。在ESRT协议中,我们假设在一个周期内,节点发送数据分组的频率为f,Sink节点收到r个时间消息的数据分组,根据应用的要求,Sink节点需要R个事件消息的数据分组才能保证数据的可靠性,η=r/Rη描述的就是当前传输的可靠性程度。当η1时,数据的传输就是可靠的,当η<1时,当前的传输就是不可靠的。事件到Sink节点的可靠性度量如图5.3所示,图中展示了可靠性ηf的变化情况。

如图5.3所示,当f<fmax时,η随着f的增大而增高;当f>fmax时,η随着f的增大而相应地进行变化,因为f表示源节点发送数据的频率,当数据的频率在不拥塞的情况下增加时,到达Sink节点的数据也相应地增多,因此可靠性保证一定量的增加,但是随着源节点发送数据频率的继续增高,网络会产生一定的拥塞,到达源节点的数据也相应地减少,可靠性也会产生波动,有时甚至达不到可靠性的要求。网络的5个状态如图5.3所示,在最优状态(OOR)时,f<fmax,可靠性η的值约为1,其误差在网络的可靠性容差之内,其余的几个状态在图5.3中都有表示。

图5.3 可靠性ηf变化图

另外,节点的拥塞度测量采用的是查看节点缓存状态的方式,如果缓存超过一个固定的阈值,则表明网络拥塞;如果没有超过,表示网络没有拥塞。拥塞度的表示使用一个拥塞的标志位,将这个拥塞标志位传送给Sink节点,其对于缓存的测量采用的是预测方法,假设当前节点缓存和上一个周期节点的缓存分别为bkbk-1,上一个数据分组的增量就是bkbk-1,设这个报文增量为b,可以预测下一个周期的缓存量为bk+b,如果大于阈值,认为网络发生了拥塞,则进入相应的调整阶段。

② 可靠性调节。监测到可靠性之后,一般来说网络都不是运行在最优状态的,可靠性和能量也不是处于一个平衡状态,协议采用一定的调节机制来进行可靠性和拥塞度的调节,以此来最大限度地节省能量,提高系统的性能。

在开始传输时,Sink节点发送控制报文,命令源节点以预设的速率来发送数据分组。在每个周期末,Sink节点都会计算这个周期内的可靠性η,并结合节点反馈回来的拥塞标志位来确定节点是否处于拥塞状态,将这些信息处理之后,确定一个新的发送频率f',以此来调节此数据的可靠性和拥塞状态,在周期开始时重新发送一个控制报文,调节源节点的发送速率,达到控制拥塞度和可靠性的目的。根据可靠性和拥塞状态,f'调节方法如表5.1所示。

表5.1 f'调节方法

ESRT能在拥塞控制的基础上保证网络的可靠性和能量效率。通过Sink节点对接收速率的检测,通知整个网络调整节点发送速率,从而保证网络的可靠性,提高能量效率。因为一定时间间隔内数据包增量恒定,根据这个速率可以调整发送速率,最终使网络达到最优状态,这时网络可靠性就是系统所要求的可靠性,发送速率基本上保持恒定。

但是ESRT也有它自己的局限性,例如:

• ESRT要求Sink节点通信范围必须能够覆盖整个网络,对Sink节点的硬件要求非常高,对于大规模的无线传感器网络来说,实现起来比较困难。

• Sink节点没有考虑到各个节点的优先级信息,对所有节点采取统一的调配方案,假设节点在某个局部地区的任务量突然增加,ESRT就不适用了。

• 对于规模稍微大一些的网络来说,发生拥塞之后,Sink节点的调配信息经过广播形式到达源节点后,可能这时已经不拥塞了,因此不适用于大规模网络。

3. 跨层传输层协议设计

无线传感器网络中节点的能量有限,节约能量、网络能量均衡使用,进而延长整个网络的生存期是传感器网络协议设计的重要目标。

一方面,无线传感器网络中节点的移动、死亡以及新节点的加入等都会引起网络拓扑结构的动态变化,导致从数据源节点到目的节点(通常为Sink节点)之间的通信路径极不稳定,甚至在某些地区会出现路由空洞。传统的端到端路由进行数据传输,是先建立路由,再进行MAC层信道握手,最后进行数据传输,这种通信方式不能很好地适应网络拓扑的动态变化。

另一方面,处于数据链路层MAC协议直接控制着耗能最多的无线通信模块的活动,MAC协议的能效性直接影响着传感器网络的节能效果,因此在基于面向应用的事件驱动的传感器网络中,如何高效利用无线通信模块是我们设计传输协议时面临的主要问题。

一种可行的办法就是采用跨层设计来优化数据传输协议,其原理就是在数据传输过程中不建立严格意义上的端到端路由,而是根据网络当前的状态,同步地解决路径生成和信道使用两方面的问题,将路由协议与MAC协议进行融合,以适应无线传感器网络以数据为中心和拓扑动态变化的特性。在协议中引入启发唤醒和睡眠机制,该机制使传感器节点在没有数据需要发送或接收时处于睡眠状态,节点的无线通信模块大部分时间处于关闭状态,可以有效减少空闲侦听和串音,从而大大减少节点的功耗。

RCTP协议针对可靠性传输协议CTP(汇聚树协议)进行了一定的改进,采用跨层设计的思想,考虑了网络层和链路层对传输层协议的影响,主要考虑了链路质量的估计和实时路由以及对上层的友好接口。

1)基本思想

RCTP协议跟CTP协议一样,使用分簇体系结构,把WSN中的全部节点看成由许多树组成的森林,每棵树有一个根节点,簇中的节点需要和其他簇中的节点进行通信的时候必须通过根节点进行通信。RCTP协议跟前文提到的协议有许多类似的地方,也主要是用来保证协议的可靠性和进行有效的拥塞控制,RCTP协议传输流程图如图5.4所示。

RCTP协议的进行也包括两个阶段,一个是拥塞的监测,另一个是拥塞后的实时调度。拥塞的监测采用缓存检测的方法,当实时队列和非实时队列中任意一个队列缓存达到一半时,协议认为此时网络节点拥塞。当拥塞发生后,RCTP协议调用相应的实时调度方法来缓解拥塞,并最终实现数据的转发。

图5.4 RCTP协议传输流程图

2)关键技术

(1)RCTP协议的实时调度。节点接收到数据后,根据RCTP数据包头中实时位R对数据包进行实时划分,R为1的为实时包(RT),进入实时队列;R为0的为非实时包(NRT),进入非实时队列。RCTP协议根据队长比算法在两个队列中选择要发送的下一个数据包,实时调度流程如图5.5所示。

图5.5 实时调度流程

(2)队长比算法。队长比算法是指调度器按两个队列的队长比例来选择是从实时队列还是从非实时队列选取数据。考虑到传感器节点有限的计算资源,采用一种最简单的队长比算法,基本思路是每发送N个实时数据再发送一个非实时数据,算法描述如下。

① 初始化:RT_Counter=0,NRT_flag=FALSE,RT_Window=N

② 判断实时队列是否为空,若否,则转④;若是,则转③;

③ 判断非实时队列是否为空,若否,则转⑤;若是,则转②;

④ 判断RT_Counter是否大于RT_Window,若否,则转⑥;若是,设置NRT_flag为TRUE,转⑤;

⑤ 判断NRT_flag是否被设置,若为TRUE,则转⑦;若为FALSE,则转②;

⑥ 选择发送实时任务,RT_Counter计数一次,然后跳至②;

⑦ 选择发送非实时任务,RT_Counter归零,设置NRT_flag为FALSE,然后跳至②。

(3)优先级算法。优先级算法有两个作用:一是在数据发送时优先选择队列中优先级最高的数据包;二是当拥塞发生时优先丢弃优先级最低的数据包。

RCTP协议采用的队列是循环队列,循环队列大小默认是固定的,值为12,在编译时可以根据应用需求动态分配,增加长度为offset。

当需要从一个队列(如实时队列)选取下一个要发送的数据时,调度算法遍历循环队列,选择优先级最高的数据来发送。