GMR假定整个组播成员信息在多播根节点与其他无状态的协议。然而,所有的目的地,而不是建立一个组播树的根节点多播选择转发节点根据成本和进度比其邻国之间的目的地。因此,数据包报头只携带选择转发邻居id和一个目的地为每一个转发节点列表。图
2(一个)说明了GMR路由是如何工作的。源(<我nl我ne- - - - - -for米ula>
一个
)广播包,一个邻居id (<我nl我ne- - - - - -for米ula>
B
),<我nl我ne- - - - - -for米ula>
x
- - - - - -
y
坐标的目的地<我nl我ne- - - - - -for米ula>
{
E
x
,
E
y
,
D
x
,
D
y
}
。在接收消息包,每个选择转发节点计算下一个转发节点给定目的地的邻国之一。也就是说,节点<我nl我ne- - - - - -for米ula>
B
计算一个邻居id为每个路径。在这个例子中,一个节点<我nl我ne- - - - - -for米ula>
C
被选中作为一个目的地的邻居吗<我nl我ne- - - - - -for米ula>
E
,一个节点<我nl我ne- - - - - -for米ula>
D
选择一个目的地<我nl我ne- - - - - -for米ula>
D
,分别。随后,该节点<我nl我ne- - - - - -for米ula>
B
广播的数据包选择邻居和目的地的坐标。多播数据包最终传播到目的地使用next转发邻居计算每一个转发节点。每一个转发节点执行约<我nl我ne- - - - - -for米ula>
O
(
米
我
n
(
n
e
我
g
h
b
o
r
年代
,
d
e
年代
t
我
n
一个
t
我
o
n
年代
)
3
)
计算选择转发的邻居。
巨磁电阻与DSM路由。
DSM假定每个节点有整个使用周期位置洪水信息网络拓扑。根节点在本地计算Steiner树的多播组。例如,树图
2 (b)Steiner树的根节点<我nl我ne- - - - - -for米ula>
一个
创建。数据包报头进行编码的多播树路径信息(节点id)使用Prufer序列[
26]。节点id Prufer序列(
26)代表内部节点路径(非叶节点)。收到消息包,每个子节点,这是在Prufer序列,序列进行解码时,创建一个施泰纳子树,并将新Prufer序列编码数据包报头。例如,一个节点<我nl我ne- - - - - -for米ula>
B
接收<我nl我ne- - - - - -for米ula>
{
B
,
B
,
C
}
因为序列,知道这是一个转发节点<我nl我ne- - - - - -for米ula>
B
在序列。的节点<我nl我ne- - - - - -for米ula>
B
解码序列并创建一个施泰纳没有节点的子树<我nl我ne- - - - - -for米ula>
一个
。在那之后,节点<我nl我ne- - - - - -for米ula>
B
创建和广播<我nl我ne- - - - - -for米ula>
{
B
,
C
}
序列。数据包转发,直到它到达叶节点。当节点<我nl我ne- - - - - -for米ula>
D
接收数据包,<我nl我ne- - - - - -for米ula>
D
不是在一个序列。因此,<我nl我ne- - - - - -for米ula>
D
知道<我nl我ne- - - - - -for米ula>
D
是一个叶节点,并停止转发数据包。树编码的复杂性<我nl我ne- - - - - -for米ula>
O
(
(
p
一个
t
h
l
e
n
g
t
h
)
2
)
在每个子节点。
现有的源组播路由协议假定每个节点维护整个网络拓扑信息使用位置的洪水。每个多播根节点构造一个多播树给定目的地使用网络拓扑。然而,周期性位置洪水是昂贵的,因为它消耗了很多能源,特别是对于大型网络。节省的成本建立一个多播树,在渴望中,每个多播根节点(或会合点(RP))获得路径信息在多播成员建立阶段目标而不是位置的洪水。每个连接请求消息携带其向多播路径信息连同它的根节点位置信息。例如,当一个成员节点连接通过使用地理单播,每个中间节点的路径添加连接包的位置信息。多播根最终接收反向地理信息到目的地的最短路径。创建一个多播树按需使用的路径信息<我nl我ne- - - - - -for米ula>
O
(
n
o
。
p
一个
t
h
年代
)
。根据每个加入消息获得的路径信息,多播根进一步优化的组播树识别常见的路径段的目的地。
计划工作如下。第一个目的地节点,<我nl我ne- - - - - -for米ula>
d
年代
t
,发送一个消息,<我nl我ne- - - - - -for米ula>
j
o
我
n
米
年代
g
对源,<我nl我ne- - - - - -for米ula>
年代
r
c
。加入消息传递到下一个转发节点的邻居节点地理位置接近<我nl我ne- - - - - -for米ula>
年代
r
c
。如算法
1,一个中间节点维护一个临时多播状态表命名<我nl我ne- - - - - -for米ula>
米
年代
t
一个
t
e
的信息的<我nl我ne- - - - - -for米ula>
d
年代
t
年代
e
g
,<我nl我ne- - - - - -for米ula>
h
o
p
C
n
t
]。<我nl我ne- - - - - -for米ula>
d
年代
t
年代
e
g
是一个目标节点id列表,<我nl我ne- - - - - -for米ula>
h
o
p
C
n
t
最长的从中间节点跳数的目的地列表。当一个<我nl我ne- - - - - -for米ula>
j
o
我
n
米
年代
g
到达一个中间节点,如果任何<我nl我ne- - - - - -for米ula>
d
年代
t
年代
e
g
在<我nl我ne- - - - - -for米ula>
米
年代
t
一个
t
e
表包含相同的<我nl我ne- - - - - -for米ula>
d
年代
t
ID和现有的<我nl我ne- - - - - -for米ula>
h
o
p
C
n
t
大于新加入信息,加入消息将会下降。例如,在图
3,如果目标节点<我nl我ne- - - - - -for米ula>
j
已经加入多播组,中间节点<我nl我ne- - - - - -for米ula>
d
将保持目标节点<我nl我ne- - - - - -for米ula>
我
和<我nl我ne- - - - - -for米ula>
j
在<我nl我ne- - - - - -for米ula>
d
年代
t
年代
e
g
。
当加入消息的目的地节点<我nl我ne- - - - - -for米ula>
我
到达中间节点<我nl我ne- - - - - -for米ula>
d
,<我nl我ne- - - - - -for米ula>
d
将停止发送加入消息的吗<我nl我ne- - - - - -for米ula>
米
年代
t
一个
t
e
表包含<我nl我ne- - - - - -for米ula>
我
,<我nl我ne- - - - - -for米ula>
h
o
p
C
n
t
大于加入的跳数信息。如果<我nl我ne- - - - - -for米ula>
h
o
p
C
n
t
小于跳数,新加入的消息的<我nl我ne- - - - - -for米ula>
d
年代
t
年代
e
g
和<我nl我ne- - - - - -for米ula>
h
o
p
C
n
t
将更新新的路径信息和跳数,分别。如果<我nl我ne- - - - - -for米ula>
d
年代
t
ID是新的,将添加一个新的条目<我nl我ne- - - - - -for米ula>
米
年代
t
一个
t
e
表。中间节点将位置信息添加到加入消息并将加入消息转发到下一个转发节点向<我nl我ne- - - - - -for米ula>
年代
r
c
节点。的<我nl我ne- - - - - -for米ula>
米
年代
t
一个
t
e
表将被暂时在维护会员建立阶段。的<我nl我ne- - - - - -for米ula>
米
年代
t
一个
t
e
表一个中间节点上帮助<我nl我ne- - - - - -for米ula>
年代
r
c
节点进行压缩路径信息的目的地,而不是用于数据包转发。
一次<我nl我ne- - - - - -for米ula>
j
o
我
n
米
年代
g
收到的是<我nl我ne- - - - - -for米ula>
年代
r
c
节点,构造一个多播树路径段开始使用最多的目的地,直到它包括所有的目的地。例如,在图
3,当<我nl我ne- - - - - -for米ula>
年代
r
c
节点<我nl我ne- - - - - -for米ula>
R
已收到加入信息吗<我nl我ne- - - - - -for米ula>
h
和<我nl我ne- - - - - -for米ula>
j
在序列中,<我nl我ne- - - - - -for米ula>
年代
r
c
节点可以识别常见的路径段<我nl我ne- - - - - -for米ula>
{
R
,
d
}
从路径<我nl我ne- - - - - -for米ula>
{
R
,
d
,
e
,
f
,
g
,
h
}
和<我nl我ne- - - - - -for米ula>
{
R
,
d
,
我
,
j
}
。
3.2.2。路由路径编码
在无状态基于源代码的多播路由协议中,多播根节点编码到包的组播树头使用树结构算法如Prufer序列的算法。编码的多播树信息将在每个中间节点解码和编码的子树在发送数据包之前的条目。例如,Prufer序列算法<我nl我ne- - - - - -for米ula>
O
(
p
一个
t
h
l
e
n
g
t
h
)
包的头大小。然而,多播树编码和解码的复杂性<我nl我ne- - - - - -for米ula>
O
(
(
p
一个
t
h
l
e
n
g
t
h
)
2
)
在每一个中间节点。为了避免昂贵的编码和解码开销在每个中间节点,急切的序列化的子树路径信息使用一个电感电容电阻测量(左子右兄弟姐妹)二叉树(
27]。树序列需要额外的分隔符,它可能导致一个稍微比另一个大的数据包大小源多播路由协议。例如,相比纯源生成树的多播方案<我nl我ne- - - - - -for米ula>
n
的节点数量,编码率<我nl我ne- - - - - -for米ula>
(
n
- - - - - -
2
)
Prufer序列的算法中使用DSM可以略优于我们LCRS-based序列化路径编码算法(<我nl我ne- - - - - -for米ula>
n
−1 +分支分隔符)。然而,渴望是为了减少计算开销在每个中间节点。急切的计算复杂性<我nl我ne- - - - - -for米ula>
O
(
1
)
而Prufer序列算法<我nl我ne- - - - - -for米ula>
O
(
n
2
)
。
算法
2,
3,
4展示如何序列化算法工作。首先,将原始的编码算法<我nl我ne- - - - - -for米ula>
n
必要多播树的电感电容电阻测量(左孩子和兄弟姐妹)二叉树。从根节点多播,最左侧的孩子成为一个节点的左子新二叉树,和大多数兄弟成为新的二进制的右子树。例如,原来的树图
3变成了新的电感电容电阻测量二叉树图
4。第二,序列化的路径信息是由沿着电感电容电阻测量的二叉树的顺序”兄弟,然后子节点。”如图
4,序列化的路径<我nl我ne- - - - - -for米ula>
{
d
,
我
,
j
,
e
,
f
,
g
,
h
,
一个
,
c
,
b
}
是由穿过电感电容电阻测量二叉树的一些额外的分隔符。希望使用一个固定大小的块编码状态信息的信息。序列化的路径提出了连续信息块。信息块可以作为一个节点ID、位置坐标,或一个分隔符。图
7显示了一个2字节分隔符格式的例子。分隔符可以区别于其他信息块通过设置1最高有效位的信息块。每个分隔符有两个7位偏移量。00节点ID块可以被设置在左2位。一个2字节的信息块,最大数量的节点id可以约16 K(只使用14位)。分支定界符插入旁边原来的树枝序列化的路径来表示原来的树的兄弟姐妹的关系。也就是说,每个兄弟节点的子树信息由分支分隔符分隔。
<大胆>算法2:< /大胆>路由路径编码。
输入:源节点
输出:路径
(1)<米ono年代p一个ce>
p
长沙=<我nl我ne- - - - - -for米ula>
∅
此外,积极优化编码数据包大小自适应使用分支地理信息公共源路由路径片段可以看到在15到21行算法
3。识别长nonbranchingrouting路径段的分支位置并使用源路由信息,而不是许多沿着路径节点id。长nonbranchingpath段标识序列化路径创建期间如果有超过一个节点之后的三个孩子;也就是说,child-grandchild-great孙子。序列化的路径最小化使用位置信息(例如,<我nl我ne- - - - - -for米ula>
x
和<我nl我ne- - - - - -for米ula>
y
坐标),而不是把整个路径中节点id。正如我们看到的算法
4发现,如果一个转发节点位置信息(分隔符值为01)序列化的路径,它使用一个地理单播到下一个分支节点。虽然它需要每一个转发节点运行地理单播算法,计算复杂性是最小的。我们的名字<我t一个l我c>
长路径优化随着技术减少数据包大小使用<我nl我ne- - - - - -for米ula>
x
和<我nl我ne- - - - - -for米ula>
y
长nonbranchingpath坐标。
3.2.3。包转发
当接收到多播数据包转发节点,节点选择的序列化的路径显示自己的子树分支定界符信息。图
5说明了如何利用序列化的路径信息<我nl我ne- - - - - -for米ula>
R
来<我nl我ne- - - - - -for米ula>
g
转发跟踪短路径节点上。例如,节点<我nl我ne- - - - - -for米ula>
d
可以新建一个序列化的路径的子树通过检查从第一个分隔符(偏移量<我nl我ne- - - - - -for米ula>
R
)。<我nl我ne- - - - - -for米ula>
D
e
l
(
R
)
分节点<我nl我ne- - - - - -for米ula>
d
和节点<我nl我ne- - - - - -for米ula>
一个
,转发节点。节点<我nl我ne- - - - - -for米ula>
d
认识到它是一个转发节点<我nl我ne- - - - - -for米ula>
D
e
l
(
R
)
。通过使用线3 - 7的算法
5、节点<我nl我ne- - - - - -for米ula>
d
提取下一子树的路径,<我nl我ne- - - - - -for米ula>
{
D
e
l
(
d
)
,
我
,
j
,
e
,
f
,
g
}
,广播路径。在这种情况下,没有额外的计算开销,除了简单的包截断接下来的子树,在每一个转发节点和计算开销。