1.SPF算法原理:
构造一棵树[a],使n个节点之间的总长最小(树是一个在每两个节点之间仅有一条路径的图)。
在我们给出的构造过程中,分枝被分成3个集合:
I 被明确分配给构造中的树的分枝(它们将在子树中);
Ⅱ 这个分枝的隔壁分枝被添加到集合I;
Ⅲ 剩余的分枝(抛弃或不考虑)。
节点被分成2个集合:
A 被集合I中的分枝连接的节点
B 剩佘的节点(集合Ⅱ中有且仅有一个分枝将指向这些节点中的每一个节点)。
· 树数据库—树数据库用来表示集合I。通过向数据库中添加分枝实现向最短路径树中添加链路(分枝)。当算法完成时,这个数据库将可以描述最短路径树。
· 候选对象数据库—候选对象数据库对应集合Ⅱ。按照规定的顺序从链路状态数据库向该列表中复制链路,作为向树中添加的候选对象。
· 链路状态数据库—按照前面的描述,这里保存所有链路,这个拓扑数据库对应集合Ⅲ。
这里的节点是路由器。这些路由器被明确地用路由器链路三元组(路由器ID、邻居ID、代价)中的邻居ID表示。集合A由树数据库中链路所连接的路由器组成。集合B是所有其他的路由器。由于全部要点是发现到每台路由器的最短路径,所以当算法结束时集合B应该为空。
步骤1 路由器初始化树数据库,将自己作为树的根。这表明路由器作为它自己的邻居,代价为0。
步骤2 在链路状态数据库中,所有描述通向根路由器邻居链路的三元组被添加到候选对象数据库中。
步骤3 计算从根到每条链路的代价,候选对象数据库中代价最小的链路被移到树数据库中。
如果两个或更多的链路离根的最短代价相同,选择其中一条。
步骤4 检查添加到树数据库中的邻居ID。
除了邻居ID已在树数据库中的三元组之外,链路状态数据库中描述路由器邻居的三元组被添加到候选对象数据库中。
步骤5 如果候选对象数据库中还有剩余的表项.回到第3步。如果候选数据库为空,那么终止算法。
在算法终止时,在树数据库中,每个单一的邻居ID表项将表示1台路由器,到此最短路径树构造完毕。
2.SPF算法建树过程示例:
感谢诺达汤sir,感谢思科资源,成长进行中···