一种基于WMN的矿井下多策略混合修复路由协议的制作方法

文档序号:11064750阅读:357来源:国知局
一种基于WMN的矿井下多策略混合修复路由协议的制造方法与工艺
本发明涉及无线通信
技术领域
,尤其是一种基于WMN的矿井下多策略混合修复路由协议。
背景技术
:随着煤炭开采和巷道掘进,煤矿井下采煤工作面和掘进工作面在不断推进,是个移动的工作环境,且井下环境恶劣、开采条件复杂,有线通信网络无法到达这些特殊区域,由于有线节点受其数据传输方式的限制,使得有线链路的布控范围有限,容易受到环境因素的制约,且有线网络的监测点有限,无法全方位监测这些区域的灾害信息。由于有线网络的可拓展能力差,对故障应对能力相对薄弱,难以应对井下的复杂环境,因此需要无线通信。无线Mesh网络(WirelessMeshNetwork,WMN)具有快速部署、组网灵活和扩展性强等特点,因此适用于一些环境比较复杂的区域,例如煤矿井下巷道监测。井下的无线Mesh网络的体系结构可分成终端设备型、基础设施/骨干型和混合型等三种类型,其中,终端设备型无线Mesh网络仅由终端节点组成,终端节点除了可以发送数据外,还可以用于转发数据,自组网提供通信支撑。骨干型无线Mesh网络中,网络终端只能收发数据,不能转发来自其他节点的数据,且任意两个终端设备间不能直接通信,需用无线路由器作为节点间联系的桥梁,实现彼此的数据交换以及无线宽带接入。混合型无线Mesh网络是一种结合了上述两种网络的特点形成的新型网络,且具备优于两者的良好性能。在混合型无线Mesh网络中,终端设备可以用于转发数据,与无线路由器组成混合数据传输通路。当链路出现故障时,由于节点都具有数据转发的功能,因此可以使用终端节点参与路由,配合网路中的无线路由节点,使得路由修复更加灵活,鲁棒性更好。由于井下巷道狭长造成井下网络多为带状拓扑结构,网络连接度低,鲁棒性差。一旦因为某些原因造成路由节点发生故障,则无线路由所覆盖的终端节点都会与网络脱离,造成通信故障,因此迫切需要一种更加适合该网络拓扑结构的路由算法。技术实现要素:本发明的目的主要是针对煤矿井下复杂工作环境对通信质量的要求,提出一种能够快速修复网络故障,增加网络鲁棒性,提高网络通信能力的新型无线Mesh网络路由协议。协议采用链路状态预测机制及快速修复策略提高网络性能。为了达到上述目的,本发明提出的技术方案为:一种基于WMN的矿井下多策略混合修复路由协议,该协议包括以下阶段:(1)网络初始化阶段:各节点建立自己的邻居表和路由表,并初始化路与表、邻居表和HELLO数据包;路由表包括:路由的目的地、路由的序列号、路由的跳数、路由的下一跳地址、路由的下两跳地址、路由的超时时间和路由的状态;任意一个节点的邻居表包括该节点的邻居节点IP地址以及该节点与各邻居节点之间的链路连接质量;所述链路连接质量是用于衡量链路连接是否稳定的变量;(2)节点间信息维护阶段:各节点通过向相邻节点发送HELLO数据包定期交换信息,维护自己的邻居表;(3)路由建立阶段:网络中某节点需要发送数据包前,建立到达该数据包目的节点的路由;(4)路由维护阶段:在路由维护阶段,执行以下步骤:(4-1)各节点初始化自己的邻居表中的链路连接质量为Q0;(4-2)各节点根据接收到HELLO报文数量或接收到的数据包接收功率更新自己邻居表中链路连接质量;(4-3)当任意一节点K+1发现邻居表中与上一跳节点K的链路连接质量为0时,该节点发起路由提前修复,提前修复的步骤为:(4-3-1)节点K+1向节点K发送PROP_START报文,PROP_START报文中包括:TYPE字段、NC字段、DST字段、RT_SRC字段、RT_DST字段、Nn_IP字段、Nn_S字段;其中,TYPE字段记录PROP_START报文的报文类型,NC字段记录与节点K+1的链路连接质量不为零的邻居节点数,DST字段记录PROP_START报文发送的目的地,RT_SRC字段记录待修复路由的源节点,RT_DST字段记录待修复路由的目的节点,Nn_IP字段记录节点K+1第n个邻居节点的IP地址,Nn_S字段记录节点K+1与第n个邻居节点的之间的链路连接质量值;(4-3-2)节点K根据接收到的ROP_START报文选择自己与节点K+1共有的邻居节点集合,在选出的邻居节点集合中选择对应链路连接质量值最大的节点C作为中间节点;(4-3-3)将节点C插入节点K、K+1之间,形成链路K-C-K+1;插入完成后,节点K将链路的变化情况告知正向路由中K的上游节点和反向路由中K的下游节点;(4-4)当提前修复失败时,在断路处进行小范围的快速修复;快速修复包括以下步骤:当节点K与下一跳节点K+1之间的链路发生断裂时,节点K以自己路由表中记录的下两跳节点K+2作为目的节点发送快速修复请求;节点K+2接收到节点K发送的快速修复请求后,向节点K回复一个接受请求的反馈报文,建立替换链路K—K+2;(4-5)若步骤(4-4)中节点K未能找到下两跳节点作为目的节点,则快速修复失败;此时,进行二次修复,包括步骤:节点K沿反向路由向上游发送回溯消息,回溯消息每到达一个节点时,会检查当前节点是否满足修复条件;修复条件为:定义回溯消息回溯至节点A,节点A满足2*hop1>hop2,且节点A的邻居节点数量大于预设的阈值;其中,hop1表示节点A距离路由源节点的跳数,hop2表示节点A距离路由目的节点的跳数;若节点A满足修复条件,则由节点A作为二次修复的发起节点;若节点A不满足修复条件,则回溯消息会沿着反向路由继续向上游节点转发,直至回溯到源节点或下一个满足条件的节点为止;满足修复条件的节点发送以待修复路由的目的节点为目的地的RP_REQUEST包,当目的节点或者有目的节点信息的节点接收到该请求包后回复RP_REPLY报文,建立替换链并修复路由。进一步的,所述步骤(4)中,各节点根据接收到HELLO报文数量更新链路连接质量的方法为:对于任意一个节点X,每当X接收到一次邻居节点发送的HELLO报文,则令节点X与对应邻居节点间的链路质量值加1。进一步的,所述步骤(4)中,各节点根据接收到的数据包接收功率更新链路连接质量的方法为:对于任意一个节点X,当X接收到一个邻居节点所发送的连续N个数据包,且这N个数据包的接收功率逐渐增大,则令节点X与对应邻居节点间的链路质量值加1;否则,令节点X与对应邻居节点间的链路质量值加1;若X接收到一个邻居节点所发送的连续M个数据包,且这M个数据包的接收功率均小于预设的阈值,则令节点X与对应邻居节点间的链路质量值为0。进一步的,所述步骤(4-3-3)中将节点C插入节点K和K+1之间形成链路K-C-K+1的方法为:节点K通过对节点K+1发送PROP_START_ACK报文将节点C插入到正向路由,节点K+1向节点K发送PROP_START_ACK_REPLY报文将节点C插入到反向路由;至此C节点插入到节点K和K+1中间的过程结束,形成链路K-C-K+1;所述PROP_START_ACK报文和PROP_START_ACK_REPLY报文的格式一致,均包括:TYPE字段、RT_SRC字段、RT_SRC_SEQNO字段、RT_DST字段、RT_DST_SEQNO字段、RT_DST_PRE字段、RT_SRC_HOPS字段和RT_DST_HOPS字段;其中,TYPE字段记录报文类型;RT_SRC字段记录待修复路由的源节点地址;RT_SRC_SEQNO字段记录待修复路由的源节点的序列号;RT_DST字段记录待修复路由的目的节点地址;RT_DST_SEQNO字段记录待修复路由的目的节点的序列号;RT_DST_PRE字段记录用于在建立路由时填充路由的下两跳地址;RT_SRC_HOPS字段记录现有路由到达源节点的跳数;RT_DST_HOPS字段记录现有路由到达目的节点的跳数。进一步的,所述步骤(4-4)中,快速修复请求为RP_REQUEST报文,RP_REQUEST报文包括:TYPE字段、RQ_DST字段、RQ_PREHOP字段、RQ_REALDST_SEQNO字段、RQ_REAL_DST字段;其中,TYPE字段记录RP_REQUEST报文的报文类型;RQ_DST字段记录RP_REQUEST报文的目的地地址;RQ_PREHOP字段记录RP_REQUEST报文到达的当前节点的前一跳;RQ_REALDST_SEQNO字段记录RP_REQUEST报文所到达的当前节点知道的目的节点的最新序列号;RQ_REAL_DST字段记录节点K所在路由的目的节点地址;节点K+2向节点K回复的反馈报文为RP_REPLY报文,RP_REPLY报文包括:TYPE字段、RP_HOP_CN字段、RP_DST字段、RP_PREHOP字段、RP_REALDST_SEQNO字段、RP_REAL_DST字段;其中,TYPE字段记录RP_REPLY报文的报文类型;RP_HOP_CN字段记录RP_REPLY报文到达的当前节点距离路由目的节点的跳数;RP_DST字段记录节点K+2的地址;RP_PREHOP字段记录当前节点在路由中的后两跳节点的地址;RP_REALDST_SEQNO字段记录当前节点所知道的待修复路由的目的节点的序列号,RP_REALDST_SEQNO字段在每次回复时更新为RP_REQUEST中的RQ_REALDST_SEQNO字段;RP_REAL_DST字段记录待修复路由的目的节点地址。进一步的,在所述步骤(2)中的节点间信息维护阶段,各节点维护自己的邻居表的方法为:节点通过HELLO数据包定期交换信息;若节点接收到另一个节点发来的HELLO消息,则会检查邻居表中是否存在该邻居,若不存在则将其加入邻居表中;节点定期检查自己的邻居表,若在预设的时间段内没有接收到邻居表中的某个邻居节点发来的HELLO消息,则认为对应的链路断裂并将该邻居删除。进一步的,所述步骤(3)中路由建立的方法为:当某节点X想要发送数据时,先检查自己的路由表,如果没有到达目的节点的路由,则节点X会广播一个RREQ数据包;邻居节点Y接收到RREQ数据包,会首先检查先前是否已经接收到该广播,如果有,则直接丢弃RREQ数据包;如果没有,则会检查自己的路由表中是否包含到达RREQ数据包源节点的反向路由;如果邻居节点Y的路由表中不存在到达源节点的反向路由,则建立到达源节点的反向路由,该反向路由用于返回路由应答;然后节点Y检查路由表中是否包含到达RREQ数据包目的节点的路由,如果有则生成路由回复RREP,并按照先前建立的反向路由返回RREP;如果没有则继续转发,直到到达RREQ数据包的目的节点;RREP沿着反向路由转发,沿途的节点会将RREP中的序列号和跳数与自己的路由表比对,如果RREP中的序列号较大,或者是序列号相同但跳数较小,则将自己的路由表中的序列号替换为RREP中的序列号;当RREP到达源节点时,则建立正向路由,路由建立过程完毕。有益效果:本发明提出的技术方案使得链路在断裂之前便已经切换了路由,降低了链路断裂修复的过程中所带来的丢包和延时,使得数据能够稳定持续的传输。同时在链路断裂后首先采用了快速修复策略,由于该做法带来的网络开销很小,因此在对网络性能影响很小的情况下修复路由。而对于快速修复失败后的二次修复策略,能够尽量选择成功率较高的节点进行路由修复,同时带来的开销较小。因此本协议对多种网络拓扑故障提出了较为完善的解决方案,并能在对网络影响较小的情况下有效的修复路由,对应对复杂环境下的网络有较好的效果,达到了本发明的目的。附图说明图1是实施例中提前修复阶段链路断裂前的网络拓扑图;图2是实施例中提前修复阶段链路断裂时的网络拓扑图;图3是实施例中快速修复阶段链路断裂前的网络拓扑图;图4是实施例中快速修复阶段链路断裂时的网络拓扑图。具体实施方式本发明提出的路由协议包含四个部分:网络初始化、节点间信息维护、路由建立和路由维护。步骤A,网络初始化:步骤A-1,节点建立邻居表、路由表,为其申请内存空间。步骤A-2,初始化节点序列号,设定HELLO消息定时器,邻居缓存定时器、路由缓存定时器等相关定时器。步骤A-3,节点初始化HELLO数据包。步骤B,节点间信息维护:节点通过HELLO数据包定期交换信息,维护邻居表。若节点接收到节点发来的HELLO消息,则会检查邻居表中是否存在该邻居,若不存在则将其加入邻居表中。若长时间没有接收到邻居表中的某个邻居节点发来的HELLO消息,则认为链路断裂并将该邻居删除。步骤C,路由建立:当某节点想要发送数据时,如果没有到达目的节点的路由,则会广播一个路由请求分组称为RREQ包。邻居节点接收到该分组后,会首先检查先前是否已经接收到该广播,如果有,则直接丢弃,如果没有,则会检查路由表中是否包含到达源节点的反向路由,如果不存在则建立反向路由,该反向路由用于返回路由应答。然后检查路由表是否包含到达目的节点的路由,如果有则生成路由回复RREP,并按照先前建立的反向路由返回该回复。如果没有则继续转发,直到到达目的节点。路由回复消息沿着反向路由转发,沿途的节点会将回复消息中的序列号和跳数与现有路由表比对,其中序列号由RREQ和RREP消息维护,代表了路由的新旧程度,序列号越大则路由越新。如果回复消息中的序列号较大,或者是序列号相同但跳数较小,则更新路由。当路由回复消息到达源节点时,则建立正向路由,路由建立过程完毕。步骤D,路由维护:路由维护过程主要包括三个阶段:避免链路断裂的链路状态检测、小范围的快速修复、初次修复失败的二次修复。步骤D-1,避免链路断裂的链路状态检测。定义:链路连接质量,用于衡量链路连接是否稳定的变量。其值由节点通信的接收功率以及HELLO消息获得。步骤D-1-1,链路连接质量的更新。节点间的链路连接质量的更新方法分为两种。第一种是通过HELLO报文。邻居节点间往往会通过HELLO报文维持连通性,接受到HELLO报文的数量一定程度上能代表邻居间的联系是否频繁,链路是否正常工作。假设有两个节点X和Y,Y在某一时刻进入了X的通信范围,那么X和Y会接收到彼此广播的HELLO报文,此时X和Y会将对方加入邻居列表,并将其链路稳定度初始化为10,此后,每接收到一次HELLO报文就会将对应的链路稳定度加1。第二种是节点之间的链路稳定度会随着数据包的接收功率实时更新。如果Y节点接收到的X节点的连续三个数据包的接收功率呈现上升趋势,则说明X与Y的通信质量增强,那么Y会将X的链路连接质量加1,最大值是255。反之,如果接收功率呈现下降趋势,则表示链路质量正在下降,Y将X的链路连接质量减1,最小值是0。如果Y接收到的数据包的接收功率短时间内一直处于阈值以下,则表示链路很可能会不稳定,有断裂的可能性,Y将X的链路连接质量设为0。步骤D-1-2,不稳定路由的提前修复。当链路连接质量为0时发起路由维护。在活跃数据链路A---B中,下游节点B发现上游邻居节点A的链路连接质量为0时会向A发送PROP_START包,其中PROP_START包记录了B节点的邻居信息。A节点接收到PROP_START包后首先会选择出与B节点共有的邻居节点集合,然后在该集合中选择稳定度最大的节点C作为中间节点。随后A节点通过对B发送PROP_START_ACK消息将C节点插入到正向路由,B节点向A发送PROP_START_ACK_REPLY消息将C节点插入到反向路由。至此C节点插入到AB节点中间的过程结束并形成链路A-C-B。插入完成后由A节点发送HOPSINCREASE消息告知链路上下游变化情况。步骤D-2,小范围的快速修复;在链路提前修复失败时会在断路处的小范围内进行代价较小的快速修复,包括步骤:D-2-1,目的节点的选择。本路由协议在路由表中添加了记录下两跳的NEXT_TWOHOP项,并由控制报文进行维护。假设存在链路A--B--C,C节点即为A节点的下两跳节点。在进行路由修复时A节点将以下两跳节点C作为目的节点并发起路由修复请求。D-2-2,快速修复流程。本协议的改进之处是在很小的范围内选择出少量的节点参与新路由,替换断链,原路由的剩余节点依旧参与路由。在进行路由修复时,发起路由修复的节点将广播以NEXT_TWOHOP(下两跳节点)为目的地的RP_REQUEST报文,报文中的序列号由请求发起节点主动更新。这样做是因为修复成功后的链路往往会比先前的链路长,更新序列号会有效避免因链路长度边长导致的目的节点不接受链路的现象,从而提高链路修复成功率。当NEXT_TWOHOP节点接收到该报文时则会回复RP_REPLY报文,从而建立替换链并修复路由。步骤D-3:初次修复失败的二次修复。如果在初次修复阶段没有找到合适的替换节点,则会造成修复失败。在本协议中,由于第一次修复占用的时间较短,所带来的网络负担较小,因此加入二次修复是一种可行的方案。步骤D-3-1,二次修复节点的选取。一般情况下,节点分布较密集的区域,节点之间的链路可能会比较多,因此有更多的链路供节点选择,在进行路由修复时,也会有更多的几率修复成功。因此,可以将某节点邻居数量的多少作为是否可以进行修复的判据。由于初次修复很可能是因为该节点周围节点分布较稀疏,难以找到合适的节点作为替换节点,因此继续选择初次修复的节点往往不可取。初次修复不成功时会由初次修复节点向上游发送回溯消息。回溯的消息称为RECALL消息,RECALL消息到达每一个节点时,会检查当前节点所处的位置是否满足修复条件,修复条件有如下定义:设RECALL消息回溯至节点A,A节点距离源节点的跳数为hop1,距离目的节点的跳数为hop2,若2*hop1>hop2,则A节点会检查自身的邻居节点数量是否大于阈值。如果上述条件均满足,则会由A节点发起第二次路由修复,否则,回溯消息会沿着反向路由继续向上游节点转发,直至回溯到源节点或下一个满足条件的节点为止。步骤D-3-2,二次修复过程。在修复的目的地的选择上,由于先前针对下两跳的修复失败了,如果仍然选择初次修复的目的节点,那么失败的可能性比较大,因此,发起二次修复的节点会直接以原来路由的目的节点作为修复的目的地。选择出二次修复节点后,在二次修复节点的修复手段上,选用改进后的修复策略即发送RP_REQUEST包。这样做能够保证较高的修复成功率。因此二次修复的过程为,节点发送以待修复路由的目的节点为目的地的RP_REQUEST包,当目的节点或者有目的节点信息的节点接收到该请求包后回复RP_REPLY报文,从而建立替换链并修复路由。下面结合附图对本发明作更进一步的说明。(一)提前修复阶段:在图1所示的网络拓扑图中,数据流的方向是n0到n4,在协议的路由建立阶段由RREQ和RREP包建立起来的路由是n0---n1---n2---n4,n1是n2的邻居上游节点。RREQ和RREP包的结构如下所示。RREQ包的部分字段如下表所示:TYPERQ_HOP_CNRQ_SRCRQ_DST表中,各字段的含义为:TYPE:数据包类型RQ_HOP_CN:请求包所经过的节点的个数RQ_SRC:发起路由请求的节点地址RQ_DST:路由请求的目的节点地址RREP包的部分字段如下表所示:TYPERP_HOP_CNRP_SRCRP_DST表中,各字段的含义为:TYPE:数据包类型RP_HOP_CN:距离目的节点的跳数RP_SRC:路由回复的目的节点RP_DST:路由回复的源节点某一时刻,n2开始逐渐向其所在位置的右下方移动,直至移出n1的通信范围形成图2的网络拓扑。在n2移动的过程中会在某一时刻达到接收功率的阈值使得与n1的链路连接质量为0,或者是因为远离趋势使链路连接质量减为0。此时n2会启动路由提前修复流程避免链路断裂。当n2发现对n1的邻居链路连接质量变为0时,因为此时n1到n2的链路并未断裂,n1和n2之间仍然能够收发数据,n2会向n1发送PROP_START报文以启动路由提前修复过程。在发送PROP_START报文时,n2会首先筛选出链路连接质量不为0的邻居节点并填充PROP_START报文,然后向n1发送。当n1接收到来自n2的PROP_START报文时,会首先筛选出邻居列表中稳定度不为0的节点。然后n1将这些节点与报文共有的相对稳定性高的节点选出并插入到n1和n2之间。PROP_START报文的结构如下表所示:TYPENCDSTTR_SRCRT_DSTN1_IPN1_S…Nn_IPNn_S表中,各字段的含义为:TYPE:报文类型NC:相对稳定度不为0的邻居数量DST:PROP_START报文发送的目的地RT_SRC:待修复路由的源节点RT_DST:待修复路由的目的节点N1_IP:第一个邻居节点的IP地址N1_S:第一个邻居节点的相对稳定度Nn_IP:第n个邻居节点的IP地址Nn_S:第n个邻居节点的相对稳定度假设n1和n2的邻居节点列表如下:在上述邻居列表中,n2在给n1发送PROP_START报文时,已经将稳定度为0的邻居列表项过滤掉,因此,n1接收到的n2的邻居列表信息如下表所示为:PROP_START消息中的邻居列表经计算可知,n1筛选出的共有节点为n3。筛选出共有节点后,会将其插入n1---n2链路中。首先,n1向n2发送消息,称为PROP_START_ACK消息。PROP_START_ACK首先单播至n3。当n3接收到来自n1的PROP_START_ACK消息后,会首先建立到达n4的路由,并将n2作为路由的下一跳,然后将PROP_START_ACK消息转发给n2。当n2接收到PROP_START_ACK消息后,n2会产生一个PROP_START_ACK_REPLY消息,该消息格式与PROP_START_ACK的消息格式一致,其发送与接收的过程是PROP_START_ACK的逆过程,除了方向相反外,别无二致。由此可见,PROP_START_ACK是将n3节点插入到了正向路由中,PROP_START_ACK_REPLY则是将n3节点插入到了反向路由中。PROP_START_ACK和PROP_START_ACK_REPLY报文的结构如下表所示:TYPERT_SRCRT_SRC_SEQNORT_DSTRT_DST_SEQNORT_DST_PRERT_SRC_PRERT_SRC_HOPSRT_DST_HOPS表中各字段的含义为:TYPE:消息类型RT_SRC:待修复路由的源节点RT_SRC_SEQNO:待修复路由的源节点的序列号RT_DST:待修复路由的目的节点RT_DST_SEQNO:待修复路由的目的节点的序列号RT_DST_PRE:用于在建立路由时填充路由的下两跳地址,该地址在本地修复时会用到RT_SRC_PRE:作用同RT_DST_PRE。RT_SRC_HOPS:记录现有路由到达源节点的跳数RT_DST_HOPS:记录现有路由到达目的节点的跳数。当n1节点接收到了PROP_START_ACK_REPLY消息后,整个插入过程结束。但由此产生了一个问题:由于n3节点插入到了原先的链路中,使得原来链路的长度增加,必须尽快告知新的链路中的其他节点链路正常的消息。经过分析,无论是正向路由还是反向路由,链路增长影响到的是上游节点,因此,只需通知链路中正反向路由各自的上游节点即可。当n1接收到了PROP_START_ACK_REPLY后,将会对正向路由和反向路由的上游节点发出HOPSINCREASE消息。HOPSINCREASE的消息格式如下表所示:TYPERT_DSTRT_SRCPRE_HOPN_HOPS表中,各字段的含义为:TYPE:消息类型RT_DST:待修复路由的目的节点RT_SRC:待修复路由的源节点PRE_HOP:用于维护路由表中的下两跳N_HOPS:接收到该消息的节点距离目的节点的跳数。对于n1,n0---n1---n3---n2---n4为其正向路由,因此,节点插入影响到的是n0---n1链路,所以n1向n0发出HOPSINCREASE。HOPSINCREASE消息向上游节点转发,沿途经过的各个节点都会将现有的路由表与HOPSINCREASE消息进行对比,若HOPSINCREASE消息中路由跳数较大更新为该跳数。同理,n1也会向n4发出HOPSINCREASE消息用于更新n4---n0的反向路由。至此为止,在不稳定的链路断裂之前,便将原来的路由替换成了相对可靠的路由,避免了路由的断裂。(二)快速修复阶段:若提前修复未成功,则进入快速修复阶段。在快速修复阶段,为了实现该修复算法,首先定义路由表如下表所示:RT_DSTRT_SEQNORT_HOPSRT_LAST_HOP_CNRT_NEXTHOPRT_NEXTTWOHOPRT_MODELRT_PCLISTRT_EXPIRERT_FLAGS路由表中各字段的含义为:RT_DST:路由的目的地RT_SEQNO:路由的序列号RT_HOPS:路由的跳数RT_NEXTHOP:路由的下一跳RT_NEXTTWOHOP:路由的下两跳(新增)RT_EXPIRE:路由的超时时间RT_FLAGS:路由的状态。图3所示的网络拓扑图中,初始路由为n0---n1---n2---n3---n4,某一时刻n1---n2链路发生断裂。当n1发现链路发生了断裂时,n1会产生一个RP_REQUEST包将RQ_DST填充为NEXT_TWOHOP项的值即n3,将REAL_DST填充为待修复路由的目的节点即n4,RQ_PREHOP填充为当前节点的前一跳节点。由于目的节点是n3节点,在原路由中是其下下跳,相距2跳,为了提高修复的几率,将RP_REQUEST的广播跳数设置为3跳。RP_REQUEST报文的格式如下表所示:TYPERQ_HOP_CNRQ_DSTRQ_PREHOPRQ_REALDST_SEQNORQ_REAL_DST表中,各字段的含义为:TYPE:数据包类型RQ_DST:RP_REQUEST包的目的地RQ_PREHOP:RP_REQUEST包中记录的当前节点的前一跳,用于更新路由表中的后两跳RQ_REALDST_SEQNO:记录的是当前节点所知道的目的节点的最新序列号。RQ_REAL_DST:RP_REQUEST中记录的该节点所处的路由的目的节点。RP_REPLY报文的格式如下表所示:TYPERP_HOP_CNRP_DSTRP_PREHOPRP_REALDST_SEQNORP_REAL_DST表中,各字段的含义为:TYPE:数据包类型RP_HOP_CN:记录到达路由目的地的跳数,会随着数据包到达的节点实时更新RP_DST:记录RP_REQUEST包所到达的目的节点RQ_DST,在发送回复时初始化为当前节点RP_PREHOP:用于更新新路由中的后两跳地址RP_REALDST_SEQNO:当前节点所知道的待修复路由的目的节点的序列号,在回复时更新为RP_REQUEST中的RQ_REALDST_SEQNORP_REAL_DST:记录待修复路由的目的节点。本协议在发送RP_REQUEST包的时候,n1会将其所拥有的n4的序列号加1,然后将其广播出去,过程与RREQ的广播过程大致相同。当n3接收到RP_REQUEST包时,会检查RP_REQUEST包中RQ_DST_SEQNO字段,如果RQ_DST_SEQNO比现有序列号大,则更新。当n3节点接收到该请求包时会发送回复信息RP_REPLYRP_REPLY包按照传播RP_REQUEST包建立起的反向路由回到n1节点,由于RP_REPLY包中的待修复路由的目的节点序列号比现有路由的大,因此会更新路由,新的路由为n0---n1---n5---n6---n3---n4,路由修复成功。由于在修复的过程中设定的广播范围为3跳,因此最终寻得的路由可能会比原来的路由长,因此必须告知上游节点路由长度的变化。在这里采取的是发送HOPSINCREASE消息的方法来通知上游节点跳数的变化,由此保持前后跳数一致。(三)二次修复阶段图4所示的网络拓扑图中,初始路由为n0---n1---n2---n3---n4---n5---n6---n7---n8,在某一时刻,n5和n6之间的链路发生了断裂,按照快速修复算法进行第一次修复是失败的,因此,n5节点会向上游节点发出RECALL消息。RECALL消息到达每一个节点时,会检查当前节点所处的位置是否满足修复条件,即2*hop1>hop2,除此之外还要检查自身的邻居节点数量是否大于阈值。假设阈值为3,即有三个邻居节点。如果上述条件均满足,则会发起第二次修复,否则,回溯消息会沿着反向路由继续向上游节点转发,直至回溯到源节点或下一个满足条件的节点为止。当来自n5节点的RECALL消息到达n4节点时,n4满足二次修复条件,因此n4节点会进行第二次修复。RECALL消息结构定义如下表所示:TYPEDSTREAL_DSTNEXT_TWO_HOPHOPS表中,各字段的含义为:TYPE:数据包类型DST:RECALL消息发送的目的节点,一般是待修复路由的源节点REAL_DST:待修复路由的目的节点NEXT_TWO_HOP:初次修复时的目的节点,用作二次修复的目的节点HOPS:RECALL消息所处的节点距离REAL_DST的跳数。在二次修复节点的修复手段上,是选用改进后的修复策略即发送RP_REQUEST包。改进后的策略适当放宽了选择的标准,成功的可能性比较高。在各种资源比较紧张的无线Mesh网络中,快速而有效的路由修复策略往往比较可取,因此选择与初次修复相同的策略。在修复的目的地的选择上,由于先前针对下两跳的修复失败了,如果仍然选择初次修复的目的节点,那么失败的可能性比较大,因此,二次修复选择的是待修复路由的目的节点作为目的节点,图中二次修复的目的节点为n8。在请求的跳数设定上,通过字段HOPS记录此时距离待修复路由的目的节点的距离,在发出请求包时,直接用该值或者比该值稍大一点的值作为请求包的跳数。例如,在图中n4节点在发起二次修复请求时,会将请求包的跳数设为4+2跳,其中4是n4节点距离n8的跳数,2是为了保证修复的成功率添加的额外的跳数。n4发出请求包后的流程与初次修复完全相同。如果二次修复失败,在失败后的应对方案同样分为两种,由源节点修复和由中间节点修复。由于前两次修复皆失败,如果继续选择由中间节点修复,仍可能会失败,且多次修复同样会造成时间和开销的问题,并且由于二次修复时的回溯机制,使得此时节点更加靠近源节点,因此,在第二次路由修复失败后将由当前节点通知源节点进行路由修复。以上所述仅是本发明的优选实施方式,应当指出:对于本
技术领域
的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1