一种基于蜂群算法的自组织QoS路由方法
技术领域
本发明属于网络技术领域,具体涉及一种基于蜂群算法的自组织QoS路由方法。
背景技术
随着自组织网络的逐步成熟,网络组织日趋多样化,网络规模日益扩大,服务质量(QoS)保证问题也变得越来越重要。QoS就是网络为用户传送端到端数据时必须满足的一套可测量的预先定义的基于端到端性能的服务质量,指标包括时延、时延抖动、可用带宽和分组丢包率等。由于自组织网络具有多跳性、动态拓扑、分布式、临时性、链路带宽受限、能量受限等特性,到现在并没有一套成熟的路由方法可以在自组织网络中稳定有效的传送QoS信息。
发明内容
针对现有技术存在的不足,本发明提供一种基于蜂群算法的自组织QoS路由方法。该方法基于:
1.蜂群算法
蜂群(BeeHive)算法主要依靠蜜蜂agent进行寻路。为了限制网络中agent数目和提高寻路效率,根据agent生命周期长短,将蜜蜂agent分为两类:短距离蜜蜂agent和长距离蜜蜂agent。
(1)搜索域(Foraging Region)
按照某种标准将网络拓扑划分为若干区域,每一个区域就是一个搜索域,规定每个搜索域内有一个中心节点。凡是从中心节点出发在给定跳数内到达的节点均属于同一个搜索域。在网络拓扑一定情况下,规定任何一个节点至少属于某一搜索域,并且至多只能属于一个搜索域。
(2)搜索带(Foraging Zone)
搜索带是针对节点而言的,对于网络中的任意节点,其搜索带为从该节点出发在给定跳数内到达节点的集合,因而,各个节点的搜索带是不同的。
蜜蜂实际是在蜂巢内进行信息交换的,这里,通过在各个节点定义的三个路由表来实现信息交换,三个路由表分别为搜索带内IFZ(Intra Foraging Zone)路由表、搜索域间IFR(Inter Foraging Region)路由表和搜索域成员FRM(Foraging Region Member)路由表。
(3)蜂群算法基本思想
(a)网络被组织成称之为搜索域的固定划分。一个划分源于网络拓扑的特性。每一个搜索域有一个代表节点。目前,域内ip地址最小的节点被选举为代表节点。如果该节点失效,则选举下一个具有较大一些的ip地址的节点作为代表节点。
(b)每一个节点还具有一个特殊的搜索带,组成搜索带的节点是所有从当前节点出发短距离蜜蜂可以到达的节点。
(c)每一个非代表节点周期性地发送一个短距离蜜蜂,并广播它的副本到每一个邻居节点。
(d)当某个蜜蜂的特定副本到达一个站点时,它更改那里的路由信息,然后副本被继续洪泛,但是副本不会被发送到它已经过的站点。这个过程继续着,一直到蜜蜂的生命周期到达,或者当这个蜜蜂已经在这个站点被收到过,则它将死亡。
(e)代表节点只发送长距离蜜蜂,并且它将被邻居接收并像d)中的情况一样被传播。只是,它们的生命周期是受长距离蜜蜂的限制。
(f)每一个蜜蜂在飞行的过程中收集和携带路径信息,并且把路径信息遗留在每一个它访问过的节点,蜜蜂通过优先权队列来散发路由信息。
(g)这样,每一个节点就维护着一个到达其它节点的当前路由信息,在它的搜索带内以及到达搜索域内代表节点。这个方法使得节点(其目的节点在其搜索带外)可以将一个数据包向着目的节点所在域的代表节点的路径传输。
(h)传输一个数据包时,下一跳节点是以一种概率的方式来选择的,依据邻居的质量测量。由此,使得并不是所有的包都沿着当前可行组播树,这将有助于最大化系统性能。这是一个源于蜜蜂行为的原则:一个蜜蜂只能最大化它的群体的效益,如果它一直广泛的监听“跳舞”来寻找的最渴望的食物。
2.小世界模型
著名的Stanley Milgram实验发现,通过平均6人次的熟人传递就可以把社会中任意两个人联系起来,这种现象称为Small-World现象。Milgram的实验揭示了两个发现:(1)短链效应普遍存在;(2)人们可以找到短链。第(2)个发现说明,当网络呈现某种拓扑结构时,仅利用局部信息就可以有效地找到短链。这个发现为分布式路由提供了契机。
Watt和Strogatz提出的模型(简称WS模型)是一种常用的Small-World模型:N个节点分布在一个圆环上,初始状态时,每个节点有k个连接,分别连向最近的k个点。然后,依次调整各节点的连接,以概率p随机地改变连接的终端,但避免连向节点本身。
记D(i,j)为节点i和j之间的最短距离,平均路径距离L的计算公式如下:
L = 1 n ( n - 1 ) / 2 Σ 1 ≤ i , j ≤ n D ( i , j ) ]]>
当p≈0时, L → n 2 k , ]]>此时网络拓扑呈规则状态;当0.001≤p≤0.01时, L → ln n ln k , ]]>此时节点不仅与相邻节点存在连接,还与远距离节点建立了少数的shortcut,正是这些shortcut有效缩短了L,使整个网络呈现出小世界特征。在小世界网络模型中,比较成熟的是Jon Kleinberg模型。该模型中定义了两种边:大量的local边(近邻)和少量的long-range边(远亲)。在n个结点的二维Grid模型中(
为一维结点数目),模型证明了分布式路由算法链长上界为
小世界网络的特征:(1)不考虑网络拓扑结构,结点间有很小的平均距离;(2)有较大的相识系数。某结点,在其所有邻居中,邻居间的连边数占包括该节点在内的子网连边总数比例,称为相识系数。它反映了某结点邻居间的相识程度,它与网络规模无关且恒小于1。在社会学中,一个人在寻找另一个人的过程中,不仅会利用熟人来收集信息,也会通过熟人所属公司或社团的属性收集更多信息。比如,某人希望找人帮忙编一个程序,他会向熟人询问他们是否会编程,同时也会询问他们是否认识计算机系(相当于一个虚拟组织)的学生。
3.自组织QoS路由方法的设计
3.1 自组织网络模型
自组织网络模型可以表示为一个无向连通图G(V,E),其中V是具有生物特性行为且具有转发和处理能力的智能节点的集合,表示网络中的路由器;E是边的集合,表示网络中的链路,如图3所示。
3.2 数学模型
3.2.1 单播数学模型
在单播QoS路由问题中,优化目标是:在满足用户QoS约束的情况下,最大化用户、网络运营商的效用和用户和网络提供商效用之和,使用户和网络提供商效用达到双赢。
则有:
UUP→max{UUP}
UNP→max{UNP}
UU P + UN P → max { UU P + UN P } ]]>
s . t . min e l ∈ P sd { abw l } ≥ bw _ r l ]]>(链路1上的可用带宽最小值=>带宽下限)
Σ e l ∈ P sd dl l ≤ dl _ r h ]]>(链路1上的延迟和<=延迟上限)
Σ e l ∈ P sd jt l ≤ jt _ r h ]]>(链路1上的延迟抖动和<=延迟抖动上限)
1 - Π e l ∈ P sd ( 1 - ls l ) ≤ ls _ r h ]]>(1-链路1上的正确率的乘积)<=出错率上限)
PayP≤p(组成员p所需分摊的组播树费用比<=用户愿付费用上限)
UUP为路径或组播树上的用户效用,UNP则为网络提供商效用。
3.2.2 组播数学模型
在组播QoS路由中,优化目标是:在满足所有组成员端到端QoS约束的前提下,最大化用户、网络运营商的效用和用户和网络提供商效用之和。
则有:UUP→max{UUP}(UUp趋近于UUp的最大值)
UNP→max{UNP}
UUP+UNP→max{UUP+UNP}
使得满足 min e l ∈ P sd { abw l } ≥ bw _ r l ]]>(链路1上的可用带宽最小值=>带宽下限)
Σ e l ∈ P sd dl l ≤ dl _ r h ]]>(链路1上的延迟和<=延迟上限)
Σ e l ∈ P sd jt l ≤ jt _ r h ]]>(链路1上的延迟抖动和<=延迟抖动上限)
1 - Π e l ∈ P sd ( 1 - ls l ) ≤ ls _ r h ]]>(1-链路1上的正确率的乘积)<=出错率上限)
PayP≤p(组成员p所需分摊的组播树费用比<=用户愿付费用上限)
UUP为路径或组播树上的用户效用,UNP则为网络提供商效用
UUT→max{UUT}
UNT→max{UNT}
UUT+UNT→max{UUT+UNT}
s . t . min e l ∈ P sd { ab w l d } ≥ bw _ r l d ]]>(链路1上的可用带宽区间值=>带宽区间值)
Σ e l ∈ P sd d l l d ≤ dl _ r h d ]]>(链路1上的延迟区间值和<=延迟区间值)
Σ e l ∈ P sd j t l d ≤ jt _ r h d ]]>(链路1上的延迟抖动区间值区间值和<=延迟抖动区间值)
1 - Π e l ∈ P sd ( 1 - l s l d ) ≤ ls _ r h d ]]>(1-链路1上的正确率区间值的乘积)<=出错率区间值)
P ay p d ≤ p d ]]>(组成员p所需分摊的组播树费用区间值比<=用户愿付费用区间值)
UUT路径或组播树上的用户效用,UNT则为网络提供商效用。
3.2.3 小世界行为
(1)小世界行为具有如下特性
(a)节点度数分配的高可变性可得到短路径和高聚簇系数;
(b)当节点度数可变性不是很高时,它单独不能引起小世界行为;
(c)偏好局部连接可以引起小世界行为,尤其是在路由器级的网络拓扑中;
自组织网络具有生物特性行为,节点是动态的,边也可以建立或是去除,所以节点度数是可变的。此外,自组织网络中节点间的交互都是局部的,也就是所谓的偏好局部连接。但是,由随机的网络演化成小世界行为明显的网络需要一个过程,在这期间可能不能直接地利用小世界特点进行路由。而且还有一点,现行的小世界网络模型中,节点之间的连接指的都是直接连接,也就是说节点度数的可变性也是指的与之直接有物理连接的边。在这里,可以用非直连边充当直连边来产生小世界行为从而得到相应的优点,自组织行为设计中提到的小世界边。
例如,节点A直接相连的节点有A1、A2、A3、A4,但是以A为源节点的路由已建立了几个,其目的节点分别是D1、D2、D3,从A到D1、D2、D3就分别存在小世界边。在计算A的度数时可以将这三条小世界边计算在内。在路由时也可以动态的将小世界有边选择性的看作为A的可选下一跳边,这样就实现了一种节点度数的可变性。
当然,把一段路径当成一条边来看虽然可以产生极为有利结果,也同时带来了一些问题,毕竟在路由的过程中处理一段路径和处理一条实际边的复杂程度是不完全相同的。
这种方式有时还会引发另一个问题,通过小世界边找到的路径虽说是经过步数很少,但路径实际跳数可能是很多的,也就不是一条很优的路径,如图4所示。
图4中S和M之间存在小世界边,M和D之间存在小世界边,则S到M到D只需经过两次寻路。实际上却要经过8跳,而S→A→B→D实际上只需要3跳,虽说要经过三次寻路。
为了避免多次引入小世界边寻路导致出现上面所述的问题,这里要限制在一次路由过程,仅能在最后一跳引入小世界边。也就是在当前节点仅引入可以直接到达目的节点的小世界边,而且还要限制小世界边的长度。
这样,就能大大降低上面描述的问题发生的概率。而且对于引入小世界边得到的路径,如果性能不好,则也会被优化算法逐渐淘汰掉。另外,在自组织网络的动态环境中,快速的达到次优往往比最优更有意义。
(2)在自组织网络中实现小世界行为
(a)利用小世界边
随着算法的运行,节点会积累下来一些小世界边。随着小世界边的增多,节点知道的可达节点也就越来越多,则在后面的路由过程中,就可以直接利用小世界边的可达性信息来加快路由过程。
由当前节点出发的小世界路径记录如表1所示。
表1 小世界边列表
初始化:每个节点都有一张这样的小世界路径表,初始时,表为空。
添加:由算法来完成,算法每成功找到一条路径,就将该路径相关信息加入到源节点小世界路径表中,其中“被采用计数”值为0。
计数:每当一条小世界边被成功采用到达目的节点后,就将小世界边的“被采用次数”项值加1。
更新:每隔时间Δtswp扫描一遍表中“被采用次数”项的值,删除那些值为0的行,然后将保留下来的各行的“被采用次数”值清零。
(b)节点路由成功率
是指节点总路由次数中成功的次数所占百分比。成功率较高的节点,在路由时更可信赖。
在每一个节点都设定两个计数器,rcs(成功路由次数计数器),rct(节点总路由次数计数器)。当节点被采用到一次路由中去时,rct就增1,而当该次路由成功后,rcs就增1。这里,为保证时效性,rcs、rct值每隔一定周期Δtrc就清零。
计算第i个节点的路由成功率公式如下:
I i = rcs i rct i ]]>
(c)根据地址结构:具有相同IP地址前缀的节点很有可能会位于临近的区域内,而且相同前缀部分越长,越可能位于更近的区域内,这里将地址的这种特性称为相近度。例如:202.118.1.64和202.118.1.206,相同的前缀部分为202.118.1,所以二者位于很近的区域内,二者的相近度较高。
计算可选下一跳节点的地址和本次路由目的地址的相近度,相近度越高,则下一跳节点越有可能找到目的节点,这也类似为下一跳节点对此次路由目的地址的熟悉程度。
两个地址相近度的计算采取下面的方法:将32位地址从左向右逐位扫描比较二进制位,如果相同就继续扫描,如果不同就结束,记录相同的位数Mik,则相近度Vi为:
V i = M ik 32 ]]>
本发明的方法按如下步骤:
步骤A:接收到邻居路由器发送的数据报文;
步骤B:根据数据报文的目的地址是否为单播地址判断报文类型是否为单播报文;
其特征在于:根据步骤B是单播报文,则执行步骤C,否则执行步骤G;
步骤C:进入单播建模的QoS路由方法;
步骤D:初始化路由器寄存器,发送前向蜂群agent寻路,调用蜂群算法,其中agent负责收集记录当前网络状态信息;
步骤E:考查路径评价值Jpath,找到符合用户请求的路径;
步骤F:转到步骤K;
步骤G:进入组播建模的QoS路由方法,给定组播请求: R ( v s , v d , Δ bw d , Δ dl d , Δ jt d , Δ ls d , p d ) , ]]>为其构造一棵组播树,其中vs代表源节点,vd代表目的节点,
代表带宽需求约束区间,
代表延迟需求约束区间,
代表延迟抖动需求约束区间,
代表出错率需求区间,pd代表用户愿付费用上限;
步骤H:初始化路由器寄存器,构建组播树;
步骤I:组播树费用分摊;
在形成组播树以后,由于所选边是选用用户共用的,所以资费也理所应当由选用用户共同分担,分摊的原则是:用户独自占用该条路径所需付的费用越高则用户在组播树付费中分摊的部分越大,
设定源节点到每一个组成员的路径所需付费的集合为:
Wp={pay1,pay2,...,payn-1,payn}式中payn为每一个组成员的路径所需付费,n=1,2,…,N,N属于自然数,则第i个组成员vi所需分摊的组播树费用比例为:
per d = pay i Σ k ∈ { 1,2 , . . . } pay k ]]> 式中i∈n,k∈n;
步骤J:计算组播树评价值JT,找出当前可行组播树;
步骤K:根据计算出的当前可行组播树将数据报文转发到下一跳路由器。
步骤D中调用蜂群算法包括:
步骤D1:初始化路由器寄存器,设置最大迭代次数TIN,设置已迭代次数IN=0,设定每次迭代发送蜜蜂agent数量BN,已发送的蜜蜂agent数量bn=0,路径评价值Jpath=∞,可行路径为空,初始化网络,将网络划分为若干个的域,每一个区域就是一个搜索域,规定每个搜索域内有一个代表节点,域内ip地址最小的节点被选举为代表节点。如果该节点失效,则选举下一个具有较大一些的ip地址的节点作为代表节点,凡是从代表节点出发在给定跳数内到达的节点均属于同一个搜索域;
步骤D2:在源节点判断目的节点是否属于源节点的搜索带,如果是,则设定发送短距离蜜蜂,如果是,则设定发送长距离蜜蜂,如果不知道,则设定长、短距离蜜蜂各占一半比例发送;
步骤D3:IN←IN+1,源节点以间隔Δt发出BN个蜜蜂agent,每发送一个agent就bn←bn+1,初始化每一个蜜蜂agent,其中:蜜蜂agent序号seq=bn;
步骤D4:前向agent记录路径,将经历过的节点保存起来,同时记录有关的网络状态信息,前向蜜蜂agent在源节点被发出后,在网络中的每一个经过的节点按下面步骤执行行为;
步骤D41:判断当前蜜蜂agent跳数是否超限,如果是,则蜜蜂agent死亡;
步骤D42:如果源节点和目的节点不在同一个域内,则探路蜜蜂agent先以目的节点所在域代表节点为目的节点进行探路;当到达该域代表节点后,再以实际目的节点为目的节点进行探路;
步骤D43:如果当前节点的直接下一跳节点有本次路由目的节点,则考察与该节点之间的边是否满足用户请求约束,如满足,则蜜蜂agent跳转到目的节点,转到步骤D46;
步骤D44:在当前节点实现小世界边;
步骤D45:在当前节点进行下一跳选择;
步骤D451:在当前节点,将路由总次数计数器增加1;
步骤D452:实现小世界行为;
步骤D453:如果下一跳选择成功返回,则蜜蜂agent前行至该节点;
步骤D454:如果下一跳选择失败,蜜蜂agent死亡;
步骤D46:前向蜜蜂agent任务完成;
步骤D5:当前向agent到达目的节点时,触发产生一个继承前向agent相关信息的后向agent,后向agent沿着原路径的信息,从目的节点反向到达源节点,同时更新路由表中的信息;
步骤D51:在目的节点,根据前向蜜蜂agent信息,根据公式 J P = α up UU P + α np UN P , ]]>计算路径评价值JP,并赋予生成的后向agent,其中,αup,αnp是对用户的倾斜权值,0<αup,αnp<1,αup+αnp=1,将前向蜜蜂agent找到的路径赋予后向蜜蜂agent;
步骤D52:对于长距离蜜蜂,在未反向飞到目的节点所在域的代表节点以前,更新IFZ路由表,在飞过目的节点所在域代表节点之后,还要更新IFR路由表;
步骤D53:后向agent按保存的路径信息,反向跳到上游节点,然后更新IFZ或IFR表;在当前节点,蜜蜂将路由成功次数计数器增加1,如果蜜蜂agent在当前节点引入了小世界边,则更新小世界边表;
步骤D54:判断后向蜜蜂agent是否到达源节点,如果未到达,则跳转至步骤D53;
步骤D55:将后向蜜蜂agent携带路径的评价值和当前路径评价值进行比较,如果agent携带路径的评价值小于当前路径评价值,则将新路径保存为当前可行路径;
步骤D56:后向agent任务完成,调用蜂群算法结束。
步骤D44在当前节点实现小世界边包括:
步骤D441:判断当前agent是否正在使用小世界边,如果是,则直接取出小世界边作为下一跳节点;否则,跳转至步骤D443;
步骤D442:判断该下一跳节点能否满足用户请求约束,如果能,蜜蜂agent选择该节点作为下一跳节点,保存当前节点与该节点之间边的QoS信息和成本信息,蜜蜂agent在当前节点行为结束,然后前行至该下一跳节点;否则,蜜蜂agent死亡;
步骤D443:考察蜜蜂agent的序列号,判断该agent是否为本次迭代发送中的最后一个,如果不是,则跳转至步骤D45;
步骤D444:考察当前节点小世界边表,是否存在到达目的节点的小世界边,如果不存在,则跳转至步骤D45;
步骤D445:将小世界边存入蜜蜂agent,并设置蜜蜂agent使用小世界边,然后蜜蜂agent记录该节点地址,跳转至D441。
步骤D452实现小世界行为包括:
如果蜜蜂agent的序列号为偶数,则随机选择下一跳节点;否则,进行计算选择下一跳,计算对应边的用户满意度值计算公式: W l = α bw · g bw l + α dl · g dl l + α jt · g jt l + α ls · g ls l ]]>式中,αbw、αdl、αjt和αls分别为各QoS参数的权重系数,αbwαdlαjtαls∈[01],且αbw+αdl+αjt+αls=1,Wl是位于0和1之间的数值,
表示带宽满意度、
表示延时满意度、
表示延时抖动满意度、
代表出错率满意度,计算第i个节点的路由成功率: I i = rcs i rct i , ]]>式中rcs是成功路由次数计数器,rct是节点总路由次数计数器是,当节点被采用到一次路由中去时,rct就增1,而当该次路由成功后,rcs就增1,为保证时效性,rcs、rct值每隔一定周期Δtrc就清零;计算第i个节点与本次路由目的地址的想进度:将32位地址从左向右逐位扫描比较二进制位,如果相同就继续扫描,如果不同就结束,记录相同的位数Mik,则相近度 V i = M ik 32 : ]]>Mtk代表两个32位的ip地址做二进制比较,位数相同的个数,取值范围在0-32之间,计算下一条选择概率:proj=Pij×Wj×Ij×Vj,其中:Pij为当前节点信息素表中对应Nj的信息素浓度,Wj表示节点j的用户满意度值、Ij表示节点j的路由成功率、Vj表示节点j的相近度,根据proj,选出对应proj值最大的下一跳节点作为下一跳选择。
步骤E考查路径评价值Jpath,找到符合用户请求的路径包括:
步骤E1:在源节点等待一段时间Δt后,考查路径评价值Jpath;
步骤E2:如果Jpath<∞,则算法成功找到符合用户请求的路径,在源节点将当前保留路径加入小世界表,转至步骤K;
步骤E3:如果Jpath=∞,则判断IN是否小于TIN,如果是,则转至步骤D3,否则路由失败。
步骤H初始化路由器寄存器,构建组播树包括:
步骤H1:初始化路由器寄存器,设置迭代次数CN,已迭代次数cn=0,组播树评价值Jtree=∞,当前可行组播树为空;
步骤H2:将所有组成员按带宽请求由大到小排列,设定待处理组成员集合W={v1,v2,...,vn-1,vn},vn为待处理组成员,n=1,2,…,N,N属于自然数,已处理组成员集合A=Φ,可行路径集合P=Φ,其中Φ为空集合;
步骤H3:取vd∈W,利用基于蚂蚁网络的单播路由算法,由vs向vd寻找一条满足成员vd请求约束的可行路径Pd,如果未找到,则此次构建组播树失败,跳转到步骤J3;
步骤H4:将节点vd从W删除,并加入A;
步骤H5:检查可行路径Pd上是否含有位于W中的组成员,如果没有,则跳转到步骤H7;
步骤H6:如果Pd上含有位于W中的组成员,判断这些组成员的请求约束能否在Pd得到满足,将能被满足的节点从W删除,并加入A;
步骤H7:将可行路径Pd加入集合P;
步骤H8:若集合W不为空,则跳转到步骤H1;
步骤H9:将可行路径中P中的路径拼成一棵组播树,在成树的过程中,每个组成员的请求约束都要被满足,并且不能出现环,否则,此次构建组播树失败,跳转至步骤J3。
步骤J计算组播树评价值JT,找出当前可行组播树包括:
步骤J1:根据公式计算组播树评价值JT;
步骤J2:如果JT<Jtree,Jtree为当前可行组播树的评价值,则用计算得到的组播树代替当前可行组播树,Jtree=JT;
步骤J3:cn←cn+1,若cn<CN,跳转到步骤H;
步骤J4:判断Jtree<∞是否成立,如果成立,则算法成功,否则算法失败。
步骤H3中蚂蚁网络的单播路由算法为:
步骤(1):初始化路由器寄存器,发送前向蚂蚁agent寻路,调用蚂蚁算法,其中agent负责收集记录当前网络状态信息;
步骤(2):考查路径评价值Jpath,找到符合用户请求的路径;
步骤(1-1):初始化路由器寄存器,设置最多迭代次数TIN,已迭代次数IN=0,初始化每次迭代发送的蚂蚁agent数量AN,已发送的agent数an=0,路径评价值Jpath=∞,可行路径为空;
步骤(1-2):IN←IN+1,源节点以间隔Δt发送AN个前向蚂蚁agent寻路,每发送一个agent就an←an+1,初始化每一个前向agent,其中:蚂蚁agent序号seq=an;
步骤(1-3):前向agent记录路径,将经历过的节点保存起来,同时记录有关的网络状态信息,前向蚂蚁agent在源节点被发出后,在网络中的每一个经过的节点按下面步骤执行行为;
步骤(1-3-1):判断当前蚂蚁agent跳数是否超限,如果是,则蚂蚁agent死亡;
步骤(1-3-2):如果当前节点的直接下一跳节点有本次路由目的节点,则考察与该节点之间的边是否满足用户请求约束,如满足,则蚂蚁agent跳转到目的节点,转到步骤(1-3-5);
步骤(1-3-3):在当前节点实现小世界;
步骤(1-3-4):在当前节点进行下一跳选择;
步骤(1-3-4-1):在当前节点,将路由总次数计数器增加1;
步骤(1-3-4-2):实现小世界行为;
步骤(1-3-4-3):如果下一跳选择成功返回,则蚂蚁agent前行至该节点;
步骤(1-3-4-4):如果下一跳选择失败,蚂蚁agent死亡;
步骤(1-3-5):前向蚂蚁agent任务完成;
步骤(1-4):当前向agent到达目的节点时,触发产生一个继承前向agent相关信息的后向agent,后向agent沿着原路径的信息,从目的节点反向到达源节点,同时更新路由表中的信息;
步骤(1-4-1):在目的节点,根据前向蚂蚁agent信息,根据公式 J P = α up UU P + α np UN P ]]>(其中,αup,αnp是对用户的倾斜权值,0<αup,αup<1,αup+αnp=1)计算路径评价值Jp,并赋予生成的后向agent;将前向蚂蚁agent找到的路径赋予后向蚂蚁agent;
步骤(1-4-2):后向agent按保存的路径信息,反向跳到上游节点,然后更新信息素表;在当前节点,蚂蚁将路由成功次数计数器增加1,如果蚂蚁agent在当前节点引入了小世界边,则更新小世界边表;
步骤(1-4-3):判断后向蚂蚁agent是否到达源节点,如果未到达,则跳转至步骤(1-4-2);
步骤(1-4-4):将后向蚂蚁agent携带路径的评价值和当前路径评价值进行比较,如果agent携带路径的评价值小于当前路径评价值,则将新路径保存为当前可行路径;
步骤(1-4-5):后向agent任务完成,调用蚁群算法结束。
步骤步骤(1-3-3)在当前节点实现小世界边包括:
步骤(1-3-3-1):判断当前agent是否正在使用小世界边,如果是,则直接取出小世界边作为下一跳节点;否则,跳转至步骤(1-3-3-3);
步骤(1-3-3-2):判断该下一跳节点能否满足用户请求约束,如果能,蚂蚁agent选择该节点作为下一跳节点,保存当前节点与该节点之间边的QoS信息和成本信息,蚂蚁agent在当前节点行为结束,然后前行至该下一跳节点;否则,蚂蚁agent死亡;
步骤(1-3-3-3):考察蚂蚁agent的序列号,判断该agent是否为本次迭代发送中的最后一个,如果不是,则跳转至步骤(1-3-4);
步骤(1-3-3-4):考察当前节点小世界边表,是否存在到达目的节点的小世界边,如果不存在,则跳转至步骤(1-3-4);
步骤(1-3-3-5):将小世界边存入蚂蚁agent,并设置蚂蚁agent使用小世界边,然后蚂蚁agent记录该节点地址,跳转至(1-3-3-1)。
步骤(1-3-4-2)实现小世界行为包括:
如果蚂蚁agent的序列号为偶数,则随机选择下一跳节点;否则,进行计算选择下一跳,计算对应边的用户满意度值计算公式: W l = α bw · g bw l + α dl · g dl l + α jt · g jt l + α ls · g ls l ]]>式中,αbw、αdl、αjt和αls分别为各QoS参数的权重系数,αbwαdlαjtαls∈[01],且αbw+αdl+αjt+αls=1,Wl是位于0和1之间的数值,
表示带宽满意度、
表示延时满意度、
表示延时抖动满意度、
代表出错率满意度,计算第i个节点的路由成功率: I i = rcs i rct i , ]]>式中rcs是成功路由次数计数器,rct是节点总路由次数计数器是。当节点被采用到一次路由中去时,rct就增1,而当该次路由成功后,rcs就增1为保证时效性,rcs、rct值每隔一定周期Δtrc就清零,计算第i个节点与本次路由目的地址的想进度:将32位地址从左向右逐位扫描比较二进制位,如果相同就继续扫描,如果不同就结束,记录相同的位数Mik,则相近度 V i = M ik 32 : ]]>计算下一条选择概率:proj=Pij×Wj×Ij×VjPij为当前节点信息素表中对应Nj的信息素浓度,Wj表示节点j的用户满意度值、Ij表示节点j的路由成功率、Vjj表示节点j的相近度,根据proj,选出对应proj值最大的下一跳节点作为下一跳选择。
步骤(2)考查路径评价值Jpath,找到符合用户请求的路径包括:
步骤(2-1):在源节点等待一段时间Δt后,考查路径评价值Jpath;
步骤(2-2):如果Jpath<∞,则算法成功找到符合用户请求的路径,在源节点将当前保留路径加入小世界表,转至步骤K;
步骤(2-3):如果Jpath=∞,则判断IN是否小于TIN,如果是,则转至步骤(1-3),否则路由失败。
本发明设计了一种路由方法,该方法基于一种分布式的路由算法—蜂群网络算法进行算法设计,通过该路由方法在路由过程中可以有效的基于QoS请求对数据进行路由和转发,蜂群算法可以设计为在网络中逐跳寻路,本发明设计了这种算法的下一跳选择策略,并扩展支持QoS路由。为了降低路由时间,提高路由成功率,本文在算法中引入了小世界行为。同时引入了模糊数学知识描述不精确的链路参数,引入纳什(Nash)均衡、帕累托(Pareto)最优等微观经济学方法来进行链路策略选择。本发明对设计的自组织网络模型和自组织QoS路由方法在NS2平台上进行仿真,对路由方法进行实现,NS2是指Network Simulator version2,是一种针对网络技术的源代码公开的、免费的软件模拟平台,研究人员使用它可以很容易的进行网络技术的开发,目前已成了学术界广泛使用的一种网络模拟软件。通过对仿真和实现进行性能评价,得出自组织网络模型较之传统网络模型具有很大的优越性,该设计的路由方法具有良好的性能和实用性。
附图说明
图1是本发明基于蜂群算法的自组织QoS路由方法步骤框图;
图2是本发明基于蜂群算法的自组织QoS路由方法具体流程图;
图3是自组织网络拓扑示意图;
图4是小世界边示意图;
图5是本发明实现平台示意图;
图6是本发明中国教育科研网CERNET拓扑。
具体实施方式
本发明一种基于蜂群算法的自组织QoS路由方法,将蜂群算法嵌入到Quagga(Quagga是一款开源的路由软件,在Quagga上可以运行OSPF,BGP等路由协议)的开源路由程序中的源代码中,使用24台PC机作为原型路由器,其中4台作为应用服务器;24块英特尔(INTEL)网卡,24块普瑞尔(TP_LINK)网卡、26条网线。
原型路由器软件配置如下:LinuxFC7操作系统;使用Linux下GNU C扩展Quagga软件路由器中的ospf6d和bgpd两个守护进程,使用Liunx下GNU C编写与算法对接的接口模块,实现自组织网络中的自适应单播路由协议;使用Liunx下GNU C编写守护进程,扩展实现基于IPv6的自适应组播路由协议。网络拓扑结构如图5所示,20台原型路由器参照CERNET2网络结构部署,4台应用服务器与原型路由器直连。本发明已经实现了绑定算法所需要的协议支持,邻居信息的获取,网络状态信息的获取,路由agent的转发。
路由仿真系统建立在CERNET(中国教育科研网)拓扑上,如图6所示,拓扑的参数设定基本参照实际情形,具有一定的客观性。
在网络模型中,给定一个路由请求,分别运行本文的路由方法进行找路和加入路由表,然后再根据路由请求中设定的带宽值发送一段时间的数据包,得到跟踪(trace)文件。再使用NS2系统内置的距离向量(DV)路由协议,按同样的源、目的节点和带宽值发送相同时间的数据,得到trace文件。分别对得到的trace文件进行分析,得到数据传输路径的吞吐率、端到端延迟、抖动和丢包率,然后结合用户请求通过满意度公式计算用户端到端传输满意度。本发明如图1和图2所示,按如下步骤:
步骤A:接收到邻居路由器发送的数据报文;
步骤B:根据数据报文的目的地址是否为单播地址判断报文类型是否为单播报文;
其特征在于:根据步骤B是单播报文,则执行步骤C,否则执行步骤G;
步骤C:进入单播建模的QoS路由方法;
步骤D:初始化路由器寄存器,发送前向蜂群agent寻路,调用蜂群算法,其中agent负责收集记录当前网络状态信息;
步骤E:考查路径评价值Jpath,找到符合用户请求的路径;
步骤F:转到步骤K;
步骤G:进入组播建模的QoS路由方法,给定组播请求: R ( v s , v d , Δ bw d , Δ dl d , Δ jt d , Δ ls d , p d ) , ]]>为其构造一棵组播树,其中vs代表源节点,vd代表目的节点,
代表带宽需求约束区间,
代表延迟需求约束区间,
代表延迟抖动需求约束区间,
代表出错率需求区间,pd代表用户愿付费用上限;
步骤H:初始化路由器寄存器,构建组播树;
步骤I:组播树费用分摊;
在形成组播树以后,由于所选边是选用用户共用的,所以资费也理所应当由选用用户共同分担,分摊的原则是:用户独自占用该条路径所需付的费用越高则用户在组播树付费中分摊的部分越大,
设定源节点到每一个组成员的路径所需付费的集合为:
Wp={pay1,pay2,...,payn-1,payn}式中payn为每一个组成员的路径所需付费,n=1,2,…,N,N属于自然数,则第i个组成员vi所需分摊的组播树费用比例为:
per d = pay i Σ k ∈ { 1,2 , . . . } pay k ]]> 式中i∈n,k∈n;
步骤J:计算组播树评价值JT,找出当前可行组播树;
步骤K:根据计算出的当前可行组播树将数据报文转发到下一跳路由器。
步骤D中调用蜂群算法包括:
步骤D1:初始化路由器寄存器,设置最大迭代次数TIN,设置已迭代次数IN=0,设定每次迭代发送蜜蜂agent数量BN,已发送的蜜蜂agent数量bn=0,路径评价值Jpath=∞,可行路径为空,初始化网络,将网络划分为若干个的域,每一个区域就是一个搜索域,规定每个搜索域内有一个代表节点,域内ip地址最小的节点被选举为代表节点。如果该节点失效,则选举下一个具有较大一些的ip地址的节点作为代表节点,凡是从代表节点出发在给定跳数内到达的节点均属于同一个搜索域;
步骤D2:在源节点判断目的节点是否属于源节点的搜索带,如果是,则设定发送短距离蜜蜂,如果是,则设定发送长距离蜜蜂,如果不知道,则设定长、短距离蜜蜂各占一半比例发送;
步骤D3:IN←IN+1,源节点以间隔Δ,发出BN个蜜蜂agent,每发送一个agent就bn←bn+1,初始化每一个蜜蜂agent,其中:蜜蜂agent序号seq=bn;
步骤D4:前向agent记录路径,将经历过的节点保存起来,同时记录有关的网络状态信息,前向蜜蜂agent在源节点被发出后,在网络中的每一个经过的节点按下面步骤执行行为;
步骤D41:判断当前蜜蜂agent跳数是否超限,如果是,则蜜蜂agent死亡;
步骤D42:如果源节点和目的节点不在同一个域内,则探路蜜蜂agent先以目的节点所在域代表节点为目的节点进行探路;当到达该域代表节点后,再以实际目的节点为目的节点进行探路;
步骤D43:如果当前节点的直接下一跳节点有本次路由目的节点,则考察与该节点之间的边是否满足用户请求约束,如满足,则蜜蜂agent跳转到目的节点,转到步骤D46;
步骤D44:在当前节点实现小世界边;
步骤D45:在当前节点进行下一跳选择;
步骤D451:在当前节点,将路由总次数计数器增加1;
步骤D452:实现小世界行为;
步骤D453:如果下一跳选择成功返回,则蜜蜂agent前行至该节点;
步骤D454:如果下一跳选择失败,蜜蜂agent死亡;
步骤D46:前向蜜蜂agent任务完成;
步骤D5:当前向agent到达目的节点时,触发产生一个继承前向agent相关信息的后向agent,后向agent沿着原路径的信息,从目的节点反向到达源节点,同时更新路由表中的信息;
步骤D51:在目的节点,根据前向蜜蜂agent信息,根据公式 J P = α up UU P + α np UN P , ]]>计算路径评价值Jp,并赋予生成的后向agent,其中,αup,αnp是对用户的倾斜权值,0<αup,αnp<1,αup+αup=1,将前向蜜蜂agent找到的路径赋予后向蜜蜂agent;
步骤D52:对于长距离蜜蜂,在未反向飞到目的节点所在域的代表节点以前,更新IFZ路由表,在飞过目的节点所在域代表节点之后,还要更新IFR路由表;
步骤D53:后向agent按保存的路径信息,反向跳到上游节点,然后更新IFZ或IFR表;在当前节点,蜜蜂将路由成功次数计数器增加1,如果蜜蜂agent在当前节点引入了小世界边,则更新小世界边表;
步骤D54:判断后向蜜蜂agent是否到达源节点,如果未到达,则跳转至步骤D53;
步骤D55:将后向蜜蜂agent携带路径的评价值和当前路径评价值进行比较,如果agent携带路径的评价值小于当前路径评价值,则将新路径保存为当前可行路径;
步骤D56:后向agent任务完成,调用蜂群算法结束。
步骤D44在当前节点实现小世界边包括:
步骤D441:判断当前agent是否正在使用小世界边,如果是,则直接取出小世界边作为下一跳节点;否则,跳转至步骤D443;
步骤D442:判断该下一跳节点能否满足用户请求约束,如果能,蜜蜂agent选择该节点作为下一跳节点,保存当前节点与该节点之间边的QoS信息和成本信息,蜜蜂agent在当前节点行为结束,然后前行至该下一跳节点;否则,蜜蜂agent死亡;
步骤D443:考察蜜蜂agent的序列号,判断该agent是否为本次迭代发送的个中的最后一个,如果不是,则跳转至步骤D45;
步骤D444:考察当前节点小世界边表,是否存在到达目的节点的小世界边,如果不存在,则跳转至步骤D45;
步骤D445:将小世界边存入蜜蜂agent,并设置蜜蜂agent使用小世界边,然后蜜蜂agent记录该节点地址,跳转至D441。
步骤D452实现小世界行为包括:
如果蜜蜂agent的序列号为偶数,则随机选择下一跳节点;否则,进行计算选择下一跳,计算对应边的用户满意度值计算公式: W l = α bw · g bw l + α dl · g dl l + α jt · g jt l + α ls · g ls l ]]>式中,αbw、αdl、αjt和αls分别为各QoS参数的权重系数,αbw αdl αjt αls∈[01],且αbw+αdl+αjt+αls=1,Wi是位于0和1之间的数值,
表示带宽满意度、
表示延时满意度、
表示延时抖动满意度、
代表出错率满意度,计算第i个节点的路由成功率: I i = rcs i rct i , ]]>式中rcs是成功路由次数计数器,rct是节点总路由次数计数器是,当节点被采用到一次路由中去时,rct就增1,而当该次路由成功后,rcs就增1,为保证时效性,rcs、rct值每隔一定周期Δtrc就清零;计算第i个节点与本次路由目的地址的想进度:将32位地址从左向右逐位扫描比较二进制位,如果相同就继续扫描,如果不同就结束,记录相同的位数Mk,则相近度 V i = M ik 32 : ]]>Mk代表两个32位的ip地址做二进制比较,位数相同的个数,取值范围在0-32之间,计算下一条选择概率:proj=Pij×Wj×Ij×Vj,其中:Pij为当前节点信息素表中对应Nj的信息素浓度,Wj表示节点j的用户满意度值、Ij表示节点j的路由成功率、Vj表示节点j的相近度,根据proj,选出对应proj值最大的下一跳节点作为下一跳选择。
步骤E考查路径评价值Jpath,找到符合用户请求的路径包括:
步骤E1:在源节点等待一段时间Δt后,考查路径评价值Jpath;
步骤E2:如果Jpath<∞,则算法成功找到符合用户请求的路径,在源节点将当前保留路径加入小世界表,转至步骤K;
步骤E3:如果Jpath=∞,则判断IN是否小于TIN,如果是,则转至步骤D3,否则路由失败。
步骤H初始化路由器寄存器,构建组播树包括:
步骤H1:初始化路由器寄存器,设置迭代次数CN,已迭代次数cn=0,组播树评价值Jtree=∞,当前可行组播树为空;
步骤H2:将所有组成员按带宽请求由大到小排列,设定待处理组成员集合W={v1,v2,...,vn-1,vn},vn为待处理组成员,n=1,2,…,N,N属于自然数,已处理组成员集合A=Φ,可行路径集合P=Φ,其中Φ为空集合;
步骤H3:取vd∈W,利用基于蚂蚁网络的单播路由算法,由va向vd寻找一条满足成员vd请求约束的可行路径Pd,如果未找到,则此次构建组播树失败,跳转到步骤J3;
步骤H4:将节点vd从W删除,并加入A;
步骤H5:检查可行路径Pd上是否含有位于W中的组成员,如果没有,则跳转到步骤H7;
步骤H6:如果Pd上含有位于W中的组成员,判断这些组成员的请求约束能否在Pd得到满足,将能被满足的节点从W删除,并加入A;
步骤H7:将可行路径Pd加入集合P;
步骤H8:若集合W不为空,则跳转到步骤H1;
步骤H9:将可行路径中P中的路径拼成一棵组播树,在成树的过程中,每个组成员的请求约束都要被满足,并且不能出现环,否则,此次构建组播树失败,跳转至步骤J3。
步骤J计算组播树评价值JT,找出当前可行组播树包括:
步骤J1:根据公式计算组播树评价值JT;
步骤J2:如果JT<Jtree,Jtree为当前可行组播树的评价值,则用计算得到的组播树代替当前可行组播树,Jtree=JT;
步骤J3:cn←cn+1,若cn<CN,跳转到步骤H;
步骤J4:判断Jtree<∞是否成立,如果成立,则算法成功,否则算法失败。
使用本发明方法的结果如表2所示,
负载较轻一般较重很重
使用蜂群方法0.6642690.657760.5812870.478431
NS2-DV0.6314880.5105690.498740.455068
表2数据传输满意度
表2分别统计了不同网络负载下的满意度结果,负载很轻时两种路由方法的传输满意度相差无几,随着负载的加重,本文路由方法开始明显优于使用距离向量的DV方法,当负载很重时两种路由方法的传输满意度值又归于相近。