计算机网络实验报告
专业班级:信安1202班 指导老师:*** * *****
学 号:**********
第 1 页 共 11 页
计算机网络实验报告0909122820周建权
实验二 网络路由层协议模拟实验
网络路由算法是路由器工作的核心,本实验针对因特网常用的距离向量路由算法和链路状态路由算法进行模拟实现,进一步掌握其工作原理及其相关性能。
【实验目的和要求】
1. 掌握VB、VC++、VS或JAVA等集成开发环境编写路由仿真程序的方法; 2. 理解并掌握距离向量路由协议和链路状态路由协议的工作原理。
【实验内容】
2.实现链路状态路由算法的模拟。
基本要求(动态生成网络拓扑图,节点间的距离随机生成。每个节点生成自己的链路状态分组,依据收到的链路状态表得到整体网络结构,在得到的整体网络结构上用最短路径算法,生成每个节点的路由表)
进一步的要求:可以将模拟实验的每个节点程序部署在不同的电脑上,通过socket通信程序完成路由表信息或者链路状态分组的发送(与实验三结合)。请用两台机器虚拟成多个网络节点(一台机器上开启多个通信进程,每个进程虚拟成一个节点),完成每个虚拟节点的路由表生成,进而按照路由表转发数据包。
【编程语言和环境】
1. 编程语言C++
2. 编程环境Windows(MS Visual系列,VC/VB/VS.Net;)
【基本原理】
在一个链路状态路由选择中,一个结点检查所有直接链路的状态,并将所得的状态信息发送给网上所有的其他的结点,而不仅仅是发给那些直接相连的结点。每个节点都用这种方式,所有其他的结点从网上接收包含直接链路状态的路由信息。
每当链路状态报文到达时,路由结点便使用这些状态信息去更新自己的网路拓扑和状态“视野图”,一旦链路状态发生改变,结点对跟新的网络图利用Dijkstra最短路径算法重新计算路由,从单一的报源发出计算到达所有的结点的最短路径。
【实现过程】
1.流程图
输入数据 初始化连接矩阵 迪杰斯特拉算法 打印路径
第 2 页 共 11 页
计算机网络实验报告0909122820周建权
2.部分代码
void createGraph(int *arcs[],int & num){ //创建并初始化网络拓扑图
cout<<\"请输入路径的权值(用邻接矩阵表示拓扑图的方式):\"< void Dijkstra(int * arcs[],int * R[],int RL[],int vexnum){ //迪杰斯特拉算法 int v0; //定义源节点 bool * visit=new bool [vexnum];//已经确定最短路径的节点的集合 cout<<\"请输入起始节点:\"; cin>>v0; cout< if(RL[cnt] visit[v0]=TRUE; //初始化已经找到最短路径的点集合 for(int i=1;i visit[v]=TRUE; //离v0顶点最近的v加入到s集 for(int k=0;k 计算机网络实验报告0909122820周建权 //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 ********************* 第 4 页 共 11 页 计算机网络实验报告0909122820周建权 2.运行界面截图 【实验总结】 1.算法优缺点分析 优点:路由信息的一致性好,坏消息也一样传播得快;状态分组的长度较短,仅包含到邻接点的距离、序号和年龄等,与网络规模关系不大,传输所耗用的网络带宽不大,此外,状态分组的扩散,由于年龄参数的设定,不会无扩散,所以可适用于大型网络。 缺点:每个路由器需要有较大的存储空间,用以存储所收到的每一个节点的链路状态分组;计算工作量大,每次都必须计算最短路径。 2.实验过程心得体会 在实验的过程中我们要培养自己的分析问题,和解决问题的能力。培养这种能力的前题是你对每次实验的态度。如果你在实验这方面很随便,抱着等老师教你怎么做,拿同学的报告去抄,尽管你的成绩会很高,但对将来工作是不利的。所以尽量还是要自己做而不是到处抄袭。 实验三Socket通信实验 网络编程是通过使用套接字来达到进程间通信目的的编程,Socket编程是网络编程的主流工具,Socket API是实现进程间通信的一种编程设施,也是一种为进程间提供底层抽象的机制,提供了访问下层通信协议的大量系统调用和相应的数据结构。本实验利用Socket API编写网络通信程序,具体实验要求及内容如下。 【实验目的和要求】 3. 掌握VB、VC++、VS或JAVA等集成开发环境编写网络程序的方法; 第 5 页 共 11 页 计算机网络实验报告0909122820周建权 4. 5. 6. 7. 掌握客户/服务器(C/S)应用的工作方式; 学习网络中进程之间通信的原理和实现方法; 理解单播、组播和广播的原理并比较其不同之处; 要求本机既是客户端又是服务器端; 【实验内容】 所编写的程序应具有如下功能: 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.流程图 服务器 发送 接收 接收 发送 接收 发送 用户一 用户二 用户三 发送 接收 第 6 页 共 11 页 计算机网络实验报告0909122820周建权 2.部分代码 ** 服务器入口程序 */ public class ServerMain { public static void main(String[] args) { int port = Integer.parseInt(DataBuffer.configProp.getProperty(\"port\")); //初始化服务器套节字 try { DataBuffer.serverSocket = new ServerSocket(port); } catch (IOException e) { e.printStackTrace(); } new Thread(new Runnable() {//启动新线程进行客户端连接监听 public void run() { try { while (true) { // 监听客户端的连接 Socket socket = DataBuffer.serverSocket.accept(); System.out.println(\"客户来了:\" + socket.getInetAddress().getHostAddress() + \":\" + socket.getPort()); //针对每个客户端启动一个线程,在线程中调用请求处理器来处理每个客户端的请求 new Thread(new RequestProcessor(socket)).start(); } } catch (IOException e) { e.printStackTrace(); } } }).start(); /** * 定义连接服务器的方法 */ public void connect(){ try{ userThread=new UserChatThread(\"localhost\",6666,jtereceive); System.out.println(\"已经连接到服务器\"); if(userThread.connectServer()){ userThread.start(); } }catch(Exception e){ e.getStackTrace(); } } 第 7 页 共 11 页 计算机网络实验报告0909122820周建权 // 客户端聊天界面 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.服务器界面 第 8 页 共 11 页 计算机网络实验报告0909122820周建权 2.用户登录界面 3初始化界面 第 9 页 共 11 页 计算机网络实验报告0909122820周建权 4点对点通信 5.群聊 第 10 页 共 11 页 计算机网络实验报告0909122820周建权 6.广播 【实验总结】 1.网络编程就是通过计算机网络与其他程序进行通信的程序,Socket编程是网络编程的主流工具。Socket API是实现进程间通信的一种编程设施,也是一种为进程间提供底层抽象的机制。尽管应用开发人员很少需要在该层编写代码,但是理解socket API还是非常重要的。 2.网络通讯的基本模式如下:每一台通讯的主机都有一个本网络环境中惟一的IP地址,一台主机上往往有多个通讯程序存在,每个这样的程序都要占用一个通讯端口。因此,一个IP地址,一个通讯端口,就能确定一个通讯程序的位置。 3.这个项目是在上学期的基础上进行了修改后改变的,广播这个功能不是很清楚是不是这样。不过应该大致就是这样。 第 11 页 共 11 页 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务