一种工业无线网状网络的数据传输方法转让专利

申请号 : CN201110362344.3

文献号 : CN102395172B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 郭成城杨剑峰徐俊李乘义席志方

申请人 : 武汉大学

摘要 :

本发明涉及一种工业无线网状网络的数据传输方法,对丢失率和传输时延都很敏感的数据信息提供快速可靠的传输路径,设计了并发多路径生成算法;同时,对其他数据信息提供用以快速故障恢复的备份路由表,设计了备份路径的生成算法。应用本发明技术方案能够避免个别无线链路故障产生的负面影响,通过不同类型的数据信息通过不同的路由转发方式在网络中传递,提供了不同的服务质量保证。

权利要求 :

1.一种工业无线网状网络的数据传输方法,其特征在于:将无线网状网络中所需传输的数据分为两大类,第一类数据包括现场设备运行中的检测信号和控制现场设备动作的指令信号;第二类数据包括现场视频、语音、图片和文本;

对第一类数据采用多路径进行传输,具体实现方式如下,

从一个无线网状网的原始网络拓扑图中搜索出多棵支撑树,从多棵支撑树中选出若干条并发路径,利用所有并发路径同时传递同一个数据包;

在连接接收终端的路由器上对重复的数据包进行处理;所述处理方式为,由路由器将需要转发到相同目的地且之前已经转发过的数据包丢弃;

对第二类数据采用单路径进行传输,具体实现方式如下,

以无线网状网络中的每个节点为源搜索其到其它所有节点的最短路径树,根据最短路径树确定每个节点的常规路由表;从一个无线网状网的原始网络拓扑图中搜索出多棵支撑树,每棵支撑树对不包含在其中的链路提供保护,根据支撑树得到备份路由表,并保存在各节点上;按照常规路由表采用单路径传输数据包;

当检测到某条无线链路失效时,立即切换到备份路由表继续传输数据包。

2.如权利要求1所述工业无线网状网络的数据传输方法,其特征在于:搜索支撑树或最短路径树的具体方式如下,对于无线网状网的原始网络拓扑图,利用路由转发树生成算法找到一棵树T1,对于原始网络拓扑图中不属于树T1的边均由树T1提供保护;

如果从原始网络拓扑图中删除树T1中所有的边,剩余的拓扑图仍为连通图,则将剩余的拓扑图边信息作为输入,再次运行路由转发树生成算法,得到树T2,树T2对树T1中所有的边进行保护;

如果从原始网络拓扑图中删除树T1中所有的边,剩余的拓扑图为非连通图,则从树T1中挑选出保持整个拓扑图连通所必需的边,删除树T1中其他的边,在此基础上再运行路由转发树生成算法,得到树T2,树T2保护树T1中被删除的所有边;再从原始网络拓扑图中删除树T1中尚未被保护的边,重复类似的选择过程,直到原始网络拓扑图中所有的边都有相对应保护它的树为止。

3.如权利要求2所述工业无线网状网络的数据传输方法,其特征在于:搜索支撑树时,路由转发树生成算法采用kruskal算法;搜索最短路径树时,路由转发树生成算法采用Dijkstra算法。

4.如权利要求2或3所述工业无线网状网络的数据传输方法,其特征在于:从多棵支撑树中选出若干条并发路径的具体方式如下,每一棵支撑树中,都确定了任一源目节点对间的一条路径;设支撑树数目为k,k棵支撑树中提供的共k条路径构成路径集合P;

首先两两对比各路径经过的中间节点,若无相同的中间节点,则路径为节点不相交路径,从路径集合P中选出两条节点不相交路径作为并发路径;若路径集合P不存在两条节点不相交路径,则寻找两条链路不相交路径,若找到两条只有公共节点但无公共边的链路不相交路径,则以此两条路径作为并发路径。

说明书 :

一种工业无线网状网络的数据传输方法

技术领域

[0001] 本发明涉及无线通信网络中的路由技术领域,尤其是涉及一种工业无线网状网络的数据传输方法。

背景技术

[0002] 无线网状网(Wireless Mesh Network,WMN)也称无线Mesh网,是基于无线信道进行网络通信传输的。由于受衰落、干扰、多径效应、阻隔等影响,无线链路常常会发生临时性的误码率增高或中断故障,这种现象有时持续时间较短(几十秒),有时持续时间较长(几分钟)。参见刘乃安.无线局域网(WLAN)——原理、技术与应用[M].西安:西安电子科技大学出版社,2004:8。无线网络系统会因无线链路的不稳定导致网络的整体传输性能下降,特别是对传输时延和可靠性都有较高要求的一些应用(如工业控制网络),现有的无线网络技术显得力不从心。无线Mesh网络中,网络节点移动性较低或不移动(主要是终端移动),网络拓扑呈网状结构。因此,可以有针对性地利用节点间存在的多条传输路径来提高传输的可靠性和实时性,从而降低无线链路不稳定的负面影响。同时,采用多路径传输可以获得更多的带宽,间接地减少了端到端的数据传输延迟。 [0003] 目前,已有的多路径路由技术的目标有两个,一是利用冗余链路进行网络保护;二是通过优化流量分布来缓解网络拥塞。这方面的研究已有较多,相关的学术论文也不少。IETF专门成立了多路径传输控制协议(MPTCP)工作组,致力于解决MPTCP体系结构、拥塞控制、路由、安全等方面的问题。参见王毅、廖晓菊、潘泽友,多路径传输控制协议综述,信息与电子工程,2011年第9卷第1期,7~11页。
[0004] 由于无线网络的特殊性,故在较多的研究中使用了多路径路由机制来提高传输性能。这些多径路由协议是针对无线自组织网——Ad hoc中节点的高移动性,以及拓扑结构的多变性设计的。针对网络故障恢复,IP网络中常采用基于分离路径的方法,另外,也有基于冗余树的方法、基于保护环的方法。多拓扑路由(multi-topology routing,MTR)可以实现拓扑级的链路备份和流量分路径传递,可以灵活地映射不同类型的流量到不同的子拓扑上,确保业务的开展。因此,近几年有关MTR的研究得到较快发展。
[0005] 但是,已有的多路径研究都是针对一般网络系统特性展开的(如Internet),缺少针对工业控制网络应用特点的专门研究。工业控制网络系统有其自身的传输要求,特别是对检测数据和控制指令的传输有很强的时效性和可靠性要求,如果使用用户数据报协议UDP,无线链路的不稳定会导致一些重要数据的丢失;而使用传输控制协议TCP虽然不会丢失数据,但重传时延不能满足所需的实时性要求。同时,工业网络系统中也需要传输现场的监视画面信息、语音信息、以及常规的文本信息。
[0006] 无线工业网络在实际应用中有广泛的应用领域,如不适宜布线的恶劣环境、对移动设备的监测和控制等。因此,要想将无线Mesh网络应用到工业控制领域,首先需要解决的就是无线网络传输中实时性和可靠性相结合的保证机制问题。

发明内容

[0007] 针对上述无线Mesh网络与工业控制应用结合所面临的问题,本发明设计一种新的基于无线Mesh网络的数据传输方法,在网络层提供数据包传输过程中实时性和可靠性相结合的支持,最大限度地满足工业控制应用对网络通信的要求。
[0008] 本发明的技术方案为一种工业无线网状网络的数据传输方法,将无线网状网络中所需传输的数据分为两大类,第一类数据包括现场设备运行中的检测信号和控制现场设备动作的指令信号;第二类数据包括现场视频、语音、图片和文本;
[0009] 对第一类数据采用多路径进行传输,具体实现方式如下,
[0010] 从一个无线网状网的原始网络拓扑图中搜索出多棵支撑树,从多棵支撑树中选出若干条并发路径,利用所有并发路径同时传递同一个数据包;
[0011] 在连接接收终端的路由器上对重复的数据包进行处理;所述处理方式为,由路由器将需要转发到相同目的地且之前已经转发过的数据包丢弃;
[0012] 对第二类数据采用单路径进行传输,具体实现方式如下,
[0013] 以无线网状网络中的每个节点为源搜索其到其它所有节点的最短路径树,根据最短路径树确定每条节点的常规路由表;从一个无线网状网的原始网络拓扑图中搜索出多棵支撑树,每棵支撑树对不包含在其中的链路提供保护,根据支撑树得到备份路由表,并保存在各节点上;
[0014] 按照常规路由表采用单路径传输数据包;
[0015] 当检测到某条无线链路失效时,立即切换到备份路由表继续传输数据包。
[0016] 而且,搜索支撑树或最短路径树的具体方式如下,
[0017] 对于无线网状网的原始网络拓扑图,利用路由转发树生成算法找到一棵树T1,对于原始网络拓扑图中不属于树T1的边均由树T1提供保护;
[0018] 如果从原始网络拓扑图中删除树T1中所有的边,剩余的拓扑图仍为连通图,则将剩余的拓扑图边信息作为输入,再次运行路由转发树生成算法,得到树T2,树T2对树T1中所有的边进行保护;
[0019] 如果从原始网络拓扑图中删除树T1中所有的边,剩余的拓扑图为非连通图,则从树T1中挑选出保持整个拓扑图连通所必需的边,删除树T1中其他的边,在此基础上再运行路由转发树生成算法,得到树T2,树T2保护树T1中被删除的所有边;再从原始网络拓扑图中删除树T1中尚未被保护的边,重复类似的选择过程,直到原始网络拓扑图中所有的边都有相对应保护它的树为止。
[0020] 而且,搜索支撑树时,路由转发树生成算法采用kruskal算法;搜索最短路径树时,路由转发树生成算法采用Dijkstra算法。
[0021] 而且,从多棵支撑树中选出若干条并发路径的具体方式如下,
[0022] 每一棵支撑树中,都确定了任一源目节点对间的一条路径;设支撑树数目为k,k棵支撑树中提供的共k条路径构成路径集合P;
[0023] 首先两两对比各路径经过的中间节点,若无相同的中间节点,则路径为节点不相交路径,从路径集合P中选出两条节点不相交路径作为并发路径;若路径集合P不存在两条节点不相交路径,则寻找两条链路不相交路径,若找到两条只有公共节点但无公共边的链路不相交路径,则以此两条路径作为并发路径。
[0024] 本发明是针对无线网状网络应用于工业控制通信而提出的技术方案,将不同类型的数据信息通过不同的路由转发方式在网络中传递,从而提供不同的服务质量保证。本发明提供方案的效果为:一是对可靠性和实时性要求都高的数据,采用由多条不同的路径并行发送的方式,来保证数据传递的成功率,避免因某条无线链路出现问题而导致的数据重传,也就是尽可能一次传递成功;二是对容忍少量丢失或时间不敏感的数据,采用前摄性路由机制,预先为每个节点都计算好某条无线链路故障时的备份路径方案,一旦检测到链路故障,就切换到可以提供链路保护的备份路由模式工作,实现快速故障恢复。

附图说明

[0025] 图1为kruskal算法的流程图。
[0026] 图2为kruskal算法根据输入拓扑生成支撑树的示例图。
[0027] 图3为本发明实施例的生成多支撑树流程图。
[0028] 图4 为本发明实施例的单棵树路径搜索流程图。
[0029] 图5 为本发明实施例的多树中并发路径搜索流程图。
[0030] 图6为本发明实施例的socket_s结构体示意图。
[0031] 图7为本发明实施例的数据包重复处理流程图。
[0032] 具体实施方式
[0033] 本发明是针对无线网状网络应用于工业控制通信而提出的技术方案,重点考虑了将不同类型的数据信息通过不同的路由转发方式在网络中传递,从而提供不同的服务质量保证。本发明提供方法的目标为:一是对可靠性和实时性要求都高的数据,采用由多条不同的路径并行发送的方式,来保证数据传递的成功率,避免因某条无线链路出现问题而导致的数据重传,也就是尽可能一次传递成功;二是对容忍少量丢失或时间不敏感的数据,采用前摄式路由机制,即预先为每个节点都计算好某条无线链路故障时的备份路径方案,一旦检测到链路故障,就切换到可以提供链路保护的备份路由模式工作,实现快速故障恢复。因此,实施例进行以下操作:
[0034] 1)将网络所需传输的数据分为两大类,一类为现场设备运行中的检测信号和控制设备动作的指令数据,其对传输的实时性和可靠性都要求较高;另一类为现场视频、语音,以及一般的图片和文本数据。
[0035] 2)对第一类数据采用多路径并发路由传输机制,利用多条路径同时传递同一个数据包(对周期性的检测数据和操作发出的控制指令来说,通常只需若干比特即可)。这样即使个别无线路径出现问题,仍可以通过其他路径保证一个数据或指令在许可的时延内传递到接收设备,从而避免因出错或丢失造成的重传,确保实时性和可靠性的兼顾。由于这类数据包很小,即使采用多条路径并发传输同一个包,对网络负荷产生的影响也不大。
[0036] 实施例实现方式为,从一个无线网状网的原始网络拓扑图中搜索出多棵支撑树,从多棵支撑树中选出若干条并发路径,利用所有并发路径同时传递同一个数据包;在连接接收终端的路由器上对重复的数据包进行处理;所述处理方式为,由路由器将需要转发到相同目的地且之前已经转发过的数据包丢弃。
[0037] 3)对第二类数据仍采用单路径路由传输机制,利用多拓扑方法为每条无线链路确定备选的故障切换子拓扑,一旦检测到某条链路故障(不能探测到邻居的响应消息),则立即切换到已选定的备份子拓扑继续后续的数据传输,实现快速重路由,尽量减少链路故障造成的丢包损失。实施例实现为,以无线网状网络中的每个节点为源搜索其到其它所有节点的最短路径树,根据最短路径树确定每条节点的常规路由表;从一个无线网状网的原始网络拓扑图中搜索出多棵支撑树,每棵支撑树对不包含在其中的链路提供保护,根据支撑树得到备份路由表,并保存在各节点上;按照常规路由表采用单路径传输数据包;当检测到某条无线链路失效时,立即切换到备份路由表继续传输数据包。
[0038] 对于数据分类的方法与常规的数据流分类方法类似,主要是在终端设备上根据分组头部的信息(如IP地址、端口号、协议类型等)来区分,同时加入分类后的标记。由于分类内容不属于本发明中的路由机制,路由机制只是针对不同标记的分组采取不同的路由转发策略,故在此不再详细介绍分类方法。
[0039] 另外,对一个具体网络的物理拓扑结构的发现也不属于本发明的研究内容(这属于网络拓扑发现研究的有关内容)。所以,后续都是在已知网络拓扑结构的条件下,讨论传输路径的发现策略和形成机制。
[0040] 本发明实施例路由算法选择的路径均基于支撑树或最短路径树确定,单棵路由转发树的生成采用的是图论中现有的kruskal算法和Dijkstra算法。下面,分别介绍实施例中实现路由机制的核心内容,即基于kruskal算法的多支撑树生成算法、并发路径的选择算法和多拓扑快速重路由算法。
[0041] 1.多支撑树生成算法
[0042] 本发明的路由机制,首先要从一个网状网络的原始拓扑中寻找多棵支撑树,再从这些支撑树中选择所需的传输路径。每一棵支撑树的生成都是利用kruskal算法实现的,只是输出的结果(即生成的子拓扑图)不一样。下面介绍kruakal算法,以及利用该算法搜索出所需支撑树的步骤。
[0043] 1)支撑树的生成算法——kruskal算法
[0044] (kruskal算法是图论中生成树的经典算法为便于实施参考起见,本发明提供说明如下:
[0045] kruskal算法从网络拓扑中获得单棵支撑树,保证每次产生的支撑树均为所输入连通图的一棵最小支撑树。Kruskal算法是一种贪心算法,对于一个含有n个节点的网络拓扑图,kruskal算法从原始网络图的边中,每次选择代价或权值最小的边,并且要保证所选择的边不构成环路,直到选择出了n-1条边,形成一棵覆盖所有节点的生成树,算法终止。
[0046] 图1给出的是kruskal算法的流程图,S用来记录生成树的边,初始化S为空集,算法描述如下:
[0047] Step1:设置i,j索引值,i=0,j=1;将网络中所有的边按权值由小到大升序排列,设为 e1、e2、e3…en,构成边集合;
[0048] Step2:判断集合S中边的数目是否为n-1,即判断i是否等于n-1;若为n-1,则输出S,算法结束;不为n-1,则到Step3;
[0049] Step3:选择边集合中权值最小的边(即当前的ej),判断边ej与集合S中现有的边是否构成环路,即S∪{ej}是否构成回路。是则从边集合中取出边ej,j=j+1,考虑下一条权值最小的边,直到选择了与集合S中现有边不构成环路且权值最小的边为止。否则,记录已加入的边的数目i=i+1,将选择的边添加到集合S中,即 ai=ej,S=S∪{ai},从边集合中取出边ej,j=j+1,转Step2。判断边ej与集合S中现有的边是否构成环路,具体可以通过边ej的两个端点是否都在集合S现有边构成的节点集合中进行判断。∪表示加入子集运算[0050] 图2中给出的为利用kruskal算法得到支撑树的例子,对于给定的原始网络拓扑图,有5个节点V1、V2、V3、V4、V5,7条链路e1、e2、e3、e4、e5、e6、e7,对链路按照权重由小到大的顺序进行排列,假设为E={e1、e2、e3、e4、e5、e6、e7}。S初始时为空集,依次从E中取边加入S中,第一次选择边e1,S={ e1};第二次选择e2,e2与S中的边不构成环路,故S={ e1、e2};第三次选择边e3,e3与S中的边不构成环路,则S={ e1、e2、e3};第四次依次考虑边e4、e5,均与S中的边构成环路,考虑e6,e6与S中现有边不构成环路,故S={ e1、e2、e3、e6},n=5,|S|=n-1,算法结束,最小支撑树形成。
[0051] 2) 多支撑树生成算法
[0052] 为便于实施参考起见,本发明提供实施例设计的多支撑树生成方法如下:
[0053] 由于树的任意两点之间只有唯一的一条路径,所以,计算出支撑树后不再需要其他路径搜索算法,直接提取任意两节点之间的路径即可。
[0054] 针对本发明的设计目标,即通过多条不同的路径同时发送第一类数据来确保检测数据和指令信息的实时性和可靠性,通过备份的冗余路径为第二类数据提供快速重路由切换保护。这些都需要找出多条路径,也就需要找出不同的多个生成树,从多颗树中分别选取不同的合适路径来实现并发和备份功能。下面介绍多棵支撑树搜索算法。
[0055] 由于是针对无线链路提供可靠性保护,也就是在网状的图中对边的冗余保护。而一个网状图的支撑树可以有许多,所以,以及选择什么样的支撑树遵循以下规则:
[0056] 规则一、最终确定的多棵支撑树必须保证原始网络拓扑图中的每一条边,至少在选出的某一棵支撑树中不被包含。
[0057] 规则二、当原始网络拓扑图中所有的边都被包含于某棵选出的支撑树后,不再选择更多的支撑树,算法终止。
[0058] 规则一确保了网络中任意一条无线链路出现问题时,都有可供使用的备份路径,即可以从不包含该链路对应边的支撑树中选择路径。
[0059] 规则二确定了所需使用的支撑树的个数。本发明利用有限棵支撑树即可对网络中的链路实现全备份,针对n个节点,m条边的网络拓扑,在极端的情况(环形拓扑)需要m个备份拓扑,也即至多需要m棵支撑树即可完成备份。对网络最小节点度数满足一定要求的拓扑结构来说,需要的支撑树个数比较少,如对于超欧拉图,只需找出两棵链路不相交的支撑树即可。相关的研究表明,绝大多数的网络都只需5~6棵支撑树就可以实现对全部链路进行备份的要求。可参见Amund K. Audum F.H. et al. Fast Recovery from Link thFailures using Resilient Routing Layers. Proceedings of the 10 IEEE Symposium on Computers and Communications (ISCC 2005)。
[0060] 选择最短路径树的规则相同。
[0061] 本发明进一步提出,多棵支撑树或最短路径树的选择方式:
[0062] (1)对于初始输入的邻接矩阵(原始网络拓扑图),利用路由转发树生成算法找到一棵树T1,对于原始网络拓扑图中不属于树T1的边均由树T1提供保护,即当这些非树T1中的边中某一条出现故障无法顺利传输数据时,树树T1中仍有路径连接所有节点,利用树T1中的路径即可避开故障链路。路由转发树生成算法为支撑树生成算法(如kruskal算法)或最短路径树生成算法(如Dijkstra算法)。
[0063] (2)如果从原始网络拓扑图中删除树T1中所有的边,剩余的拓扑图仍为连通图,则将剩余的拓扑图边信息作为输入,再次运行路由转发树生成算法,得到树T2。故树T2可对树T1中所有的边进行备份保护,也即只需两棵树就可以满足的前面给出的规则。
[0064] (3)如果从原始网络拓扑图中删除树T1中所有的边,剩余的拓扑图为非连通图,则需要从树T1中挑选出保持整个拓扑图连通所必需的边,删除树T1中其他的边,在此基础上再运行路由转发树生成算法,得到树T2。树T2可以保护树T1中被删除的所有边。再从原始网络拓扑图中删除树T1中尚未被保护的边(前面为保持连通性而保留的边),重复类似的选择过程,直到原始网络拓扑图中所有的边都有相对应保护它的备份树为止。
[0065] 由于本发明只针对不存在割边的网络拓扑(单条无备选路径的边),则对于两个不连通的子分量,在被保护的割边集合中,必定能找到单一的一条边,即可使子连通分量连通。
[0066] 实施例基于kruskal算法设计了多支撑树生成算法,图3给出了多支撑树生成算法的流程图,算法描述中涉及的符号说明如下:
[0067] G(N,A)表示原始网络拓扑图,N表示原始网络拓扑图的节点集合,A表示原始网络拓扑图的边集合;unprotect表示未被保护的边集合,cutedge是网络中割边构成的集合,backtopo表示备份拓扑(即生成的各支撑树边信息集合),T为每次用kruskal算法生成的支撑树,addedge表示为使网络恢复连通性可添加的边集合,E表示当前输入kruskal算法的边,subpart表示不连通网络各子部分的集合。
[0068] 算法中C=C1\C2操作表示C集合是从C1集合中删除C2集合得到的;T=kruskal(E)表示对于输入的边集合E,利用kruskal算法得到支撑树T。
[0069] 参见图3,算法的具体步骤如下:
[0070] Step1:输入原始网络拓扑图的带权邻接矩阵adjmat,初始化unprotect=A,backtopo=NULL(空),E=A。
[0071] Step2:判断网络中是否存在割边。对于任意边e A,删除e,从任意节点出发若能访问网络中所有节点,则e不为割边,否则e为割边;若发现割边,则报警,告知管理员需对网络拓扑进行重新布置。
[0072] Step3:利用kruskal算法计算出最小支撑树T=kruskal(E),支撑树T对边集合A中不被其包含的边进行保护,则unprotect=unprotect∩T,backtopo=backtopo∪T。∩表示从子集中去除,∪表示加入子集运算。
[0073] Step4:更新当前的边集合E,即从原始网络拓扑图的边集合A中删除未被保护的边集合unprotect,E=A\unprotect。
[0074] Step5:判断原始网络拓扑图的节点集合N与Step4所得边集合E构成的网络G’(N,E)是否连通。选择节点集合N中任意节点v,从节点v出发若不能访问网络G’中所有节点,则网络G’不连通,转Step6,通过执行Step6~8确定各不连通分量,在被保护边集合(由边集合A中不属于边集合unprotect的边构成) 中选择边添加到边集合E中,使各分量连通;否则网络G’连通,转Step9。
[0075] Step6:找到网络G’的各不连通分量,即各子部分,保存在集合subpart中;子部分的寻找方法为,对于任意节点v N,从该节点出发能访问的所有边和节点构成一个子部分sub1,从网络G’中删除子部分sub1中的所有元素,任选一个节点,从该节点开始访问到的所有边和节点为子部分sub2…重复这样的操作,直到找到所有子部分,将其保存在集合subpart中。
[0076] Step7:从集合subpart中任选两个子部分,从原始网络拓扑图的边集合A中选择能使此两个子部分连通的边,选择权值最小的边添加到边集合addedge中,重复此操作,直至网络G’变为连通网络。
[0077] Step8:E=E+addedge。
[0078] Step9:利用kruskal算法计算出最小支撑树T=kruskal(E),unprotect=unprotect∩T,backtopo=backtopo∪T。
[0079] Step10:判断未被保护的边集合unprotect是否为空,是则多支撑树生成算法结束;否则转Step4。
[0080] 选择了多颗支撑树,就可以直接基于这些树来确定所需的传输路径。对于本发明的多路径并发传输和路径备份这两种针对两类数据的应用来说,只需从不同的树中分别选择出不同的路径即可。
[0081] 3)链路权值的确定
[0082] 在本发明实施例中,以链路失效率作为链路的权值,上述支撑树算法都力图寻找链路权值最小的生成树(可靠性最高的树)作为选择的支撑树。链路失效率的获得方法属于现有技术,为便于实施参考起见,本发明提供描述如下。
[0083] 设网络中链路数目为|E|,进行无线链路质量测量的总时间长度为T(大约为几十个小时),将T划分为N个时隙(slot),每个slot的时间长度为t0(大约为几秒),代表短期无线链路的质量统计时段,其中包含若干个测得的链路质量指标数据。计算在[j*t0, (j+1)*t0]时段内(j取值为0,1,2…N-1),链路Li的质量测度指标(PDR)的数学期望E(Rij)和方差D(Rij),这样得到所有链路的|E|*N个短期质量指标的数字特征。
[0084] 对|E|*N组指标数据(E(Rij)和D(Rij)),分别计算总体的数学期望E(R)和方差D(R),并参照此确定数学期望的阈值Eth和方差的阈值Dth,若E(Rij)大于Eth,且D(Rij)小于Dth,则此链路Li在对应的时段j内被认为是质量好的,没有失效,否则,此链路被认为是失效的。将具体的质量指标统计值转换为统一的布尔类型数据,对每条链路Li生成链路状态N元组Ai = {ai1,ai2,…aiN},如果对应第j个time slot时链路质量被认为是好的,则aij=1,否则aij= 0,该数组作为后面网络部署与路由选择等工作中链路选择的依据。对单条链路Li而言,在整个测量时间段内的链路平均失效概率可表示为: 。
[0085] 2.并发路径选择算法
[0086] 基于生成的多颗支撑树,在每一棵支撑树中,都确定了任一源目节点对间的一条路径。对于G(N,A)代表的原始网络拓扑图,n=|N|表示网络中节点数,m=|A|表示网络中链路数。对于原始网络拓扑图G,利用多支撑树算法生成支撑树T1,T2,……,Th,eij表示节点i和节点j间的链路,对于源目节点对(s,t),在生成的h棵支撑树中,存在q条路径,集合P={P1,P2,……,Pq}表示路径集合,从q条路径中,可选择k条节点不相交或者链路不相交的并发路径,源目节点对(s,t)间的数据,将同时在这k条路径上发送。源目节点对(s,t)中,s表示源节点,t表示目的节点。
[0087] 在实际应用中,一般采用两条并发路径,并且,优先选择节点不相交的路径。实施例提出
[0088] 从多棵支撑树中选出若干条并发路径的具体方式如下:
[0089] 每一棵支撑树中,都确定了任一源目节点对间的一条路径;设支撑树数目为k,k棵支撑树中提供的共k条路径构成路径集合P;
[0090] 首先两两对比各路径经过的中间节点,若无相同的中间节点,则路径为节点不相交路径,从路径集合P中选出两条节点不相交路径作为并发路径;若路径集合P不存在两条节点不相交路径,则寻找两条链路不相交路径,若找到两条只有公共节点但无公共边的链路不相交路径,则以此两条路径作为并发路径。
[0091] 根据选出的这两条并发路径,具体配置两条不同的MPLS标记交换路径,即可应用到实际数据传输中。
[0092] 1)单树中路径搜索算法
[0093] 单树中路径搜索算法是现有技术中一种对树中节点的搜索方法,为便于实施参考起见,本发明提供说明如下:
[0094] 根据生成的支撑树,需要寻找到源目节点对间的唯一路径。生成的支撑树T中,记录了存在于树中的边信息,假设源目节点对(s,t)利用支撑树T上路径发送数据,因为每一棵支撑树上任意节点对间有且仅有一条路径,选择源节点s为根节点,对于支撑树,除根节点s外每个节点有唯一的父亲节点,根据支撑树T中信息,从节点s开始,与节点s连接的任意节点v,其父亲节点均为s,即parent(v)=s,对于任意节点v,寻找与其相连的节点w(排除其父亲节点),则parent(w)=v,依次类推,直到找到目的节点t,则从目的节点t沿着节点t的父亲节点依次搜索各节点的父亲节点,直到源节点s,即找到了源目节点对(s,t)间的唯一路径。
[0095] 假设在支撑树中,边的保存形式为(viejvj),其中vi、vj为边ej的两个端点,则对于有n个节点的树T,存在n-1条边,可表示为T={(v0e1v1),……,(viejvj),……,(vn-2en-1vn-1 )}。
[0096] 从支撑树中寻找源目节点对(s,t)间路径的流程图如图4所示,算法具体描述如下:
[0097] 其中path为寻找到的边及节点集合,parent(v)表示节点v在支撑树中的父亲节点,CurNodeSet为当前需要寻找孩子节点的节点集合,nextSet为下一次需要进行处理的节点集合,childSet为孩子节点集合。
[0098] Step1:path=null,对于所有属于原始网络拓扑图的节点集合N的节点v,parent(v)=null,CurNodeSet=s,nextSet=null,childSet=null;
[0099] Step2:在支撑树T中找到节点集合CurNodeSet中节点的孩子节点,对于任意的节点CurNode CurNodeSet,遍历支撑树T中所有的边。设当前遍历到的边为e,其两个端点为vi、vj,若vi=CurNode,则childSet=childSet∪vj,nextSet=nextSet+vj,T=T-(vievj),进入步骤Step3;否则判断是否vj=CurNode,是则childSet=childSet∪vi,nextSet=nextSet+ vi,然后T=T-(vievj),进入步骤Step3。否则,当vj=CurNode不成立时,从支撑树T所有的边中取下一未考虑的边重复相同操作,直到有边的端点vi=CurNode或vj=CurNode;
[0100] Step3:对于任意的节点v childSet,parent(v)=CurNode,CurNodeSet= nextSet;
[0101] Step4:判断支撑树T是否为空,否则转step2,取下一未考虑的节点CurNodeCurNodeSet;是则进入step5;
[0102] Step5: v1=t,v2=parent(v1),path=path∪(v2ev1),v2ev1表示节点v2和v1之间的边;
[0103] Step6:判断v2是否等于源节点s,是则算法结束,否则 v1=v2,转到step5。
[0104] 2)多树中并发路径搜索算法
[0105] 本发明设计了与多支撑树算法相配套的多树中并发路径搜索算法,具体实现如下:
[0106] 利用上述在单树中寻找源目节点对(s,t)间路径的方法,对于多支撑树算法生成的多棵支撑树集合,可以找到多条路径,用路径集合Path={P1,P2,……Pk}表示,根据源目节点对和路径集合,寻找两条并发路径的算法流程图如图5所示,下面给出算法的具体步骤,其中disPath表示最终得到的不相交路径集合。
[0107] Step1:设i=1,j=i+1,disPath=null;
[0108] Step2:对于路径集合Path内的路径Pi中任意节点v Pi(v s,v t),遍历路径集合Path内的另一条路径Pj中节点,即对于任意节点w Pj,判断是否v=w,否则Pi与Pj为节点不相交路径,disPath={ Pi,Pj},算法结束,是则j=j+1;
[0109] Step3:判断j是否大于k,否则转到step2,取路径集合Path内的下一条路径Pj进行同样处理,是则i=i+1;
[0110] Step4:判断i是否大于k,否则到step2,取路径集合Path内的下一条路径Pi进行同样处理,是则无法找到两条节点不相交集合,进入step5开始寻找链路不相交集合;
[0111] Step5:i=1,j=i+1;
[0112] Step6:对于路径集合Path内的路径Pi中任意的边e Pi,遍历路径集合Path内的另一条路径Pj中节点,即对于任意边a Pj,判断是否e=a,如果否,则路径Pj与路径Pj为链路不相交路径,则disPath={ Pi,Pj},算法结束,是则j=j+1;
[0113] Step7:如果j是否大于k,否则到step6取路径集合Path内的下一条路径Pj进行同样处理,,是则i=i+1;
[0114] Step8:判断i是否大于k,否则到step6取路径集合Path内的下一条路径Pi进行同样处理,,是则即无法找到节点不相交或者链路不相交链路,输出报警提示。
[0115] 3)重复数据包的处理
[0116] WMN中链路失效只是偶尔发生,采用多路径并行发送的数据包在大部分情况下均会成功到达接收端,接收端可能收到较多的重复数据包。这不但增加了接收端的处理负担,而且可能重复对设备进行同样的操作,引发错误,因此,必须在接收端进行重复包的处理。本发明采用在连接接收终端的路由器上对数据包进行重复处理,路由器将需要转发到相同目的地、之前已经转发过的数据包丢弃,目的终端就不会收到重复的数据包。这就需要对经过目的端路由器的数据包做唯一的标识。
[0117] 为了区分收到的数据包是否重复,就必须对每个数据包做唯一的标识,之后收到的数据包与这个标识进行对比。由于TCP提供面向连接的、可靠的字节流服务,协议中每个报文段都有自己的序号,可以做到传输时无丢失、无差错、无时序、无重复。所以,本发明实施例中只考虑对UDP和ICMP(Internet控制报文协议)数据包做标识。
[0118] IP首部中16位的标识字段(Identification,ID),是一个计数器,用来产生数据包的标识。当IP协议(因特网协议)发送数据包的时候,它将该计数器的当前值封装发到数据包的标识字段中。当数据包的长度超过物理网络的最大传输单元MTU而必须分片传输时,这个标识字段被复制到所有分片的数据包的标识字段中。接收端把具有相同的标识字段的数据包片重组成原来的数据包。在大多数伯克利派生出来的系统中,每发送一个IP数据包,IP层都要把计数器加1,这样IP数据包的标识是按次序增加的。对检测信号和指令数据,数据包长度均很小,不需要分片,故本发明实施例采用IP包的标识字段ID作为唯一标记符。
[0119] 为了检测是否出现重复数据包,本发明实施例定义了一种新的数据结构socket_s,如图6所示,将数据包的标识缓存起来。
[0120] 在socket_s{ }结构(struct)中,为了便于查找和管理将来自于同一个套接字(socket)的id缓存在一个Hash(哈希)链表中。不同的socket通过next指针(struct socket_s *next)链接在一起。图6中src_ip为源IP地址,src_port为源端口号,id[]为指针数组(*表示数组中的每个元素都是一个“指针”),指向多个存储id的链表,node_link_len[]为各条链表的长度。flag标志反映当前socket(数据包)是否活跃,timer为定时器,Node_id_link{}表示网络中每个节点id的数据结构。
[0121] 当数据包到达靠近接收端的路由器时,路由器就开始判断以前是否收到过这个数据包,接着进行相关处理,重复处理的流程如图7所示。 Step1:数据包到达时,从包头中提取出源IP地址src_ip,源端口号src_port和
[0122] 包标识号src_id;
[0123] Step2:在socket链表中,查看该数据包是否存在,找到则转step3,不存在则转step7;
[0124] Step3:更新定时器;
[0125] Step4:查找id链表,判断是否找到当前id,是则转step5,否则转step6;
[0126] Step5:丢弃当前数据包,释放掉内存,处理过程完成;
[0127] Step6:将包标识号src_id插入到id链表中,转step9;
[0128] Step7:将本数据包信息添加到socket链表,将包标识号src_id添加到id链表;
[0129] Step8:初始化定时器;
[0130] Step9:将数据包交上层处理,重复处理过程结束。
[0131] 4)基于MPLS的快速转发
[0132] 对前面选出的多条并发路径,利用多协议标记交换(MPLS)技术,预先建立好多条所需的并发快捷交换路径,从而提高实际应用中对检测数据和控制指令传输的实时性保证。而对其他数据信息,则采用一般的IP路由转发方式传递。
[0133] MPLS为无连接网络提供面向连接的服务,采用第二层的交换技术,可确保实时性要求高的数据按照预先建立的快捷通道传递。相关研究表明,在网络负载较重时,基于MPLS的网络传输性能要明显好于基于一般IP路由的情况。可参见刘广义,MPLS流量工程技术研究,清华大学博士论文,2004年。
[0134] 结合前面的多路径并发策略,即多条快捷路径同时传输同一份数据信息,本发明可提供实时性与可靠性相结合的传输保证,以满足工业控制应用对无线网络在传输性能上的要求。
[0135] 3.多拓扑快速重路由算法
[0136] 如前面所述,对一般的数据信息(非检测数据或控制指令)需要采用基于IP路由表的网络传递方式。为提高网络链路利用率和可靠性,本发明采用基于多拓扑静态路由表的快速重路由方式实现对常规数据报文的路由和转发。
[0137] 本发明采用为每个网络接入节点(无线Mesh网路由器)独立计算各自所需路由表的方式,即以每个节点为源计算其到其它所有节点的最短路径树。使用有源树代替前面多路径并发时使用的共享树的目的,是为了尽量避免将网络流量过于集中于某几条链路,造成有些链路负担过重,而其它一些链路时常空闲的情况。特别是针对工业应用中的实时视频监控业务,其流量比较大,且始终持续不断。合理地分布这类业务流量,对提高网络性能有很大帮助。
[0138] 1)路由表生成算法
[0139] 每个节点转发路径的计算与前面的多路径并发路径的计算过程很相似,只是用经典的Dijkstra算法代替Kruskal算法。利用类似多支撑树生成算法的step2-step10,如连通性判断、连通性保证等,并重复使用Dijkstra算法得到对EdgeST中各边进行保护的多棵备份最短路径树。依据这些树,分别生成可对不同边实施保护的路由表。
[0140] Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止,实施时参考相关文献即可。为便于实施参考起见,提供路由表的生成过程如下:
[0141] G(N,A)表示原始网络拓扑图,N表示原始网络拓扑图的节点集合,A表示原始网络拓扑图的边集合;unprotect表示未被保护的边集合,cutedge是网络中割边构成的集合,backtopo表示备份拓扑(即生成的各支撑树边信息集合),addedge表示为使网络恢复连通性可添加的边集合,E表示当前输入Dijkstra算法的边集合,subpart表示不连通网络各子部分的集合。
[0142] 算法中C=C1\C2操作表示C集合是从C1集合中删除C2集合得到的;ST=Dijkstra(E)表示对于输入的边集合E,利用Dijkstra算法得到最短路径树T。最短路径树ST中的边集合表示为EdgeST;基于最短路径树ST生成通常状态使用的路由表,可提供对所有不在最短路径树ST中的边的保护。
[0143] 参见图3,算法的具体步骤如下:
[0144] Step1:初始化unprotect=EdgeST,backtopo=NULL。
[0145] Step2:判断网络中是否存在割边。对于任意边e A,删除e,从任意节点出发若能访问网络中所有节点,则e不为割边,否则e为割边;若发现割边,则报警,告知管理员需对网络拓扑进行重新布置。
[0146] Step3:利用Dijkstra算法计算出最小支撑树ST=Dijkstra(E),最短路径树ST对边集合A中不被其包含的边进行保护,则unprotect=unprotect∩T,backtopo=backtopo∪T。∩表示从子集中去除,∪表示加入子集运算。
[0147] Step4:更新当前的边集合E,即从原始网络拓扑图的边集合A中删除未被保护的边集合unprotect,E=A\unprotect。
[0148] Step5:判断原始网络拓扑图的节点集合N与Step4所得边集合E构成的网络G’(N,E)是否连通。选择节点集合N中任意节点v,从节点v出发若不能访问网络G’中所有节点,则网络G’不连通,转Step6,通过执行Step6~8确定各不连通分量,在被保护边集合(由边集合A中不属于边集合unprotect的边构成) 中选择边添加到边集合E中,使各分量连通;否则网络G’连通,转Step9。
[0149] Step6:找到网络G’的各不连通分量,即各子部分,保存在集合subpart中;子部分的寻找方法为,对于任意节点v N,从该节点出发能访问的所有边和节点构成一个子部分sub1,从网络G’中删除子部分sub1中的所有元素,任选一个节点,从该节点开始访问到的所有边和节点为子部分sub2…重复这样的操作,直到找到所有子部分,将其保存在集合subpart中。
[0150] Step7:从集合subpart中任选两个子部分,从原始网络拓扑图的边集合A中选择能使此两个子部分连通的边,选择权值最小的边添加到边集合addedge中,重复此操作,直至网络G’变为连通网络。
[0151] Step8:E=E+addedge。
[0152] Step9:利 用 Dijkstra 算 法 计 算 出 最 小 支 撑 树 T=Dijkstra(E),unprotect=unprotect∩T,backtopo=backtopo∪T。
[0153] Step11:判断未被保护的边集合unprotect是否为空,是则多支撑树生成算法结束;否则转Step4。
[0154] 以上路由表的生成算法中Step2~Step10类似多支撑树生成算法的step2-step10如连通性判断、连通性保证等,并重复使用Dijkstra算法得到对EdgeST中各边进行保护的多棵备份最短路径树。依据这些树,分别生成可对不同边实施保护的路由表。
[0155] 每个节点的常规路由表和备份路由表均在管理机上计算,管理机将生成的各子拓扑对应的路由表发送到各节点上,则在网络中的每个节点上,都保存了与最短路径树对应的路由表以及最短路径树上各边失效后将采用的路由表,其形式为,表示当收到链路e失效的通知时,利用table表查找路由信息。
[0156] 在网络无故障的情况下,各节点利用常规路由表发送信息;一旦检测到某条链路失效,各节点立即切换到对失效链路进行保护的相关路由表,进行故障的快速恢复。
[0157] 虽然需要对所有节点逐一计算路由表,但由于本发明实施例使用的是离线计算方式,并且,工业控制网络不会特别大(一般几十个节点或上百个节点已算是较大的网络了),所以,该方法实际中是可行的。
[0158] 2) 链路失效检测
[0159] 链路失效探测。各路由器直接通过ICMP ping包进行链路失效的检测,相邻的路由器之间周期性地(如20ms一次,参数可调)发送ICMP ping请求包检测链路,如果一段时间内(如70ms,参数可调)没有收到ping响应则认为链路失效。
[0160] 链路失效检测的方法可以有许多具体实现机制,可以利用现有技术实现,故在此不再做详细论述。
[0161] 3)路由表切换
[0162] 路由表切换首先由发现链路失效的节点触发,该节点使用特定的UDP数据包将失效链路(边)的信息以泛洪方式通知所有邻居节点;各节点收到链路失效通知时,检测信息,在对应的table表中查找下一跳。这其中主要需解决如何将链路失效消息通知给所有其他节点。
[0163] 本发明实施例中,由于各个节点根据保存的路由表是以自身为源的最短路径树所生成的,并且,在得到链路失效通知时才会查找对失效链路进行保护所需的路由表,故检测到链路失效的路由器需要将链路失效消息在全网范围内进行通告。
[0164] 本发明实施例采用泛洪的方式散播链路失效消息。每个路由器在未收到某链路已恢复的消息时,均会保存收到的链路故障消息。假设需要传输的消息链路失效消息为m,在链路失效消息报文中,设置其TTL值为网络直径的值(该值可由管理机下发给路由器),监测到消息m的路由器R1向所有邻居路由器发送m消息,收到m消息的路由器R2对m的具体操作如下:
[0165] Step1 路由器R2查找是否已收到过该消息,是则丢弃m;否则转step2。
[0166] Step2 路由器R2在本地保存消息m。
[0167] Step3 路由器R2判断消息m的TTL值是否为0,否,将m发送到除R1以为的所有邻居路由器;是,不对消息进行转发。
[0168] 路由器R1监测到链路恢复后,将链路恢复消息按照同样的方式进行泛洪,各路由器收到链路恢复消息后即删除本地保存的链路失效消息,数据包即按照初始路由进行转发。
[0169] 以上实施例仅供说明本发明之用,而非对本发明的限制,有关技术领域的技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变换或变型。因此,所有等同的技术方案,都落入本发明的保护范围。