2.5 传输层
无线传感器网络的成功和效率直接取决于传感器节点与汇聚节点之间的可靠通信。在多跳、多传感器环境中,除了健壮的调制和介质访问、链路错误控制和容错路由外,还需要有可靠的传输机制。
2.5.1 传输协议概述
在无线传感器网络中,存在着以下影响数据传输的负面因素。
1)无线传感器网络的无线链路是开放的有损传播介质,存在多径衰落和阴影效应(由于通信范围有限,路径损耗较低,一般可忽略不计),加之其信道一般采用开放的ISM频段,使得网络传输的误码率较高。
2)同一区域中的多个传感器节点之间同时进行通信,节点在接收数据时易受到其他传输信号的干扰。
3)由于能量耗尽、节点移动或遭到外来破坏等原因,造成传感器节点死亡和传输路径失效。
4)传感器节点的存储资源极其有限,在网络流量过大时,容易导致协议栈内数据包的存储缓冲区溢出。
因此,无线传感器网络必须提供一定的传输控制机制,以保证网络传输效率,这些机制主要可分为拥塞控制(Congestion Control)和可靠保证(Reliability Guarantee)两大类。拥塞控制用于把网络从拥塞状态中恢复回来,使负载不超过网络的传送能力;可靠保证用于解决数据包传输丢失的问题,使接收端可以获取完整而有效的数据信息。
传统IP网络主要使用协议栈中传输层的用户数据报协议(User Datagram Protocol,UDP)和传输控制协议(Transmission Control Protocol,TCP)控制数据传输。UDP是面向无连接的传输协议,不提供对流量的控制及错误恢复;TCP则提供了可靠的传输保证,如利用滑动窗口和AIMD等机制进行拥塞控制,以及使用重传进行差错控制。但TCP却不能直接用于无线传感器网络,主要原因如下。
1)TCP遵循端到端(end-to-end)的设计思想,数据包的传输控制任务被赋予网络的端节点上,中间节点只承担数据包的转发。而无线传感器网络则是以数据为中心,中间节点可能会对相关数据进行在网处理(in-network processing),即根据数据相关性对多个数据包信息进行综合处理,得到新的数据包并发送给接收端,直接使用TCP会导致丢包而引发重传。
2)TCP建立和释放连接的握手机制相对比较复杂,耗时较长,不利于传感器节点及时反馈被监测对象的相关信息;无线传感器网络拓扑结构的动态变化也给TCP连接状态的建立和维护带来了一定的困难。
3)TCP采用基于数据包的可靠性度量,即尽力保证所有发出的数据包都被接收节点正确收到。在无线传感器网络中,可能会有多个传感器节点监测同一对象,使得监测数据具有很强的冗余性和关联性。只要最终获取的监测信息能够描述对象的真实状况,具有一定的逼真度就可以,并不一定要求数据包传输的完全可靠,这种方式也被称为基于事件的可靠性度量。
4)TCP中的数据包重传通过端节点之间的ACK反馈和超时机制来保证。无线传感器网络数据包中所含的数据量相对较小,大量ACK包的传输会加重传输负载和能量消耗;此外,每次ACK确认和数据包重传都要从发送端发出,经历多跳传输路径到达目的端,引发整条路径上所有节点的能量消耗。
5)无线传感器网络中非拥塞丢包和多路传输等引起的数据包传输乱序,都会引发TCP的错误响应,使得发送端频频进入拥塞控制阶段,导致传输性能下降。
6)TCP要求每个网络节点都具有独一无二或全网独立的网络地址。在大规模的无线传感器网络中,为了减少长地址位带来的传输消耗,传感器节点只具有局部独立的或地理位置相关的网络地址或采用无网络地址的传输方案,因此无法直接使用TCP。
无线传感器网络的应用需求对传输控制协议的设计提出了很高的要求,但目前学术界对于无线传感器网络技术的研究尚处于起步和发展阶段,协议体系并不完整,尽管出现了少量综合处理网络拥塞和提供可靠保证的协议,但它们主要是基于TCP进行的部分改进。
2.5.2 拥塞控制协议
准确、高效的拥塞检测是进行拥塞控制的前提和基础。目前,无线传感器网络中主要采用以下方法进行拥塞检测。
1)缓冲区占用:根据节点内部数据包存储缓冲区的占用情况来检测拥塞是否发生。对缓冲区大小为B的节点,定义bk为第k个时间间隔结束时其缓冲区的占用大小,若[bk+(bk-bk-1)]>B,则推测在第(k+1)个间隔内将发生拥塞,这也是传统网络中网络节点进行拥塞检测的主要方法。然而,由于缺乏对无线信道繁忙程度的估计,在无线传感器网络中该方法不能很准确地预测拥塞。
2)信道负载:节点通过监听信道是否空闲来判断自身是否处于拥塞状态,该方法准确程度较高,缺点在于长时间监听信道会加大节点的能量开销。
3)缓冲区和信道:为了克服前两种方法的缺点,研究者提出了将两者结合的方法,即在缓冲区非空时进行信道状态周期性采样,在准确检测拥塞的同时减少了能量开销。
4)拥塞度:定义包间隔时间ta为连续到达节点MAC层的两个包之间的时间间隔,包服务时间ts为一个包从到达MAC层到其被成功发送的时间间隔;拥塞度为平均包服务时间和平均包间隔时间的比率,即对节点i,d(i)=ts/ta。d(i)的值是否大于1反映了节点i是否处于发生拥塞的趋势中。
若节点发现自身处于拥塞状态,则需要将此信息传播给邻居节点或上游节点来进行某些控制操作,一般采用如下两种方式来报告拥塞消息。
① 明文方式(Explicit Congestion Notification,ECN):节点发送包含拥塞消息的特定类型的控制包。为了加快该消息的扩散速度,可以通过设定MAC层竞争参数来增大其访问信道的优先权,缺点是控制包带来了额外的传输开销。
② 捎带方式(Implicit Congestion Notification,ICN):利用无线信道的广播特性,将拥塞状态信息捎带在正要传输的数据包包头中,邻居节点通过监听通信范围内的数据传输获取相关信息。与明文方式相比,捎带方式减轻了网络负载,但增加了监听数据传输和处理数据包的开销。
当传感器节点检测到拥塞发生后,将会综合采用各种控制机制减轻拥塞带来的负面影响,提高数据传输效率。下面按照其采用的核心控制机制进行分类介绍和分析。
1.流量控制
(1)报告速率调节
一般来说,无线传感器网络的播撒密度较高,数据具有很强的关联性和冗余度,但用户一般只关心网络整体返回的监测信息的准确度,而非单个节点的报告。因此,只要保证获取的信息足够描述被监测对象的状态,具有一定的逼真度,就可以对相关数据源节点的报告频率进行调整,以便在发生拥塞时减轻网络的流量压力。
(2)转发速率调节
若网络对数据采集的逼真度要求较高,则一般不适用于报告速率调节,而是选择在因流量汇聚而发生拥塞的中间节点进行转发速率调节,采用这种控制方式的协议有Fusion、CCF等。然而,仅依靠调节转发速率将会导致拥塞状态沿着数据传输的相反方向不断传递,最终到达数据源节点,若数据源节点不能支持报告速率调节,将会导致丢包现象的发生。
(3)综合速率调节
在多跳结构的无线传感器网络中,传感器节点承担着数据采集和路由转发的双重任务。当拥塞发生时,仅通过单一的速率调节方式往往不能达到有效的控制效果,或无法保证监测信息的逼真度,因此研究人员提出了Buffer-based、PCCP和CODA等综合调节三种速率的控制协议。
1)Buffer-based协议采用一种基于缓冲区管理的轻量级控制机制。节点在传输数据包时将当前自身的数据包缓冲区占用情况捎带在包头中发送,所有邻居节点通过监听数据包传输获得相关信息;在向下游邻居节点发送数据之前,节点都要检查该邻居节点的缓冲区是否已经溢出,若是,则暂停数据发送,直到监听到邻居节点缓冲是不满状态,再继续发送;拥塞状态会不断向数据源传递,最终通过调节数据源节点的报告速率减轻拥塞。
2)PCCP协议按照数据源的重要性(如感知数据类型等)对流进行分级,采用加权优先的方式保证调整公平性。PCCP协议保证具有相同源优先级的节点可以获得相同的报告速率,而源优先级高的节点可以获得更高的速率和带宽,但是,它要求在数据包中增加一定长度的优先级标识位,带来了额外的传输开销;另外,它仅从数据流的加权公平性角度调整报告速率,并不能很可靠地保证监测信息的逼真度。
3)CODA协议结合了开环控制和闭环控制这两种方式来解决拥塞问题。在因突发的网络流量交织而导致局部发生短暂性拥塞时,将启用开环控制策略。检测到拥塞发生的节点会向数据源节点的方向广播后压消息(后压消息用于通知上游节点此处发生了拥塞),收到此消息的节点将根据本地的网络状况判断是否继续向其上游节点传播。同时,采取一定的本地控制策略(如丢弃部分数据包、降低报告或转发速率、路由改道等)来减轻拥塞。此外,若某个被监测事件的发生频率低于信道吞吐量的设定阈值,则源节点可以自行调节报告速率,否则便触发闭环拥塞控制机制。此时,负责监测此事件的节点将在发送的消息包头中设置调整位,网关收到这样的包之后,将会对监测该事件的所有相关源节点的报告速率进行综合调整,并将调整方案以ACK包的形式反馈给各相关节点。CODA协议的报告速率调节只是在节点发现自身监测的事件会引起拥塞而主动请求网关进行协调时才起作用,且只针对监测该事件的所有节点做调整。相对而言,开环控制策略用于以快速减轻多数据流交汇而引发的局部短暂拥塞,而闭环控制机制则适用于调整因数据率太高使得网络无法承载而发生长时间拥塞的情况,但由于涉及网关和多个节点的反馈交互,在大规模网络中闭环控制调整速度相对较慢。
2.多路分流
由于传感器节点的资源受限,现有的路由协议大多采用单路径单播数据转发机制,即根据能量消耗、路径跳数等衡量指标选择一条相对最优路径进行数据发送,这样的路由方式导致了网络流量集中在该条最优路径上,容易在多条传输路径交汇时引发拥塞现象。若交汇的数据流分别流向不同的目的节点或网关,可以采用多路径转发的方式分散流量以解决此类拥塞问题。
1)ARC协议利用无线传感器网络中存在的冗余节点来构建新的转发路径。网络中的冗余节点利用休眠机制来节省能量,但它们会周期性地醒来,通过监听通信范围内的数据传输,获取并保存数据包头中捎带的邻居节点的拥塞程度、剩余能量和转发的流编号等信息;同时,冗余节点将根据其邻居节点的拥塞程度决定休眠周期直至完全处于工作状态,这样就相当于在拥塞区域周围预置了多条可用的转发路径。拥塞发生时,拥塞信息将沿着原数据传输路径的相反方向向上游节点反馈,寻找符合条件的节点进行分流。从分流节点分散出的数据包将沿着拥塞区域边界向目的节点的方向进行传输,绕开拥塞区域后逐渐向原传输路径上的节点靠拢,直至重新汇聚后发送到网关。流量汇聚节点通过数据包包头捎带的相关信息判断拥塞解除之后,将向数据分流点发送解除多路分流状态的通知消息,重新使用原来的单条最优路径进行传输,以保证传输效率并节省传输能量。
2)CAR协议提出了与ARC协议相近的方法,较适用于存在多种不同传输优先级的数据流的网络中,协议在发生拥塞时只在拥塞区域内转发优先级较高的数据流,而将低优先级的数据流分散到非拥塞区域中建立的长路径上进行转发,这样就为不同的数据提供了区分式服务保证。
3)BGR协议采用了在地理路由中增加方向偏离范围的方法来扩大转发路径的选择范围,节点随机选择此范围内的邻居节点转发数据。与其他协议相比,实现机制较为简单,但随机选择的方式缺乏对邻居节点当前状况(如能耗等)的综合考虑;另外,也存在将部分流量转发到周围其他拥塞区域的可能性。
多路分流的方法避免了流量控制可能带来的监测数据逼真度下降的问题,但分流路径往往不是符合路由选择标准的最优效率路径,该类方法不适用于只有单个网关的无线传感器网络场景。
3.数据聚合
为了减少网络中传输的数据量,延长网络寿命,传感器节点使用数据聚合技术,对多个内容存在关联的数据包进行综合处理,组合出更有效或更符合用户需求的数据包再继续传输,这种技术也可以作为一种有效的控制方法来减轻网络拥塞。
1)CONCERT协议采用适应性的数据聚合,减少网络中传输的数据量以减轻拥塞。由于数据聚合节点的引入会增加数据处理的时间开销,CONCERT协议只在事先预测的可能发生拥塞的区域布置聚合节点,若无法准确获知此信息,则聚合节点将通过移动来动态部署。数据聚合节点将根据数据包中所含的时间、地域等关联性信息进行聚合操作,同时,尽力保证监测数据的逼真度。
2)在PREI协议中,整个网络覆盖区域被均匀地划分为多个大小相同的网格,聚合节点将对来自同一个网格的监测数据进行检查,剔除异常数据之后再对剩下的数据进行聚合操作。PREI协议还引入了多级聚合的思想,对相邻网格的数据进行再次聚合,进一步减少传输的数据量,以保证监测数据量突增情况下的传输效率。
4.虚拟网关
无线传感器网络一般采用多对一的通信结构,因而靠近网关的节点承载的网络流量较大,容易引发拥塞,这一现象被称为“漏斗效应”。为了解决这一问题,Siphon协议提出在网络中布置少量具有双通信模块的传感器节点作为虚拟网关,在发生拥塞时启动长距离通信模块和原网关进行通信,对网络流量进行分流。
Siphon协议的操作分为4步:①原网关初始化虚拟网关发现过程,虚拟网关在邻近范围内广播自身存在的信息,传感器节点收到信息后将建立到达虚拟网关的路由;②拥塞检测;③拥塞发生后,传感器节点将流量转发给附近的虚拟网关,再通过虚拟网关之间的配合操作转发给原网关;④若虚拟网关之间的长距离通信网络也发生了拥塞,那么将采取一定的MAC层调节机制或缩小初始广播范围来进行控制。Siphon协议的缺点是需要增加额外的通信硬件,虚拟网关的有效部署(如数量、位置、通信范围等)也是一个值得关注的问题。
2.5.3 可靠保证协议
无线传感器网络中的可靠保证协议主要分为数据重传和冗余发送这两类。在基于数据重传的协议中,节点需要暂时缓存已发送的数据包,并使用重传控制机制来重传网络传输过程中丢失的数据包;基于冗余发送的协议主要采用信息冗余的方式保证可靠性,节点不需要缓存数据包和等待重传,但网络负载和能量开销相对较大。
1.数据重传
(1)丢包检测
传感器节点主要通过接收到的数据包包头中相关序列号字段的连续性进行丢包检测,发现数据包丢失后将信息反馈给当前持有该数据包的发送节点请求重传。丢包信息的反馈方式主要有以下3种。
1)ACK(Acknowledge)方式:源节点为发送的每一数据包设置缓存和相应的重发定时器。若在定时器超时之前收到来自目的节点对此数据包的ACK控制包,则认为此数据包已经成功地传送,此时,取消对该数据包的缓存和定时;否则,将重发此数据包并重新设置定时器。对于每个数据包,接收节点都需要反馈ACK,因此负载和能耗较大。
2)NACK(Negative ACK)方式:源节点缓存发送的数据包,但不需要设置定时器,若目的节点正确收到数据包,则不反馈任何确认指示;若目的节点通过检测数据包序列号发现数据包的丢失,则反馈NACK控制包,要求重发相应的数据包。NACK只需针对少量丢失的数据包进行反馈,减轻了ACK方式的负载和消耗。缺点在于,目的节点必须知道每次传输的界限,即首包和末包的序列号,不能保证单包发送时的可靠性。
3)IACK(Implicit ACK)方式:发送节点缓存数据包,监听接收节点的数据传输,若发现接收节点发送出该数据包给其下一跳节点,则取消缓存。这种方式不需要传输控制包,因此负载和消耗最小,但只能在单跳以内使用,且需要节点能够正确地监听到邻居节点的传输情况,不适用于TDMA类的MAC协议。
(2)重传协议
网络中的数据重传方式主要有两种:端到端(end-to-end)重传和逐跳(hop-by-hop)重传。基于端到端控制方式的典型协议(如TCP、STCP等)主要通过目的端节点来检测丢包,并将丢包信息反馈给数据源节点进行重传处理。控制包和重传数据包的传输需要经历整条传输路径,不但降低了数据重传的可靠性和效率,也加大了网络负载和能量消耗。同时,基于端节点的控制方式使得反馈处理时间相对较长,不利于数据的实时传输,节点难以对传输状态(如RTT等)进行有效维护。因此,在无线传感器网络中较多地采用逐跳控制方法,即在每跳传输的过程中,相邻转发节点之间进行丢包检测和重传操作。下面根据数据流的发送方向,介绍几种典型的数据重传协议。
1)网关向节点。在无线传感器网络中,用户一般使用广播或多播的方式,通过网关向整个网络或局部网络内的多个节点发送查询、重编程等控制消息,如果一条控制消息的数据量较大,则消息将被分片,用多个数据包进行传输。
PSFQ协议采用缓发快取(pump slowly,fetch quickly)的方式进行传输控制。在该协议中,传感器节点采用广播的方式向邻居节点转发从网关发送出的控制数据包。缓发是指节点在向邻居节点广播数据包时,设定连续广播的时间间隔为T∈(Tmin,Tmax),这样的设置保证了数据包能够有一定的缓存时间以备重传,同时,节点可以通过监听邻居节点数据传输来减少数据的广播冗余;快取是指节点发现丢包后暂停数据转发,将多个丢失包的序列号信息综合在一个NACK控制包中广播给邻居节点。若重传后没有收到所有丢失的包,则按较短的时间周期Tr(Tr<Tmax)继续广播多次。若仍失败,则将该请求向网关方向的节点传播,直到从这些节点收到所有丢失的包。在某些情况下,高序列号的包可能会完全丢失,为了解决NACK传输界限的问题,保证数据的完整性,PSFQ协议增加了主动取包的功能:节点根据数据包头中捎带的该次传输数据包的总量信息,在等待Tpro时间后主动发送NACK包请求丢失的数据块。在该协议中,传感器节点需要维护的计时器数量较多,重传控制过程较为复杂。
GARUDA协议是层次型网络结构,可以进行阶段性的丢包恢复操作。在网络形成的初始阶段,网关向网络广播包含bId的控制包(bId初始值由网关设定),建立以核心节点(bId值为3的倍数的节点)为中心的层次结构。网关发送出的每条控制消息将由多个数据包传输,核心节点在转发某条消息的数据包时,将在包头中包含A-map字段,用位标识的方法来表明自身已经收到了哪些属于该消息的数据包。丢包恢复的过程分为两个阶段:下游的核心节点在收到上游的核心节点转发的数据包后,检查A-map字段,若发现有自身需要的丢失数据包则向该上游节点发送NACK包请求重传;非核心节点监听自身依附的核心节点的数据传输,在监听到属于某条消息的所有数据包都被完整接收后(整个A-map字段都被标识),再向核心节点发送重传请求。由于核心节点相对负载较大,因此协议规定,网关可以在更新层次结构时选择不同的初始bId值,以保证网络的负载均衡和公平性。在协议建立的层次结构中,核心节点数量较少,其丢包恢复的处理速度较快,保证了消息的及时获取;非核心节点可以从邻近的核心节点较为可靠地获取完整的消息,减轻了整个网络内重传竞争的压力。同时,根据A-map字段标识位来判断请求重传的方式是否避免了NACK内爆问题(在上游某个节点处发生丢包引发下游传输路径上的所有节点接连发送NACK请求重传的现象)的发生。GARUDA协议增加了节点的设计复杂度,初始阶段的bId包的广播以及数据包头中加入的A-map字段也加重了网络的传输负载和能耗。
2)节点向网关。RMST协议是结合单播路由协议设计的可靠保证协议,该协议改进了原路由中只有从数据源到网关的单向路径方式,增加了用于反馈丢包信息的后向路径(Back Channel)。传输层建立NACK机制反馈丢包信息,支持节点缓存数据包和不缓存数据包两种操作方式:缓存方式下将采用逐跳方式进行重传,不缓存方式下采用端到端的方式进行重传;另外,协议还规定了MAC层提供选择性重传响应的方式(ARQ),使用ACK对单播数据包进行确认,以协助传输层进一步提高传输的可靠性。
RBC协议使用渐缩窗口的发送虚拟队列控制数据包的发送和重传。虚拟队列共分m+2级,队列Q0~Qm用来存储等待发送的数据包,每个数据包占用队列中的一个存储单元,Qm+1用来存放未占用的存储单元。数据包进入缓冲区之后,首先从Qm+1中找到可用的存储单元,然后移动到Q0的尾部等待发送,被发送之后移动到当前队列的下一队列尾部,若发送成功,则释放占用的存储单元到Qm+1,否则,将在此位置等待重发。节点每次挑选当前级别最低的非空队列首部的数据包进行发送。RBC协议使用IACK的方式进行丢包控制,数据包发送时将捎带自身和邻近存储单元的ID号,接收节点通过检查发送节点连续发送的数据包中ID号的连续性来检测丢包。同时,接收节点在转发时捎带自身已经收到的数据包的存储单元ID号,发送节点通过监听来获取这些确认信息。由于网关无法通过IACK的方式反馈信息,因此采用主动的ACK方式向邻居节点广播一段时间内收到的所有数据包的确认。RBC协议解决了滑动窗口方式中因为等待数据确认和重传包而引起的后续数据包持续长时间等待发送的问题,提高了发送效率;缺点是队列结构比较复杂,节点进行数据传输监听和数据包的处理开销较大。
3)双向可靠保证。BRTM协议针对不同数据发送方向上数据流对可靠性的不同要求,提出了双向可靠保证协议。网关发送给节点的查询包对可靠性要求较高,网关在包头加入特定标识位以表明传输界限,节点采用NACK方式向网关反馈丢包信息;节点到网关的监测数据包冗余度较高,可靠性要求相对较低,网关使用选择性ACK的方式进行控制,即只对数据值变化较大的部分数据包进行确认;缺点在于使用了端到端的控制方式,影响了控制效率。
2.冗余发送
(1)拷贝冗余
若网络的播撒密度较大,则节点可以在转发时创建一个数据包的多个拷贝,同时向多个邻居节点转发,以数据冗余的方式来保证传输可靠性。该方法的核心问题是,节点如何根据当前的网络状况来确定合适和一定量的邻居节点以满足可靠性要求。
在AFS协议中,初始阶段节点使用泛洪广播数据包,网关收集一段时间的数据之后,按照包的序列号统计计算每个流的实际可靠率,并按照实际可靠率和可靠性要求的比率来设定相关节点的转发概率,再将新的设置通过控制包发送给节点进行更新。这种基于网关集中控制的方法比较简单,缺点在于需要网关发送大量的控制包进入网络,加大了网络负载和能耗;同时,统一的调整模式使得单个节点不能根据当前自身的网络状况灵活地调整转发概率,在大规模网络中节点等待网关反馈的时间较长。
(2)编码冗余
擦除码(Erasure Code)是一种容错机制,它可以将m个源数据编码为n(n>m)个新数据,使用这n个新数据中的任意m个编码数据均可重构原来的m个源数据。这种方法作为一种前向纠错(Forward Error Correction)技术主要应用在通信网络传输中,避免包的丢失,使用比拷贝方式更少的带宽和存储空间,提供与其效果相近的可靠性。