中南大学计算机网络实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机网络实验报告
专业班级:信安1202班
指导老师:***
******
学号:**********
实验二网络路由层协议模拟实验
网络路由算法是路由器工作的核心,本实验针对因特网常用的距离向量路由算法和链路状态路由算法进行模拟实现,进一步掌握其工作原理及其相关性能。
【实验目的和要求】
1.掌握VB、VC++、VS或JA V A等集成开发环境编写路由仿真程序的方法;
2.理解并掌握距离向量路由协议和链路状态路由协议的工作原理。
【实验内容】
2.实现链路状态路由算法的模拟。
基本要求(动态生成网络拓扑图,节点间的距离随机生成。每个节点生成自己的链路状态分组,依据收到的链路状态表得到整体网络结构,在得到的整体网络结构上用最短路径算法,生成每个节点的路由表)
进一步的要求:可以将模拟实验的每个节点程序部署在不同的电脑上,通过socket通信程序完成路由表信息或者链路状态分组的发送(与实验三结合)。请用两台机器虚拟成多个网络节点(一台机器上开启多个通信进程,每个进程虚拟成一个节点),完成每个虚拟节点的路由表生成,进而按照路由表转发数据包。
【编程语言和环境】
1.编程语言C++
2.编程环境Windows(MS Visual系列,VC/VB/;)
【基本原理】
在一个链路状态路由选择中,一个结点检查所有直接链路的状态,并将所得的状态信息发送给网上所有的其他的结点,而不仅仅是发给那些直接相连的结点。每个节点都用这种方式,所有其他的结点从网上接收包含直接链路状态的路由信息。
每当链路状态报文到达时,路由结点便使用这些状态信息去更新自己的网路拓扑和状态“视野图”,一旦链路状态发生改变,结点对跟新的网络图利用Dijkstra最短路径算法重新计算路由,从单一的报源发出计算到达所有的结点的最短路径。
【实现过程】
1.流程图
2.部分代码
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 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 delete[] visit; visit=NULL; }//Dijkstra 【运行结果】 1.生成的连接矩阵和路由表(两个txt文件) Graph.txt 拓扑图的邻接矩阵 2 3 8 4 3 4 5 9 2 3 4 1 3 9 3 1 注: 10000表示无穷大 Route.txt 目标节点:0 最短路径是: 2--->0 最短路径长度:2 ********************* 目标节点:1 最短路径是: 2--->1 最短路径长度:3 ********************* 目标节点:3 最短路径是: 2--->3 最短路径长度:1 ********************* 2.运行界面截图 【实验总结】 1.算法优缺点分析 优点:路由信息的一致性好,坏消息也一样传播得快;状态分组的长度较短,仅包含到邻接点的距离、序号和年龄等,与网络规模关系不大,传输所耗用的网络带宽不大,此外,状态分组的扩散,由于年龄参数的设定,不会无限制扩散,所以可适用于大型网络。 缺点:每个路由器需要有较大的存储空间,用以存储所收到的每一个节点的链路状态分组;计算工作量大,每次都必须计算最短路径。 2.实验过程心得体会 在实验的过程中我们要培养自己的独立分析问题,和解决问题的能力。培养这种能力的前题是你对每次实验的态度。如果你在实验这方面很随便,抱着等老师教你怎么做,拿同学的报告去抄,尽管你的成绩会很高,但对将来工作是不利的。所以尽量还是要自己做而不是到处抄袭。 实验三Socket通信实验 网络编程是通过使用套接字来达到进程间通信目的的编程,Socket编程是网络编程的主流工具,Socket API是实现进程间通信的一种编程设施,也是一种为进程间提供底层抽象的机制,提供了访问下层通信协议的大量系统调用和相应的数据结构。本实验利用Socket API编写网络通信程序,具体实验要求及内容如下。 【实验目的和要求】 3.掌握VB、VC++、VS或JA V A等集成开发环境编写网络程序的方法;