一种无线多跳网络拓扑发现方法转让专利

申请号 : CN201811193510.X

文献号 : CN109309944B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 赵瑞琴刘媛申晓红

申请人 : 西北工业大学

摘要 :

本发明提供了一种无线多跳网络拓扑发现方法,全网络节点在自主分配节点ID的同时,能够以低的时延和开销完成拓扑发现,每个节点获得其自身ID和网络中的所有相关链路信息。本发明自主分配节点ID的拓扑发现方法解决了网络拓扑发现过程,存在的布放之前要确定好节点ID的问题,有效避免了获取完整拓扑信息开销大的问题,该方法能够在网络随机布放后快速完成网络的建立,为网络后续正常工作提供基础,方法简单有效,操作实施简单,具有可实施性,该方法具有较低的开销和能耗,有利于延长整个网络的生存期。

权利要求 :

1.一种无线多跳网络拓扑发现方法,其特征在于包括下述步骤:

步骤1:G=(V,L)为待发现网络,G是一个无线多跳网络,其中V表示该网络中的所有节点集合,L表示网络中所有链路的集合,采用树形多跳网络拓扑结构来完成未知网络的拓扑发现和ID分配;

在树形多跳网络拓扑结构中,指定节点T为根节点,第一跳节点中的节点a对第二跳节点中的节点d发包,节点a指向节点d的有序节点对(a,d)表示节点d为节点a为邻节点,且a是d的父节点,d为a的子节点;节点d的子节点以及与节点d相连通的向下延伸到网络边缘的所有节点称为节点a的子孙节点,没有子节点的节点称为叶子节点;

网络中除了根节点,所有节点有唯一的父节点,根据树形多跳网络拓扑结构,所有节点分层为根节点、第1层节点、第2层节点,…第n层节点,网络中共有发现的节点数目为N,Ni为节点i的子孙节点的数目,Nei为节点i的邻居节点数目,Ci为节点i的子节点的数目;i=1,

2....N;

步骤2:拓扑发现流程包括如下三个阶段并依次执行:

1)、hello包传输阶段:hello包格式为,其中,Type包类型为:hello、disc、IDA,Ki为随机产生的Ki值,Ki∈[0,...,64],Fi为父亲节点的Ki值,Li为节点i的层次编号即节点i在网络中所属的跳数;

2)、disc包传输阶段:disc包格式为,其中,Ni为子孙节点的个数;

3)、IDA包传输阶段:IDA包格式为,其中,IDi为节点ID;

具体步骤如下:

步骤2.1、根节点T,令Ki=0,Fi=0,Li=0,生成hello包,发送hello包,并依据Ki,将Ki除以100得出的数值作为计时器Tx_Timer的值,计时器Tx_Timer超时后发送hello包,之后根节点依据式(1)和公式(2)开启计时器Wait_Timerx:Wait_Timerleaf=2×(Tp+Tc+Tx_Timermax)            (1)其中Tp,Tc分别为最大单跳传播时延和传输时延,Tx_Timermax为网络中Tx_Timer的最大值;

若节点i不为叶子节点,则x=Li,那么 为节点i的计时器;若节点i为叶子结点,则x=leaf,那么Wait_Timerleaf为节点i的计时器;网络拓扑发现过程开始;

步骤2.2、网络中第1跳节点i收到来自根节点的hello包后,将父节点的层次号加1作为其层次编号Li,生成节点i的hello包;依据Ki,将Ki除以100得出的数值作为计时器Tx_Timer的值,开启计时器Tx_Timer,计时器超时后发送hello包,之后,节点i如步骤2.1中所述依据式(1)和式(2)开启Wait_Timerx;

步骤2.3、网络中第2,3......n跳节点依次执行步骤2.2的操作完成hello包的发送,从根节点出发到网络的叶子节点,依此类推直至全网节点完成hello包的发送;若一个节点在发送hello包之前收到来自多个节点的hello包,将最先到达的hello包的发送节点作为其父节点,将其它节点作为其邻节点;网络中节点i发送hello包后开启Wait_Timerx,在收到的hello包中统计父节点等于Ki的不同K值的个数,得到节点i的子节点个数Ci,将子节点的Ki加入到子节点列表,并将同层次不互为父子且相连通的节点K值添加到邻节点列表{Kj};

步骤2.4、若节点i的Ci=0,则判断该i节点为叶子节点,然后按照网络发现数据包格式生成disc包,Tx_Timer超时后发送给父节点,报告i节点的disc包中的信息;对于任意非叶子节点i,若计时器Wait_Timerx超过式(2)计算的计时器的时间值,收到其所有子节点的disc包,则计算其子孙节点的数目Ni,Ni为通过i节点收到的来自子节点的disc包中Ni的总和加上i节点的Ci,并生成disc包,Tx_Timer超时后发送给父节点;已经在hello包传输阶段中得到了每个节点的子节点总数,若Wait_Timerx超时后,节点i收到其部分子节点的disc包,则根据网络发现数据格式形成disc_req包,并发送一次disc_req包给节点i未接收到的节点,请求未发送disc包的节点重新发包,如果在2(Tc+TP+Tx_Timermax)时间内其仍未接收到未发送disc包节点的disc包将未发送disc包的节点当作节点i的叶子节点,再计算节点id的子孙节点的数目Ni,生成disc包待Tx_Timer超时后发送给父节点;

步骤2.5、待根节点收到其所有子节点的disc包,根节点获知全网节点数,即其子孙节点的数目;根节点根据网络发现数据格式生成IDA包,并发送给其所有子节点;

步骤2.6、收到IDA包的任意一个非根节点i,检查节点i的Ki值是否包含在LIST中,若是则依据式(3)和式(4)完成ID计算,然后生成节点i的IDA包,依据Ki值开启计时器Tx_Timer,计时器到时后发送该IDA包;

节点i按照式(3)和式(4)计算自身节点ID:

同一跳节点中,K值的顺序;(3)

其中IDf为节点i的父节点ID, 为K值顺序为j的节点i的子孙节点个数;

步骤2.7、最终网络中每个节点获得唯一最短的ID、所有邻居节点信息以及网络的数形拓扑信息;

步骤3:当有新节点要加入通过步骤1和步骤2形成的网络时,执行以下步骤;

步骤3.1:新加入节点随机产生Ka值,新加入节点的父节点IDfa=0,新加入节点的层次号La=0,生成helloadd包,helloadd包格式为,发送helloadd包,并开启计时器Wait_Timerx;

步骤3.2:网络中新节点的邻居回复helloadd包,新加入节点的邻居节点将新加入节点的Kj和Nj添加到他们disc包的LIST中,邻居节点一级一级的把信息报告给根节点;

步骤3.3:根节点逐级发送IDAadd包给新加入节点确定其父节点ID,IDAadd包格式为,并根据式(5)分配ID给新加入节点,Δ为新加入节点的Ka值的排序:IDadd=maxID+Δ                 (5)

步骤4:对于网络拓扑发现阶段,采用时延和开销两个指标考察性能,令网络中第n层次的总节点个数为Nn,hello包、disc包和IDA包的比特数分别为bithello、bitdisc和bitIDA;令L为单跳最大距离,Wait_Timerleaf为叶子节点的计时器,Tx_Timermax为最大的Tx_Timer,n为网络的最大层次数,Nleaf为叶子节点个数;

拓扑发现时延的计算步骤如下:

拓扑发现的目标是网络的根节点获得所有叶子节点到中心节点的有序传输路径,获得网络拓扑结构,网络中普通节点获得唯一最短的ID、邻节点信息和自身所在的一条从中心节点到叶子节点的逻辑链路;

1)第一部分,从根节点逐跳发送hello包直到最后一跳节点发送完毕,此过程需要时延:T1=(Tp+Tc+Tx_Timermax)×(n+1)          (6)

2)第二部分,从叶子节点逐跳发送disc包直到根节点收到来自第二跳节点的disc包,该过程共需要时延:T2=n×(Tc+Tx_Timer+Tp)         (7)

3)第三部分,从根节点逐跳发送IDA包直到叶子节点收到来自上一跳节点的IDA包,需要时延:T3(Tx_Timermax+Tp+Tc)×(n+1)      (8)

完成节点ID分配和拓扑发现过程总共需要时延为

Ttotal=T1+T2+T3                   (9)

拓扑发现开销的计算:

1)第一部分,从根节点逐跳发送hello包直到最后一跳节点接收到来自父节点的hello包,此过程需要开销:

2)第二部分,从叶子节点逐跳发送disc包直到根节点收到来自第二跳节点的disc包,该过程共需要开销:

3)第三部分,从根节点逐跳发送IDA包直到叶子节点收到来自上一跳节点的IDA包,需要开销:bit3=(N-Nleaf)×bitIDA                    (12)完成节点ID分配和拓扑发现过程需要的平均开销为:

communication traffic=(bit1+bit2+bit3)÷N            (13)通过步骤1,步骤2,步骤3完成了网络拓扑的发现过程,通过本步骤计算完成发现过程需要的时延和开销,得到完整网络的拓扑发现,达到网络中每个节点获得全网统一的拓扑结构,也就是节点间彼此连通状态的目的。

说明书 :

一种无线多跳网络拓扑发现方法

技术领域

[0001] 本发明涉及无线网络技术领域,尤其是一种网络拓扑发现方法,适合于各种无线多跳网络系统。

背景技术

[0002] 网络拓扑发现是无线多跳网络的支撑技术之一。网络拓扑发现是网络管理的先决条件,是网络管理中性能管理、故障管理等的基础和核心,正确而完整的拓扑图对网络路由也有极大的帮助作用。特别是在无线网络中,网络内的节点在网络部署的初始阶段,对周围相邻节点的信息毫无所知,此时网络处于无结构状态,如果没有适合的拓扑发现协议以获得正确和完整拓扑的话,整个网络管理系统的运行都将受到影响。在这种情况下,网络无法进行信息采集与处理,因此需要进行网络拓扑发现过程,形成最初的网络结构,使得网络MAC(Media Access Control媒体访问控制)层协议能在初始结构下很快搭建,从而网络能够运行。有效的网络拓扑发现方法有利于形成良好的最初网络拓扑结构,不仅能够提高路由协议和MAC层协议的效率,为数据融合、时间同步和目标定位等任务的实现提供网络基础,而且可以延长整个网络的使用时间,对网络运行有至关重要的作用。无线网络中的拓扑发现算法可分为两类:基于数据报文的反馈树和基于移动代理的网络拓扑发现。
[0003] 基于数据报文的反馈树的网络拓扑发现,Ranveer Chandm等提出一种自适应的拓扑发现算法,该算法在拓扑请求阶段,预先设定的特定节点通过广播报文发起拓扑发现;在拓扑信息收集阶段.通过拓扑请求阶段建立起来的一个树结构进行拓扑信息收集,拓扑信息收集由叶子节点发起,中间节点等待自己所有的子节点传送拓扑信息给自己后,再向它的父节点传送综合后的拓扑信息。这种基于数据报文的反馈树的无线网络拓扑发现算法很大的一个问题就是拓扑请求阶段和拓扑信息收集阶段的开销控制,一旦有新节点的加入,该算法完成拓扑发现的开销比较大。
[0004] 基于移动代理的网络拓扑发现,该方法通过一个或多个移动代理在全网中不断地进行漫游,移动代理在各节点主要完成两个内容:收集本地节点的拓扑信息和将其他节点获得的拓扑信息告知本地节点,这样通过一定的漫游策略,获知全网拓扑结构。如果采用单代理系统,当传输范围较小时,会出现一群节点失连或者代理失效的情况;如果采用多代理系统,会面临代理排队和拥塞等问题。
[0005] 就目前收集到的资料来看,成熟的拓扑发现技术多集中在有线网络领域,而在无线网络拓扑发现技术方面的研究尚不成熟。由于无线网络的一些特点,使得有线网络中的拓扑发现技术不能直接地应用于无线。为此,设计出一种能够自主分配节点ID,开销较小,复杂度低的无线多跳网络拓扑发现方法仍是研究的热点之一。

发明内容

[0006] 为了克服现有技术的不足,本发明提供一种无线多跳网络拓扑发现方法。考虑到无线多跳网络拓扑发现阶段的开销限制,为了克服现有方法中网络拓扑发现算法中节点ID需要在布放之前就已知和节点间报文传输开销大的问题,有效降低拓扑发现过程中的开销,提出一种高效的自主分配节点ID的无线多跳网络的拓扑发现方法。该发明使全网络节点在自主分配节点ID的同时,能够以低的时延和开销完成拓扑发现,每个节点获得其自身ID和网络中的所有相关链路信息。
[0007] 本发明解决其技术问题所采用的技术方案的步骤如下:
[0008] 步骤1:G=(V,L)为待发现网络,G是一个无线多跳网络,其中V表示该网络中的所有节点集合,L表示网络中所有链路的集合,本发明采用树形拓扑结构来完成未知网络的拓扑发现和ID分配;
[0009] 在树形拓扑结构中,指定节点T为根节点,第一跳节点中的节点a对第二跳节点中的节点d发包,节点a指向节点d的有序节点对(a,d)表示节点d为节点a为邻节点,且a是d的父节点,d为a的子节点;节点d的子节点以及与节点d相连通的向下延伸到网络边缘的所有节点称为节点a的子孙节点。没有子节点的节点称为叶子节点;
[0010] 网络中除了根节点,所有节点有唯一的父节点,根据目前现有的树形多跳网络拓扑结构,所有节点分层为根节点、第1层节点、第2层节点,…第n层节点。网络中共有发现的节点数目为N,Ni为节点i的子孙节点的数目,Nei为节点i的邻居节点数目,Ci为节点i的子节点的数目;i=1,2....N;
[0011] 步骤2:拓扑发现流程包括如下三个阶段并依次执行:
[0012] 1)、hello包传输阶段:hello包格式为,其中,Type包类型为:hello、disc、IDA,Ki为随机产生的Ki值,Ki∈[0,...,64],Fi为父亲节点的Ki值,Li为节点i的层次编号即节点i在网络中所属的跳数;
[0013] 2)、disc包传输阶段:disc包格式为,其中,Ni为子孙节点的个数。
[0014] 3)、IDA包传输阶段:IDA包格式为,其中,IDi为节点ID;
[0015] 具体步骤如下:
[0016] 步骤2.1、根节点T,令Ki=0,Fi=0,Li=0,生成hello包,发送hello包,并依据Ki,将Ki除以100得出的数值作为计时器Tx_Timer的值,计时器Tx_Timer超时后发送hello包,之后根节点依据式(1)和公式(2)开启计时器Wait_Timerx:
[0017] Wait_Timerleaf=2×(Tp+Tc+Tx_Timermax)   (1)
[0018]
[0019] 其中Tp,Tc分别为最大单跳传播时延和传输时延,Tx_Timermax为网络中Tx_Timer的最大值;
[0020] 若节点i不为叶子节点,则x=Li,那么 为节点i的计时器;若节点i为叶子结点,则x=leaf,那么Wait_Timerleaf为节点i的计时器;网络拓扑发现过程开始;
[0021] 步骤2.2、网络中第1跳节点i收到来自根节点的hello包后,将父节点的层次号加1作为其层次编号Li,生成节点i的hello包;依据Ki,将Ki除以100得出的数值作为计时器Tx_Timer的值,开启计时器Tx_Timer,计时器超时后发送hello包,之后,节点i如步骤2.1中所述依据式(1)和式(2)开启Wait_Timerx;
[0022] 步骤2.3、网络中第2,3......n跳节点依次执行步骤2.2的操作完成hello包的发送,从根节点出发到网络的叶子节点,依此类推直至全网节点完成hello包的发送;若一个节点在发送hello包之前收到来自多个节点的hello包,将最先到达的hello包的发送节点作为其父节点,将其它节点作为其邻节点;网络中节点i发送hello包后开启Wait_Timerx,在收到的hello包中统计父节点等于Ki的不同K值的个数,得到节点i的子节点个数Ci,将子节点的Ki加入到子节点列表,并将同层次不互为父子且相连通的节点K值添加到邻节点列表{Kj};
[0023] 步骤2.4、若节点i的Ci=0,则判断该i节点为叶子节点,然后按照网络发现数据包格式生成disc包,Tx_Timer超时后发送给父节点,报告i节点的disc包中的信息;对于任意非叶子节点i,若Wait_Timerx超时后也就是等于式(2)的值,收到其所有子节点的disc包,则计算其子孙节点的数目Ni,Ni为通过i节点收到的来自子节点的disc包中Ni的总和加上i节点的Ci,并生成disc包,Tx_Timer超时后发送给父节点;已经在hello包传输阶段中得到了每个节点的子节点总数,若Wait_Timerx超时后,节点i收到其部分子节点的disc包,则根据网络发现数据格式形成disc_req包,并发送一次disc_req包给节点i未接收到的节点,请求未发送disc包的节点重新发包,如果在2(Tc+TP+Tx_Timermax)时间内其仍未接收到未发送disc包节点的disc包将未发送disc包的节点当作节点i的叶子节点,再计算节点id的子孙节点的数目Ni,生成disc包待Tx_Timer超时后发送给父节点;
[0024] 步骤2.5、待根节点收到其所有子节点的disc包,根节点获知全网节点数,即其子孙节点的数目;根节点根据网络发现数据格式生成IDA包,并发送给其所有子节点;
[0025] 步骤2.6、收到IDA包的任意一个非根节点i,检查节点i的Ki值是否包含在LIST中,若是则依据式(3)和式(4)完成ID计算,然后生成节点i的IDA包,依据Ki值开启计时器Tx_Timer,计时器到时后发送该IDA包;
[0026] 节点i按照式(3)和式(4)计算自身节点ID:
[0027] 同一跳节点中,K值的顺序;   (3)
[0028]
[0029] 其中IDf为节点i的父节点ID, 为K值顺序为j的节点i的子孙节点个数;
[0030] 步骤2.7、最终网络中每个节点获得唯一最短的ID、所有邻居节点信息以及网络的数形拓扑信息;
[0031] 步骤3:当有新节点要加入通过步骤1和步骤2形成的网络时,执行以下步骤;
[0032] 步骤3.1:新加入节点随机产生Ka值,新加入节点的父节点IDfa=0,新加入节点的层次号La=0,生成helloadd包,helloadd包格式为,发送helloadd包,并开启计时器Wait_Timerx;
[0033] 步骤3.2:网络中新节点的邻居回复helloadd包,新加入节点的邻居节点将新加入节点的Kj和Nj添加到他们disc包的LIST中,邻居节点一级一级的把信息报告给根节点。
[0034] 步骤3.3:根节点逐级发送IDAadd包给新加入节点确定其父节点ID,IDAadd包格式为,并根据式(5)分配ID给新加入节点,Δ为新加入节点的Ka值的排序:
[0035] IDadd=maxID+Δ   (5)
[0036] 步骤4:对于网络拓扑发现阶段,本发明采用时延和开销两个指标考察性能,令网络中第n层次的总节点个数为Nn,hello包、disc包和IDA包的比特数分别为bithello、bitdisc和bitIDA。我们令L为单跳最大距离,Wait_Timerleaf为叶子节点的计时器,Tx_Timermax为最大的Tx_Timer,n为网络的最大层次数,Nleaf为叶子节点个数;
[0037] 拓扑发现时延的计算步骤如下:
[0038] 拓扑发现的目标是网络的根节点获得所有叶子节点到中心节点的有序传输路径,获得网络拓扑结构。网络中普通节点获得唯一最短的ID、邻节点信息和自身所在的一条从中心节点到叶子节点的逻辑链路;
[0039] 1)第一部分,从根节点逐跳发送hello包直到最后一跳节点发送完毕,此过程需要时延:
[0040] T1=(Tp+Tc+Tx_Timermax)×(n+1)   (6)
[0041] 2)第二部分,从叶子节点逐跳发送disc包直到根节点收到来自第二跳节点的disc包,该过程共需要时延:
[0042] T2=n×(Tc+Tx_Timer+Tp)   (7)
[0043] 3)第三部分,从根节点逐跳发送IDA包直到叶子节点收到来自上一跳节点的IDA包,需要时延:
[0044] T3=(Tx_Timermax+Tp+Tc)×(n+1)   (8)
[0045] 完成节点ID分配和拓扑发现过程总共需要时延为
[0046] Ttotal=T1+T2+T3   (9)
[0047] 拓扑发现开销的计算:
[0048] 1)第一部分,从根节点逐跳发送hello包直到最后一跳节点接收到来自父节点的hello包,此过程需要开销:
[0049]
[0050] 2)第二部分,从叶子节点逐跳发送disc包直到根节点收到来自第二跳节点的disc包,该过程共需要开销:
[0051]
[0052] 3)第三部分,从根节点逐跳发送IDA包直到叶子节点收到来自上一跳节点的IDA包。需要开销:
[0053] bit3=(N-Nleaf)×bitIDA   (12)
[0054] 完成节点ID分配和拓扑发现过程需要的平均开销为:
[0055] communication traffic=(bit1+bit2+bit3)÷N   (13)
[0056] 通过步骤1,步骤2,步骤3完成了网络拓扑的发现过程,通过本步骤计算完成发现过程需要的时延和开销,得到本发明完成网络的拓扑发现,达到网络中每个节点获得全网统一的拓扑结构,也就是节点间彼此连通状态的目的。
[0057] 本发明的有益效果在于:
[0058] 1、自主分配节点ID的拓扑发现方法解决了网络拓扑发现过程中存在的布放之前要确定好节点ID的问题。
[0059] 2、该方法有效避免了获取完整拓扑信息开销大的问题。
[0060] 3、该方法能够在网络随机布放后快速完成网络的建立,为网络后续正常工作提供基础。
[0061] 4、方法简单有效,操作实施简单,具有可实施性。
[0062] 5、该方法具有较低的开销和能耗,有利于延长整个网络的生存期。

附图说明

[0063] 图1是本发明树形拓扑结构示意图。
[0064] 图2是本发明的两跳十节点网络拓扑发现过程的具体实施示意图。
[0065] 图3是本发明的网络拓扑发现数据包格式。
[0066] 图4是本发明节点自主分配节点ID的示意图。
[0067] 图5是本发明节点ID分配结果示意图。
[0068] 图6是未进行拓扑发现的节点分布示意图。
[0069] 图7是使用本发明方法后的拓扑发现结果示意图。

具体实施方式

[0070] 下面结合附图和实施例对本发明进一步说明。
[0071] 以两跳十节点的网络为例,给出相应拓扑发现方案如图二所示。
[0072] 步骤1:G=(V,L)为待发现网络,G是一个无线多跳网络,其中V表示该网络中的所有节点集合,L表示网络中所有链路的集合,本发明采用树形拓扑结构来完成未知网络的拓扑发现和ID分配;
[0073] 在树形拓扑结构中,如图1所示,指定节点T为根节点,第一跳节点中的节点a对第二跳节点中的节点d发包,节点a指向节点d的有序节点对(a,d)表示节点d为节点a为邻节点,且a是d的父节点,d为a的子节点;节点d的子节点以及与节点d相连通的向下延伸到网络边缘的所有节点称为节点a的子孙节点。没有子节点的节点称为叶子节点。
[0074] 为了高效地完成基于树形结构的拓扑发现与ID分配,网络中除了根节点,所有节点有唯一的父节点。根据目前现有的树形多跳网络拓扑结构,所有节点分层为根节点、第1层节点、第2层节点,…第n层节点。网络中共有发现的节点数目为N,Ni为节点i的子孙节点的数目,Nei为节点i的邻居节点数目,Ci为节点i的子节点的数目;i=1,2....N;
[0075] 步骤2:拓扑发现流程如图2所示,主要包括如下三个阶段并依次执行:
[0076] 1)、如图3所示,hello包传输阶段:hello包格式为,其中,Type包类型为:hello、disc、IDA,Ki为随机产生的Ki值,Ki∈[0,...,64],Fi为父亲节点的Ki值,Li为节点i的层次编号即节点i在网络中所属的跳数;
[0077] 2)、如图3所示,disc包传输阶段:disc包格式为,其中,Ni为子孙节点的个数。
[0078] 3)、如图3所示,IDA包传输阶段:IDA包格式为,其中,IDi为节点ID;
[0079] 具体步骤如下:
[0080] 步骤2.1、根节点T,令Ki=0,Fi=0,Li=0,按照图3所示包格式生成hello包,发送hello包,并依据Ki,将Ki除以100得出的数值作为计时器Tx_Timer的值,计时器Tx_Timer超时后发送hello包,之后根节点依据式(1)和公式(2)开启计时器Wait_Timerx,
[0081] Wait_Timerleaf=2×(Tp+Tc+Tx_Timermax)   (1)
[0082]
[0083] 其中Tp,Tc分别为最大单跳传播时延和传输时延,Tx_Timermax为网络中Tx_Timer的最大值;
[0084] 若节点i不为叶子节点,则x=Li,那么 为节点i的计时器;若节点i为叶子结点,则x=leaf,那么Wait_Timerleaf为节点i的计时器;网络拓扑发现过程开始;
[0085] 步骤2.2、网络中第1跳节点i收到来自根节点的hello包后,将父节点的层次号加1作为其层次编号Li,生成节点i的hello包;依据Ki,将Ki除以100得出的数值作为计时器Tx_Timer的值,开启计时器Tx_Timer,计时器超时后发送hello包,之后,节点i如步骤2.1中所述依据式(1)和式(2)开启Wait_Timerx;
[0086] 步骤2.3、网络中第2,3......n跳节点依次执行步骤2.2的操作完成hello包的发送,从根节点出发到网络的叶子节点,依此类推直至全网节点完成hello包的发送;若一个节点在发送hello包之前收到来自多个节点的hello包,将最先到达的hello包的发送节点作为其父节点,将其它节点作为其邻节点;网络中节点i发送hello包后开启Wait_Timerx,在收到的hello包中统计父节点等于Ki的不同K值的个数,得到节点i的子节点个数Ci,将子节点的Ki加入到子节点列表,并将同层次不互为父子且相连通的节点K值添加到邻节点列表{Kj};
[0087] 步骤2.4、若节点i的Ci=0,则判断该i节点为叶子节点,然后按照网络发现数据包格式生成disc包,Tx_Timer超时后发送给父节点,报告i节点的disc包中的信息;对于任意非叶子节点i,若Wait_Timer x超时后也就是等于式(2)的值,收到其所有子节点的disc包,则计算其子孙节点的数目Ni,Ni为通过i节点收到的来自子节点的disc包中Ni的总和加上i节点的Ci,并生成disc包,Tx_Timer超时后发送给父节点;已经在hello包传输阶段中得到了每个节点的子节点总数,若Wait_Timerx超时后,节点i收到其部分子节点的disc包,则根据网络发现数据格式形成disc_req包,并发送一次disc_req包给节点i未接收到的节点,请求未发送disc包的节点重新发包,如果在2(Tc+TP+Tx_Timermax)时间内其仍未接收到未发送disc包节点的disc包将未发送disc包的节点当作节点i的叶子节点,再计算节点id的子孙节点的数目Ni,生成disc包待Tx_Timer超时后发送给父节点;
[0088] 步骤2.5、待根节点收到其所有子节点的disc包,根节点获知全网节点数,即其子孙节点的数目;根节点根据网络发现数据格式生成IDA包,并发送给其所有子节点;
[0089] 步骤2.6、收到IDA包的任意一个非根节点i,检查节点i的Ki值是否包含在LIST中,若是则依据式(3)和式(4)完成ID计算,然后生成节点i的IDA包,依据Ki值开启计时器Tx_Timer,计时器到时后发送该IDA包;
[0090] 节点i按照式(3)和式(4)计算自身节点ID:
[0091] 同一跳节点中,K值的顺序;   (3)
[0092]
[0093] 其中IDf为节点i的父节点ID, 为K值顺序为j的节点i的子孙节点个数。以节点数为10的网络为例,如图4所示,根节点T的ID=0,根节点T的子节点a,b,c的Li,Ki和Ci分别为(1,21,2),(1,12,2),(1,1,2),三个节点Ki值排序为j即节点c的j=1,节点b的j=2,节点a的j=3。IDc=0+0+1=1,IDb=2+0+2=4,IDa=2+2+3=7;叶子节点f,g,e,m,d,n的Li,Ki和Ci分别为(2,3,0),(2,31,0),(2,15,0),(2,5,0),(2,9,0),(2,7,0),六个节点Ki值排序为j即节点f的j=1,节点m的j=2,节点h的j=3,节点d的j=4,节点e的j=5,节点g的j=6。IDf=0+4+1=5,IDm=0+1+1=2,IDh=0+7+1=8,IDd=0+7+2=9,IDe=0+1+2=3,IDg=0+4+2=6。
[0094] 步骤2.7、最终网络中每个节点获得唯一最短的ID、所有邻居节点信息以及网络的数形拓扑信息;
[0095] 步骤3:当有新节点要加入通过步骤1和步骤2形成的网络时,执行以下步骤;
[0096] 步骤3.1:新加入节点随机产生Ka值,新加入节点的父节点IDfa=0,新加入节点的层次号La=0,按照图3所示包格式生成helloadd包,helloadd包格式为,发送helloadd包,并开启计时器Wait_Timerx;
[0097] 步骤3.2:网络中新节点的邻居回复helloadd包,新加入节点的邻居节点将新加入节点的Kj和Nj添加到他们disc包的LIST中,邻居节点一级一级的把信息报告给根节点。
[0098] 步骤3.3:根节点逐级发送IDAadd包给新加入节点确定其父节点ID,IDAadd包格式为,并根据式(5)分配ID给新加入节点,Δ为新加入节点的Ka值的排序:
[0099] IDadd=maxID+Δ   (5)
[0100] 步骤4:对于网络拓扑发现阶段,本发明采用时延和开销两个指标考察性能,以下对该拓扑发现方法进行时延和能耗的计算。令网络中第n层次的总节点个数为Nn,hello包、disc包和IDA包的比特数分别为bithello、bitdisc和bitIDA。我们令L为单跳最大距离,Wait_Timerleaf为叶子节点的计时器,Tx_Timermax为最大的Tx_Timer,n为网络的最大层次数,Nleaf为叶子节点个数。;
[0101] 拓扑发现时延的计算:
[0102] 拓扑发现的目标是网络的根节点获得所有叶子节点到中心节点的有序传输路径,获得网络拓扑结构。网络中普通节点获得唯一最短的ID、邻节点信息和自身所在的一条从中心节点到叶子节点的逻辑链路。
[0103] 1)第一部分,从根节点逐跳发送hello包直到最后一跳节点发送完毕,此过程需要时延:
[0104] T1=(Tp+Tc+Tx_Timermax)×(n+1)   (6)
[0105] 2)第二部分,从叶子节点逐跳发送disc包直到根节点收到来自第二跳节点的disc包,该过程共需要时延:
[0106] T2=n×(Tc+Tx_Timer+Tp)   (7)
[0107] 3)第三部分,从根节点逐跳发送IDA包直到叶子节点收到来自上一跳节点的IDA包。需要时延:
[0108] T3=(Tx_Timermax+Tp+Tc)×(n+1)   (8)
[0109] 完成节点ID分配和拓扑发现过程总共需要时延为
[0110] Ttotal=T1+T2+T3   (9)
[0111] 拓扑发现开销的计算:
[0112] 对于网络拓扑发现阶段,开销是考察方法性能的另一个指标;
[0113] 1)第一部分,从根节点逐跳发送hello包直到最后一跳节点接收到来自父节点的hello包,此过程需要开销:
[0114]
[0115] 2)第二部分,从叶子节点逐跳发送disc包直到根节点收到来自第二跳节点的disc包,该过程共需要开销:
[0116]
[0117] 3)第三部分,从根节点逐跳发送IDA包直到叶子节点收到来自上一跳节点的IDA包。需要开销:
[0118] bit3=(N-Nleaf)×bitIDA   (12)
[0119] 完成节点ID分配和拓扑发现过程需要的平均开销为:
[0120] communication traffic=(bit1+bit2+bit3)÷N   (13)
[0121] 通过步骤1,步骤2,步骤3完成了网络拓扑的发现过程,通过本步骤计算完成发现过程需要的时延和开销,得到本发明可以以较低的时延和能耗完成网络的拓扑发现,达到网络中每个节点获得全网统一的拓扑结构,也就是节点间彼此连通状态的目的。
[0122] 采用MATLAB对本发明的性能进行仿真,将十个节点随机布放在某区域中,其中一个为触发节点,节点分布图如图6所示。发射功率为10mw,接收功率为1.3mw,空闲侦听功率为0.285mw,传输速率为512kbps,Tr=0.1s,有效通信距离为30km;由根节点发起初始化过程。
[0123] 具体步骤如下:
[0124] 1、根节点T,令Ki=0,Fi=0,Li=0,按照图3所示包格式生成hello包,发送hello包,并依据式(1,2)开启计时器Wait_Timerx(若节点i为普通节点,则x=Li;若节点i为叶子结点,则x=leaf),网络拓扑发现过程开始。
[0125] 2、网络中第1层节点a,b,c收到来自根节点的hello包后,将节点T的层次号加1作为其层次编号Li,Li=1,生成其hello包,依据Ki开启计时器Tx_Timer(Tx_Timer=Ki/100),计时器超时后发送hello包,并开启计时器Wait_Timer1。
[0126] 3、网络中节点f,g收到来自节点b的hello包,确定节点b为自己的父节点,将节点b的层次号加1作为节点f,g的层次编号,Li=2,生成其hello包,依据Ki开启计时器Tx_Timer,计时器超时后发送hello包,并开启计时器Wait_Timer2,节点b收到来自节点f,g的hello包,统计父节点等于Kb的不同Ki值的个数,得到节点b的子节点个数为2,将子节点的Ki加入到子节点列表。节点e,m,d,h同理进行发包,网络中所有节点完成hello包的发送,从根节点出发到网络边缘,依此类推全网节点完成hello包的发送。节点f,g,e,m,d,h的Ci都为零,这些节点为叶子节点,且Ni=Ci,然后如图3所示生成disc包,向父节点报告该节点的属性。
[0127] 4、节点a,b,c收到所有子节点的disc包时,计算其子孙节点的数目Ni(通过i节点收到的来自子节点的disc包中Ni的总和加上i节点的Ci得到),生成disc包,待Tx_Timer超时后发送disc包给父节点T。若Wait_Timer0超时后,节点T收到了来自节点b,c,a的disc包,则计算其子孙节点的数目Ni=9(通过i节点收到的来自子节点的disc包中Ni的总和加上i节点的Ci得到,即6+3=9);若Wait_Timer0超时后,节点T只收到了来自节点b,c的disc包,则其按照图三所示发送一次disc_req包给节点a,请求未发送disc包的节点a重新发包,如果在2(Tc+TP+Tx_Timer)时间内节点T仍未接收到来自节点a的disc包,将节点a当作其叶子节点,再计算其子孙节点的数目Ni=7(通过i节点收到的来自子节点的disc包中Ni的总和加上i节点的Ci得到,即4+3=7)。本例假设节点T收到了来自子节点a,b,c的disc包。
[0128] 5、待根节点T收到所有子节点的disc包,根节点获知全网节点数,即其子孙节点的数目;根节点依据图3生成IDA包,并发送给其所有子节点。
[0129] 6、任意收到IDA包的非根节点,检查其K值是否包含在LIST中,若是则依据式(3,4)完成ID计算,然后生成其IDA包,依据K值开启计时器Tx_Timer,计时器到时后发送该IDA包。本地节点i根据公式(3,4)自主计算自身ID如图4所示。
[0130] 7、任意收到IDA包的非根节点,检查其K值是否包含在LIST中,若是则依据式(1,2)完成ID计算,然后生成其IDA包,依据K值开启计时器Tx_Timer,计时器到时后发送该IDA包。本地节点根据公式(1,2)自主计算自身ID如图4所示。
[0131] 8、最终网络中每个节点获得唯一最短的ID、所有邻居节点信息以及网络的数形拓扑信息。过程如图4和图5所示。
[0132] 拓扑发现时延的计算:
[0133] 1、第一部分,从根节点逐跳发送hello包直到最后一跳节点发送完毕,此过程需要时延:
[0134] T1=(Tp+Tc+Tx_Timermax)×(n+1)=0.3s
[0135] 2、第二部分,从叶子节点逐跳发送disc包直到根节点收到来自第二跳节点的disc包,该过程共需要时延:
[0136] T2=n×(Tc+Tp+Tx_Timer)=0.00027s
[0137] 3、第三部分,从根节点逐跳发送IDA包直到叶子节点收到来自上一跳节点的IDA包。需要时延:
[0138] T3=(Tx_Timemax+TP+Tc)×(n+1)=0.31s
[0139] 完成节点ID分配和拓扑发现过程总共需要时延为Ttotal=T1+T2+T3=0.61s。
[0140] 拓扑发现开销的计算:
[0141] 1、第一部分,从根节点逐跳发送hello包直到最后一跳节点接收到来自父节点的hello包,此过程需要开销:
[0142]
[0143] 2、第二部分,从叶子节点逐跳发送disc包直到根节点收到来自第二跳节点的disc包,该过程共需要开销:
[0144]
[0145] 3、第三部分,从根节点逐跳发送IDA包直到叶子节点收到来自上一跳节点的IDA包。需要开销:
[0146]
[0147] 完成节点ID分配和拓扑发现过程需要的平均开销为:
[0148] communication traffic=(bit1+bit2+bit3)÷N=336.8bits。
[0149] 经过拓扑发现后,如图7所示,网络中每个节点都知道了全网拓扑信息和自己的ID号,网络链路连通性一目了然。本发明能够准确地进行节点ID分配,同时得到完整的全网拓扑信息。