计算机网络课程设计
题
学
专
班
学
姓
目 链路状态路由算法的实现
院 计算机学院
业 软件工程
别
号
名
2017 年 6 月 25 日
一.课程相关基础知识
(1)链路状态路由选择协议的定义
又称为最短路径优先协议,它基于 Edsger Dijkstra 的最短路径优先(SPF)
算法。它比距离矢量路由协议复杂得多,但基本功能和配置却很简单,甚至算法
也容易理解。路由器的链路状态的信息称为链路状态,包括:接口的 IP 地址和
子网掩码、网络类型(如以太网链路或串行点对点链路)、该链路的开销、该链
路上的所有的相邻路由器;
(2)链路状态路由算法的原理
链路状态路由协议是目前使用最广的一类域内路由协议。它采用一种“拼
图”的设计策略,即每个路由器将它到其周围邻居的链路状态向全网的其他路
由器进行广播。这样,一个路由器收到从网络中其他路由器发送过来的路由信
息后,它对这些链路状态进行拼装,最终生成一个全网的拓扑视图,近而可以
通过最短路径算法来计算它到别的路由器的最短路径。运行链路状态路由协议
的路由器, 每台路由器公在其接口的状态发生变化时,才将变化后的状态发送
给其他所有路由器,每台路由器都使用收到的信息重新计算前往每个网络的最
佳路径,然后将这些信息存储到自己的路由选择表中。
(3)路由协议
链路状态路由协议是层次式的,网络中的路由器并不向邻居传递“路由项”,
而是通告给邻居一些链路状态。与距离矢量路由协议相比,链路状态协议对路由
的计算方法有本质的差别。距离矢量协议是平面式的,所有的路由学习完全依靠
邻居,交换的是路由项。链路状态协议只是通告给邻居一些链路状态。运行该路
由协议的路由器不是简单地从相邻的路由器学习路由,而是把路由器分成区域,
收集区域的所有的路由器的链路状态信息,根据状态信息生成网络拓扑结构,每
一个路由器再根据拓扑结构计算出路由。
(3)路由协议要求
现代链路状态路由协议设计旨在尽量降低对内存、CPU 和带宽的影响。使用
并配置多个区域可减小链路状态数据库。划分多个区域还可限制在路由域内泛洪
的链路状态信息的数量,并可仅将 LSP 发送给所需的路由器。
二.设计思路
简单网络拓扑
链路状态路由算法背后的思想非常简单,可以用 5 个基本步骤加以描述。
1、发现他的邻接点,并知道其网络的地址。
2、测量到各邻接点的延迟或开销。
3、构造一个分组,分组中包含所有他刚刚收到的信息。
4、将这个分组发送给其他的路由器。
5、计算出到每一个其他路由器的最短路径。例如,每个路由器运行 Dijkstra
算法就可以找从它到每一个其他路由器的最短路径。
三.程序流程图
创建并初始化网络拓扑
图
把拓扑图中的邻接矩阵
保存到文件中
使用迪杰斯特拉算法
打印得到的最短路径表
向 Route.txt 写数据
四.系统结构
手动输入拓扑图节点数目,输入路径权值,然后运用算法查找最短路径。然后可以生
成存储拓扑图和路由表的 txt 文档。
拓扑图的邻接矩阵
0
1
3
7
1
0
1
111
3
1
0
2
7
111
2
0
注:
111 表示无穷大
五.关键代码设计
拓扑图用邻接矩阵方式表示,手动输入。采用迪杰斯特拉算法
迪杰斯特拉算法
1 int v0;
//定义源节点
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
bool * visit=new bool [vexnum];//已经确定最短路径的节点的集合
cout<<"请输入起始节点:";
cin>>v0;
cout<
26
27
28
29
30
31
32
33
34
35
36
37
min=RL[j];
}
visit[v]=TRUE;
//离 v0 顶点最近的 v 加入到 s 集
for(int k=0;k");
outfile<");//
六.实现界面和功能以及屏幕截图
七.调试过程中遇到的问题和解决的方法
拓扑图中两个节点之间没有连线不是用 0 来表示,而是用无限大来表示。
八.总结(程序中待解决的问题及改进方向以及心得体会等,还可指出今后进
一步进行研究的展望与设想)
完成这个课程设计,我再一次熟悉了路由选择的最短路径算法,迪杰斯特拉算法。此
算法的优点是:比距离矢量算法收敛速度快,没有路由环路。缺点是:对 CPU 和内存要求
高,占用网络资源。当网络中的路由较多时,每个路由计算最短路径的时间将大大增加,
从而收敛变慢。今后可以尝试用其他算法来选择路径,也可以尝试用可视化界面来实现。