路由算法
一 链路状态路由算法的具体实现
(1)链路状态路由算法的原理
链路状态路由协议是目前使用最广的一类域内路由协议。它采用一种“拼图”的设计策略,
即每个路由器将它到其周围邻居的链路状态向全网的其他路由器进行广播。这样,一个路由
器收到从网络中其他路由器发送过来的路由信息后,它对这些链路状态进行拼装,最终生成
一个全网的拓扑视图,近而可以通过最短路径算法来计算它到别的路由器的最短路径。运行
链路状态路由协议的路由器, 每台路由器公在其接口的状态发生变化时,才将变化后的状态
发送给其他所有路由器,每台路由器都使用收到的信息重新计算前往每个网络的最佳路径,
然后将这些信息存储到自己的路由选择表中。
链路状态路由算法背后的思想非常简单,可以用 5 个基本步骤加以描述。
1、发现他的邻接点,并知道其网络的地址。
2、测量到各邻接点的延迟或开销。
3、构造一个分组,分组中包含所有他刚刚收到的信息。
4、将这个分组发送给其他的路由器。
5、计算出到每一个其他路由器的最短路径。例如,每个路由器运行 Dijkstra 算法就可以找
从它到每一个其他路由器的最短路径。
(2)程序源代码(c++语言,核心算法为迪杰斯特拉算法)
#include <iostream>
#include <fstream>
#define routeTable "routeTable.txt"
using namespace std;
const int MAX_NODES = 1024; //能接受的最大路由数
const int INFINITY = 100000; //权值
int dist[MAX_NODES][MAX_NODES]; //用于存放网络拓扑结构连接矩阵
int static Vnums; //总的节点(路由)数
void initDist(){ //初始化邻接矩阵
for(int i = 0; i < MAX_NODES; i ++)
for(int j = 0; j < MAX_NODES; j ++)
dist[i][j] = 0;
}
void creatRouteMap(int Vnums){ //创建网络拓扑结构的邻接矩阵 ,1.创建路由表函数
for(int i = 0; i < Vnums; i ++)
{
cout << "输入第" << i << "个节点" ;
for(int j = 0; j < Vnums; j ++)
{
cout <<"的第"<< j << "个节点的权值:" ;