中南大学计算机网络实验报告

  • 格式:doc
  • 大小:567.81 KB
  • 文档页数:11

计算机网络实验报告专业班级:信安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<<"请输入路径的权值(用邻接矩阵表示拓扑图的方式):"<<endl;for(int i=0;i<num;i++){arcs[i]=new int[num];for(int j=0;j<num;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<<endl;for(int cnt=0;cnt<vexnum;cnt++){//进行主要的循环之前的初始化visit[cnt]=FALSE;RL[cnt]=arcs[v0][cnt];if(RL[cnt]<INFINITY){R[cnt][0]=v0;R[cnt][1]=cnt;}}//forRL[v0]=0;//源节点的标志visit[v0]=TRUE;//初始化已经找到最短路径的点集合for(int i=1;i<vexnum;i++){//dijkstra算法的主要循环int min=INFINITY;int v=v0;for(int j=0;j<vexnum;j++)if(!visit[j])if(RL[j]<min){v=j;min=RL[j];}visit[v]=TRUE;//离v0顶点最近的v加入到s集for(int k=0;k<vexnum;k++)//更新当前最短路径及距离if(!visit[k]&&(min+arcs[v][k]<RL[k])){//modify shortest r[j] and RL[j]RL[k]=min+arcs[v][k];updateRouteLen(R[k],R[v],k,vexnum);}//if}//fordelete[] visit;visit=NULL;}//Dijkstra【运行结果】1.生成的连接矩阵和路由表(两个txt文件)Graph.txt拓扑图的邻接矩阵2 3 8 43 4 5 92 3 4 13 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等集成开发环境编写网络程序的方法;4.掌握客户/服务器(C/S)应用的工作方式;5.学习网络中进程之间通信的原理和实现方法;6.理解单播、组播和广播的原理并比较其不同之处;7.要求本机既是客户端又是服务器端;【实验内容】所编写的程序应具有如下功能:1.具有点对点通信功能,任意客户端之间能够发送消息;2.具有群组通信功能,客户端能够向组内成员同时发送消息,其他组成员不能收到;3.具有广播功能,客户端能够向所有其他成员广播消息;【编程语言和环境】Java+Eclipse【实验内容与实现原理】服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。

客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。

客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。

Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。

要学Internet上的TCP/IP网络编程,必须理解Socket 接口。

Socket接口设计者最先是将接口放在Unix操作系统里面的。

如果了解Unix系统的输入和输出的话,就很容易了解Socket了。

网络的Socket数据传输是一种特殊的I/O,Socket 也是一种文件描述符。

Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。

【实现过程】1.流程图// 客户端聊天界面JPanel btn2Panel = new JPanel();btn2Panel.setLayout(new FlowLayout(FlowLayout.RIGHT));this.add(btn2Panel, BorderLayout.SOUTH);JButton closeBtn = new JButton("关闭");closeBtn.setToolTipText("退出整个程序");btn2Panel.add(closeBtn);JButton submitBtn = new JButton("发送");submitBtn.setToolTipText("按Enter键发送消息");btn2Panel.add(submitBtn);sendPanel.add(btn2Panel, BorderLayout.SOUTH);//在线用户列表面板JPanel onlineListPane = new JPanel();onlineListPane.setLayout(new BorderLayout());onlineCountLbl = new JLabel("在线用户列表(1)");onlineListPane.add(onlineCountLbl, BorderLayout.NORTH);//服务器界面this.setTitle("服务器启动");//设置服务器启动标题this.setBounds((DataBuffer.screenSize.width - 500)/2,(DataBuffer.screenSize.height - 375)/2, 500, 375);this.setLayout(new BorderLayout());JPanel panel = new JPanel();Border border = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);panel.setBorder(BorderFactory.createTitledBorder(border,"服务器监控", TitledBorder.LEFT,TitledBorder.TOP));this.add(panel, BorderLayout.NORTH);JLabel label = new JLabel("服务器当前监听在: "+ DataBuffer.serverSocket.getLocalPort() + " 端口");panel.add(label);JButton exitBtn = new JButton("关闭服务器");//关闭关闭服务器按钮panel.add(exitBtn);【实验结果】1.服务器界面2.用户登录界面3初始化界面4点对点通信5.群聊计算机网络实验报告0909122820周建权6.广播【实验总结】1.网络编程就是通过计算机网络与其他程序进行通信的程序,Socket编程是网络编程的主流工具。