计算机网络实验报告0909122820周建权
第
第 PAGE \* MERGEFORMAT 1 页 共 NUMPAGES \* MERGEFORMAT 11 页
计算机网络实验报告
专业班级:信安1202班
指导老师:王伟平
姓 名:周建权
学 号:0909122820
实验二 网络路由层协议模拟实验
网络路由算法是路由器工作的核心,本实验针对因特网常用的距离向量路由算法和链路状态路由算法进行模拟实现,进一步掌握其工作原理及其相关性能。
【实验目的和要求】
掌握VB、VC++、VS或JAVA等集成开发环境编写路由仿真程序的方法;
理解并掌握距离向量路由协议和链路状态路由协议的工作原理。
【实验内容】
2.实现链路状态路由算法的模拟。
基本要求(动态生成网络拓扑图,节点间的距离随机生成。每个节点生成自己的链路状态分组,依据收到的链路状态表得到整体网络结构,在得到的整体网络结构上用最短路径算法,生成每个节点的路由表)
进一步的要求:可以将模拟实验的每个节点程序部署在不同的电脑上,通过socket通信程序完成路由表信息或者链路状态分组的发送(与实验三结合)。请用两台机器虚拟成多个网络节点(一台机器上开启多个通信进程,每个进程虚拟成一个节点),完成每个虚拟节点的路由表生成,进而按照路由表转发数据包。
【编程语言和环境】
编程语言C++
编程环境Windows(MS Visual系列,VC/VB/VS.Net;)
【基本原理】
在一个链路状态路由选择中,一个结点检查所有直接链路的状态,并将所得的状态信息发送给网上所有的其他的结点,而不仅仅是发给那些直接相连的结点。每个节点都用这种方式,所有其他的结点从网上接收包含直接链路状态的路由信息。
每当链路状态报文到达时,路由结点便使用这些状态信息去更新自己的网路拓扑和状态“视野图”,一旦链路状态发生改变,结点对跟新的网络图利用Dijkstra最短路径算法重新计算路由,从单一的报源发出计算到达所有的结点的最短路径。
【实现过程】
1.流程图
输入数据 初始化连接矩阵 迪杰斯特拉算法 打印路径
部分代码
void createGraph(int *arcs[],int & num){
//创建并初始化网络拓扑图
cout<
for (int i=0;i
arcs[i]=new int [num];
for(int j=0;j
cin>>arcs[i][j];
}
}
void Dijkstra(int * arcs[],int * R[],int RL[],int vexnum){
//迪杰斯特拉算法
int v0; //定义源节点
bool * visit=new bool [vexnum];//已经确定最短路径的节点的集合
cout<
cin>>v0;
cout<
for(int cnt=0;cnt
visit[cnt]=FALSE;
RL[cnt]=arcs[v0][cnt];
if(RL[cnt]
R[cnt][0]=v0;
R[cnt][1]=cnt;
}
} //for
RL[v0]=0;//源节点的标志
visit[v0]=TRUE; //初始化已经找到最短路径的点集合
for(int i=1;i
int min=INFINITY;
int v=v0;
for(int j=0;j
if(!visit[j])
if(RL[j]
v=j;
min=RL[j];
}
visit[v]=TRUE; //离v0顶点最近的v加入到s集
for(int k=0;k
if(!visit[k]&&(min+arcs[v][k]
//modify shortest r[j] and RL[j]
RL[k]=min+arcs[v][k];
updateRouteLen(R[k],R[v],k,vexnum);
}//if
}//for
de