当前位置:文档之家› 计算机网络实验报告

计算机网络实验报告

for(i = 0; i < Vnums; i ++) //找到与永久标定节点直接相连的节点,并改变其权值
{
if( (dist[k][i] != 0) && (state[i].lable == false))
{ //与源节点直接相连并且不是同一个源节点k源节点
if(state[k].length + dist[k][i] < state[i].length)
cout << s <<"最小距离="<<min<<"\n";
}
4.实验设备与实验环境
实验设备:笔记本电脑一台
实验环境:Visual C++ 6.0
5.实验总结
此次完成的路由算法是链路状态路由算法,编程代码上参考了网上的资料,但总体上把握很清楚,因为这个存储结构及dijkstra算法在数据结构中已经练习过很多次,之前也有完成相应的代码,所以在完善成链路状态路由算法的时候也是起到了相当大的作用,主要是对该算法进一步的了解及剖析,然后才能完成这个完善过程。但总体来说,其实并不是特别完美,只是一个简化版的实现,但主要是完成了实验的规定内容及增强了对链路状态路由算法的了解。希望以后接触到这个方面的时候能更加熟练,且进一步完成今日的工作。
链路状态路由算法背后的思想非常简单,可以用5个基本步骤加以描述。
1、发现他的邻接点,并知道其网络的地址。
2、测量到各邻接点的延迟或开销。
3、构造一个分组,分组中包含所有他刚刚收到的信息。
4、将这个分组发送给其他的路由器。
5、计算出到每一个其他路由器的最短路径。例如,每个路由器运行Dijkstra算法就可以找从它到每一个其他路由器的最短路径。
实验一网络路由层模拟协议
1.实验目的与要求
1.掌握VB、VC++、VS或JAVA等集成开发环境编写路由仿真程序的方法;
2.理解并掌握距离向量路由协议和链路状态路由协议的工作原理。
2.实验内容与实现原理
1.实验内容(1,2任选其一实现)
1.模拟距离向量路由算法的路由表交换过程,演示每轮交换后路由表的变化。
{
if((state[i].lable == false) && (state[i].length < min)) //找到与永久标点相邻的节点
{
min = state[i].length;
k = i;
}
}
state[k].lable = true; //新的永久标点也变为访问过
}while(k!=s); //新的永久标点是否为目的节点,不是继续循环
(附源代码)
#include <iostream>
#include <fstream>
#define routeTable "routeTable.txt"
using namespace std;
3.实验具体设计实现及结果
(含流程图及关键代码说明)
5 2 6
4 1
2 3 4
上图为实验截图所用的网络图,图中的每个节点代表一个路由器,每条边代表一条通信线路或链路。为了选择一对给定路由器之间的路由,算法只需要在图中找出它们之间的最短路径。
流程图
写入增加删除修改dijkstra算法以流的方式写入文件展示
bool lable; //访问状态false未被访问过,true访问过
}state[MAX_NODES];
int i,k,min,print;
struct state *p;
for(p = &state[0]; p < &state[Vnums]; p ++) //初始化节点数据
{
p->predecessor = -1;//类似存下一跳
矩阵内存储的路由信息
下为功能展示截图:
dijkstra算法代码:
void dijkstra(int s, int t, int path[]){ //迪杰斯特拉算法s目的节点t源节点
struct state{ //存放节点数据
int predecessor; //父节点
int length; //权值,存放最小权值
基本要求(动态生成网络拓扑图,节点间的距离随机生成。从初始路由表开始,进行交换路由表,演示每轮交换后的路由表的变化。观察和讨论多少轮交换后路由表稳定)
2.实现链路状态路由算法的模拟。
基本要求(动态生成网络拓扑图,节点间的距离随机生成。每个节点生成自己的链路状态分组,依据收到的链路状态表得到整体网络结构,在得到的整体网络结构上用最短路径算法,生成每个节点的路由表)
进一步的要求:可以将模拟实验的每个节点程序部署在不同的电脑上,通过socket通信程序完成路由表信息或者链路状态分组的发送(与实验三结合)。请用两台机器虚拟成多个网络节点(一台机器上开启多个通信进程,每个进程虚拟成一个节点),完成每个虚拟节点的路由表生成,进而按照路由表转发数据包。
2.实现原理
链路状态路由协议是目前使用最广的一类域内路由协议。它采用一种“拼图”的设计策略,即每个路由器将它到其周围邻居的链路状态向全网的其他路由器进行广播。这样,一个路由器收到从网络中其他路由器发送过来的路由信息后,它对这些链路状态进行拼装,最终生成一个全网的拓扑视图,近而可以通过最短路径算法来计算它到别的路由器的最短路径。运行链路状态路由协议的路由器,每台路由器公在其接口的状态发生变化时,才将变化后的状态发送给其他所有路由器,每台路由器都使用收到的信息重新计算前往每个网络的最佳路径,然后将这些信息存储到自己的路由选择表中。
{
state[i].predecessor = k; //记录节点
cout << k << "->";
state[i].lபைடு நூலகம்ngth = state[k].length + dist[k][i]; //路径长度总和
}
}
}
k = 0;
min = INFINITY;
for( i = 0; i < Vnums; i ++) //找到与永久标定节点相邻的节点,并把与最小权值的相邻点改为永久标点
p->length = INFINITY; //=100000
p->lable = false;
}
state[t].length = 0; //源节点的权值改为0
state[t].lable = true;
k = t;
cout << "最短路径为:" << endl;
do{ //dowhile先是把所有最短路径连起来
相关主题