刘 航,边 帅,王 惠,王 颖
(1. 重庆梅安森科技股份有限公司,重庆 400039;2. 重庆邮电大学计算机科学与技术学院,重庆 400065)
地下综合管廊是由隧道中的电力、通讯、燃气、给排水等各种管道构成的地下管网系统[1,2],是一种集约化、现代化的城市公用基础设施。目前,随着建设智慧城市的发展,越来越多的新一代信息技术被运用到城市综合管廊的管理和监控中。如利用无线传感器网络(Wireless Sensor Network,WSN)对市政管道破损以及运行状态进行实时监测等[3]。但WSN在地下传输具有通信距离短、传输不可靠、部署困难等缺点。电力线载波通信(Power Line Communication,PLC)网络是一种将现有的电力线路作为传输媒介,在传输电能的同时传输数据的网络。近年来广泛应用于工业现场设备监控[4]、水电气远程抄表[5]和油水监测[6]等领域。基于PLC技术的地下管廊数据传输系统具有可靠性高、易部署、成本低等优势。地下管廊中部署的PLC节点能感知、采集和处理网络覆盖区域内的监测信息,并发送给中央协调控制器(Central Coordinator,CCO)。CCO通常位于管廊的出口处,部分节点部署距离较远,需要采用多跳单播路由的方式与CCO进行通信。因此,如何通过PLC多跳路由自组网方式,实现监测数据的远距离、高可靠传输,成为目前的研究热点之一。
文献[7]提出了一种基于PLC的路由树形拓扑快速形成算法。文献[8]针对PLC网络提出了一种分层路由管理机制,该路由机制能有效提高通信成功率和实时性。文献[9]提出一种基于节点可靠性计算的多路径路由算法。文献[10]提出一种利用节点的地理位置信息形成单播路由,能有效的减少节点能量消耗和传输时延,但并未考虑网络的可靠性。文献[11]研究了一种利用网络拓扑的静态信息和网络性能参数,以此确定路径的路由算法,算法能有效的适应动态PLC网络,避免了通信中不必要的能量消耗,但可靠性不高。文献[12]提出分布式机会路由算法,该算法以时延为约束确定转发列表优先级,最终形成最优路由,但对节点性能要求较高。文献[13]以时延、可靠性和发射功率为约束,提出一种改进的遗传算法来选择中继节点的路由算法。
基于以上研究成果,本文提出一种结合管廊节点位置和节点链路状态信息对中继节点进行选择的路由算法(Geographic Location and Link State,GLS)。该算法根据节点间的链路状态信息及载波节点地理位置,力求构建出更加符合地下综合管廊的树状路由拓扑网络。算法同时考虑到地下节点分布不均匀以及业务数据突发性等因素,对路由树进行调整,来解决各种动态场景下负载不均衡,导致丢包较多的问题。该算法能减少传输时延及丢包率,且具有较好的适应性和扩展性。
地下管廊是一种半封闭的空间,假设网络由若干个节点组成,分布在一个矩形区域内,节点需要周期性向上传输数据,考虑PLC线路节点有效传输距离不稳定的特性以及树型结构构造简单、易于扩展、便于延伸分支和新节点加入,大部分PLC路由协议均采用树型结构。图1为单向电力线载波接入网络逻辑拓扑结构图。
图1 管廊网络通信模式示意图
网络中包括三种节点:集中控制协调器(CCO)、普通节点和中继节点。集中控制协调器具有较强的计算和存储能力,运行路由协议,负责网络的路由维护和操作指令的下发。所有节点之间传输数据以及访问外部网络都要通过集中控制器。控制器到网络中的任何普通节点至少有一条路径可供选择。除了集中控制器以外的所有节点都为普通节点,它负责本地数据采集与发送。同时,任何普通节点均可以被选择作为中继节点,承担着初始化节点路由表、解析数据包和数据存储转发等任务。
根据管廊环境特征,网络模型假设节点具有以下特性:
1) 控制器位于网络外侧,其计算能力和存储能力不受限制,部署到网络后位置固定不变。
2) 集节点同构并具有相同的发射功率,每个节点具有全网唯一的标识号。
许多基于PLC网络的路由协议并没有直接考虑网络节点的实际地理位置,仅是根据节点间链路的逻辑连接情况进行路由的设计。在地下管廊中使用基于链路状态形成的最短路径不一定为最优路径,有可能在该路径上节点稀疏,连接性不好,导致路由时延和丢包率较大;还有可能获得一条存在较多冗余中继节点的路径。因为在实际的PLC网络中,逻辑距离与实际的物理距离并没有明显的定量关系。虽然载波接收信号强度能反应各个采集节点之间的信道载波传输链路状态,但仅根据链路状态确定中继节点存在明显不合理性,可能增加整个路由的转发跳数,导致网络性能下降。为了提升网络效率,形成一棵更高效的路由树,本文提出一种结合地理位置与链路状态的路由选择算法(GLS),算法以最小信号强度衰减和最佳地理位置为目标,建立节点与控制器的最佳传输路径。
节点间的信号质量是评估节点间通信可靠性的一项重要指标,因而节点能作为中继节点的条件之一是接收信号强度需达到一个最低的限度。然而,接收信号太强,可能意味着具有较小的物理距离,导致形成的路由具有较多的转发跳数;而接收信号太弱会导致数据传输不可靠。因此,如果存在可供选择的多个中继节点,需根据信号强度确定一个上下阈值Tl和Tu。因此信号强度应该满足以下条件
Tl≤SBij≤Tu
(1)
Tl≤SBji≤Tu
(2)
i∈SubNode,j∈hopNode
(3)
其中,其中j为各跳中继节点hopNode,i为中继节点的子节点SubNode,SB为信号强度。式(1)表示子节点到中继节点的通信要满足信号强度的要求;式(2)表示中继节点到其子节点的通信也要满足信号强度的要求。
另外,还要考虑节点的地理位置,即节点与邻居间的物理距离以及节点与集中控制器间的距离。接收信号强度强且物理距离较远的节点具有较高的转发优先级,该策略可以让数据到达目的节点前经历较少的转发次数,从而保证每次中继的“距离跨度”。在如图2所示的网络中,假设节点C与节点D距离S的物理距离相同,并且它们接收到S的信号强度相同。选择节点C为中继节点,只需一跳既可到达目标节点T。而选择节点D为中继节点,则数据需要借助E转发才可以到达目标节点T。这种基于地理位置的最大“距离跨度”中继节点选择策略,可以使数据以最少跳数到达目的节点,从而提高系统效率,减少转发时延。
图2 结合地理位置的中继节点选择策略示意图
本文提出的路由算法将形成一个树形结构网络拓扑图。树的根节点为CCO,对整个网络的路由和连接进行管理。网络中所有的一跳节点可以直接与CCO进行通信,其它节点可通过一个或多个中继节点与CCO进行通信。
路由树形成过程算法1所示。其核心思想为:CCO依次轮询各个节点,根据信号强度选择出一跳节点;根据地理位置从一跳节点中选择出一跳中继节点;依次选择出后续各跳节点及中继节点。其中hopNodek为各跳中继节点集合,hopListk为各跳节点集合,其中k为跳数。当k=0时,hopNode0中只有CCO一个节点,表示一跳节点的中继节点为CCO。第32行中,从k跳节点中选择k跳中继节点的方法采用3.2节中的中继节点选择策略进行选择,尽可能选择地理位置较远的节点为中继节点,减少中继节点跳数。
算法1在形成路由树的过程中,节点与其邻居节点发生入网请求的总次数N可描述为
(4)
(5)
其中,n表示所有节点数量(不包括CCO)nk表示k跳中继节点的数量,rk表示k-1跳节点组网后剩余节点数量。式(4)中的每一项表示k跳中继节点从剩余节点中选取下一跳节点的入网请求次数。假设每一个节点至少能与其中一个节点通信,那么算法的最坏情况是每一跳只有一个节点,整棵路由树共有n跳。此时,算法获得此路由树,需要的入网请求次数Nmax可以表述如下
(6)
综上所述,算法最坏情况下的组网复杂度为O(n2)。因此,算法的平均复杂度不超过O(n2)。在经典的路由算法OSPF中,采用最短路径优先的原则生成路由树,其算法的复杂度也为O(n2)。所以,本文提出的算法与OSPF算法复杂度相同。
考虑管道部署环境的特殊性以及对网络拓扑结构变化具有较好的适应性和扩展性,本算法也提出新节点入网算法。在若干数据传输周期结束后会留出一个新节点竞争入网时隙。未入网节点侦听到附近节点的数据帧并从payload部分中解析出竞争开始的时间值。当竞争时间到来时,未入网节点根据接收信号强度选择一个最优的节点单播发送入网请求帧。接收到新节点入网请求信息的节点将该信息保存下来,当CCO轮询时,节点将该信息封装在payload中发送给CCO。如果CCO允许该节点入网,CCO向其回应一个确认帧并将该节点加入路由树和HopList中,完成新节点入网。
在该多跳路由树中,如果某个中继节点比同跳数的其它中继节点拥有更多的子节点,会造成数据流量在不同路径上分布不均匀,导致部分路径负载过重,从而引起丢包甚至网络崩溃。因此,某负载较重中继节点可能成为网络瓶颈,给管廊数据传输带来严重后果[10]。为了形成合理的网络拓扑结构,达到数据流量均衡分布的目的,需要对GLS路由树进行优化,形成更为优化的负载均衡路由树。本节提出一种负载均衡算法,对GLS形成的网络路由树进行调整,称之为Improve-GLS算法。该算法可以让CCO改变某些叶子节点的中继节点,从而实现负载均衡的目的。
定义子树负载均衡指数为SBIj(Sub-tree Balance Index),其为中继节点j的所有子节点的子树上最多的节点数量与最少的节点数量之差。SBIj越接近于0,说明子树均衡程度越好。
SBIj=Num(imax)-Num(imin)
(7)
SubNode(j)表示节点j的所有子节点集。Num(i)表示以中继节点j的各子节点为根节点的子树的节点数量。Num值越大,表示中继节点j的子节点负载越大。其中,中继节点j负载最大的一个子节点可以用如下方式表示:
imax=arg maxiNum
(8)
找到中继节点j负载最大的一个子树后通过对子节点进行调整,从而实现负载均衡。在优化过程中,CCO按照与其逻辑距离的从远到近进行遍历,要求每个中继节点对SBIi进行检测和调整,具体步骤如算法2所示。
CCO承担了全部的路由决策任务,存有到达所有目标节点的路径信息,它将该路径上每一跳所要经过的中间节点地址都填到数据包头部,然后“下行”转发给目标节点。下行路径所经过的每一跳中间节点,都按照数据包头部路径信息的指示,向下一跳转发,最终到达目标节点。任何节点需要给CCO发送信息,只需要将信息发送给该节点的父节点,经过多次转发后,最终将数据包发送给CCO。
算法采用“下行源路由+上行普通路由”机制,可避免节点维护大量路由信息,减少节点存储空间需求。但该算法增加了每个数据包的长度开销。考虑到管廊中几乎所有节点均为电源供电,对能耗并不敏感,采用该方式较合理。
为了验证GLS和Improve-GLS算法的性能,本文使用Matlab作为仿真工具,对网络中的时延、吞吐量和丢包率性能进行仿真分析。在300m×350m的区域散布42个节点,CCO位于(200,0),逻辑ID为1,其余节点编号依次为2到43,假设网络中不存在孤立节点,节点距CCO最多为四跳,所有的节点共享同一信道,网络拓扑如图3所示。每个节点以固定速率发送数据包,每个数据包大小为1000位,仿真时间为1800秒。与文献[11]提出的基于邻居节点信息的路由算法NKR(Neighborhood Knowledge based Routing)和经典的OSPF (Open Shortest Path First)算法进行比较。
图3 网络拓扑结构图
图4描述了各节点发送数据的端到端的平均时延。可看出本文提出的GLS算法在时延方面优于NKR。主要原因为NKR需要不断收集邻居节点信息,每次转发都需要重新计算路由。而GLS在路由计算阶段已获得数据转发路径,因此几乎所有节点的数据转发时延性能均表现良好(仅节点12、15、27、30时延比NKR算法略差)。
图4 所有节点端到端平均时延
图5和图6描述了GLS、Improve-GLS和OSPF算法在不同数据包发送速率下的丢包率和时延。由图5所知,随着发送速率的增大,各个算法的丢包率有所增加,但是GLS和Improve-GLS的丢包率增幅明显低于OSPF算法。在仿真的过程中,选取5个距离集中控制器最远的节点作为测试节点,统计这5个节点产生的数据包传输到CCO的时间作为端到端的传输时延。由于数据流量较大时,数据传输冲突加剧,导致发送缓存队列增长,从而增加了端到端的数据传输时延,但GLS和Improve-GLS远远好于OSPF。
图5 不同数据包发送速率对丢包的影响
图6 不同数据包发送速率对时延的影响
由于地下管廊通信环境复杂,无线传输在此环境中存在丢包率高和时延大等问题,本文提出一种基于PLC的多跳路由算法实现地下管廊系统的数据传输。算法结合节点的链路状态和地理位置信息构建拓扑路由树,实现数据多跳传输。另外,算法考虑到地下节点分布不均匀等因素,根据子树的负载均衡指数对不均衡路由子树进行优化和调整,实现路由树负载均衡。通过仿真验证,提出的算法在时延和丢包率等方面均有较好的性能表现。