基于DV算法的路由器模拟设计与实现实验报告

上传人:lizhe****0001 文档编号:29754868 上传时间:2018-01-25 格式:DOC 页数:55 大小:480.50KB
返回 下载 相关 举报
基于DV算法的路由器模拟设计与实现实验报告_第1页
第1页 / 共55页
基于DV算法的路由器模拟设计与实现实验报告_第2页
第2页 / 共55页
基于DV算法的路由器模拟设计与实现实验报告_第3页
第3页 / 共55页
基于DV算法的路由器模拟设计与实现实验报告_第4页
第4页 / 共55页
基于DV算法的路由器模拟设计与实现实验报告_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《基于DV算法的路由器模拟设计与实现实验报告》由会员分享,可在线阅读,更多相关《基于DV算法的路由器模拟设计与实现实验报告(55页珍藏版)》请在金锄头文库上搜索。

1、华北计算机系统工程研究所若只如初见1基于 DV 算法的路由器设计与实现实验报告学 院: 姓 名: 日 期: 华北计算机系统工程研究所若只如初见2一一 实验目的1深入理解分布式路由选择算法,以最简单的 DV 算法来增强对路由算法的认识2理解、掌握和利用距离向量算法3所实现的路由器模拟 Internet 上的 IP 路由器。它能确定网络的最短路由,并在这些利用上传输分组一一 DV 算法描述距离矢量算法,也称为 Bellman-Ford shortest path algorithm,每个路由器都定期或拓扑结构突发变化时与其相邻的所有路由器交换路由表,据此更新它们自己的路由表。DV 算法工作方式:每

2、个路由器维护一张路由表,表中分为三个表项:目的地址,列出了当前可达的目的网络地址;到达目的地址下一跳,列出了下一跳的 IP 地址;到达目的地址的代价,以距离或跳数为表征。路由表更新规则:1发现了一条到达某目的的新路由,而该路由在原来的路由表中不存在(即发现了一条新路由) ,则在路由表中增加该路由。2发现了一条到达某目的的、距离更短的新路由,则用该路由替换原有的路由。3到达某目的的一条路由,其后继结点到达该目的地的距离发生了变化,则需要更新该路由的距离。在此实验当中,为了实现和模拟的方便,刚开始初始化生成一个网络连接图的二维数组(见 mainManager/RoutersInit.java,初始

3、化的二维数组是entity/NetMap.java) ;每个路由器类包括了路由器 ID,端口,routerTable 对象,还有两个 HashMap(一个存储为每一个相邻路由器的计时器,一个存储每一个相邻路由器的上一次交流时间);路由表采用了两个数组来实现,一个数组存储到各个网络的下一跳,一个数组存储到各个网络的跳数,如下结构,以路由器一为例, (路由表的默认数组和两个真是数组的显示信息,其中下一跳是 0 表示不可达的下一跳,不是 0 如 2004 表示下一跳是 2004,在距离数组里,如果是 16表示不可达,如果是 0,表示到本身路由,不是 0 或 16 表示可达且跳数为该数值) ,如下图路

4、由表左边方框中的信息 所示:华北计算机系统工程研究所若只如初见3在路由表中,只登记下一跳而不是完整路由,以真实模拟路由器的 DV 算法处理。转发分组时,严格按照路由表进行转发。如上图,路由器的连接信息在上面图片的左部区域,右部区域分为两部分(一个是路由器接到相邻路由器发来的路由表的实时- 我设置的是每 1 秒更新一次 -信息,一个是发送或者转发数据的显示信息) 。一一 实验要求1输出路由表:在此实验当中为了实现方便,所有拓扑结构中的路由器都给以显示(可达的,不可达的 16 以及自己的路由编号):要求对这个连接图的二维数组解析,进行 DV 算法的模拟。2发送分组:每个数字代表一个数据分组发送请求

5、;数据分组发送到数字代表的目的地;如果目的结点不是邻居结点,不能直接发送分组,而必须在路由的各个结点上沿路由转发该分组。收到数据分组的结点必须输出一行,显示华北计算机系统工程研究所若只如初见4该分组的目的,在图 1 中的右上角显示了每一秒的路由表的更新情况,每一个路由器都有三个转发进程,发送进程和接收进程。发送进程每一秒都需要发送自己的路由表信息。每一个路由器都给自己相邻的路由器设置了一个计时器,如果 10 秒钟没有收到相邻路由器的信息,就将下一跳设置成 0,距离设置成16(表示不可达) 。否则重新开始计数。2发送数据:数据分组必须有数据,且在如图 1 中的点击提交按钮之前,必须在文本框中输入

6、正确的数据格式(传送的目的路由和要传送的数据之间必须要有“#”号分割) ,如:2003#DDDDDDD,表示目的路由是 2003,传送的数据是 DDDDDDD。例如:路由器 2006 要向 2001 发送数据,则具体转发过程如下:在 RouterTablePacket 中有 Hops(初始值是 16,每过一跳,hops 减 1,当华北计算机系统工程研究所若只如初见5hops 是 1 的时候,就不再进行转发了,相当于 TTL:Time to Live)属性,分组应该在 Hops 规定的时间或步数内到达目的结点,否则丢弃之。分组经过每个中间结点时,将其 TTL 减 1。若 TTL=1,丢弃,否则继

7、续转发。3关于时间定时:每个路由器每 1 秒钟发出它们的路由表;每个路由器根据收到的路由表更新它们自己的路由表;路由器必须具备检测邻居是否活动的能力,如果路由器在 10 秒钟没有收到邻居发来的更新,则认为邻居不可达。4显示活动的相邻路由:用一个特定的表格来显示与当前路由相邻的路由器的信息。5关于拓扑结构:路由器必须具备路由器故障和恢复的能力;这里假设链路不会出现故障,分组不会丢失和出错;如果路由器在给定时间内未运行,表示路由器故障,如果重启运行,则认为路由器故障恢复;当然,假设通信是双向的。一一 实验用例编程语言:java;开发环境:jdk1.6.0_02 、Myeclipse8.6,测试用例

8、为二维数组的维数个(你可以随便写出一个对称的二维数组,程序可以自己解析的,我用的都是活代码) ,如下如所示我写的一个拓扑图的二维数组,如图:此实验是模仿 DV 算法,应用 java 中的多线程来模拟多个路由器,并且实现路由器之间的路由表和数据的传送。实验中路由表的数据结构相比真实的 DV算法发生了变化,所以程序在实现过程当中尽量的按照实验所用的路由表结构来完成功能,但是这不影响其主要思想的实现。1拓扑结构:为了模拟路由表的更新,首先是先确立六个结点网络的拓扑结构,由于是应用多线程来模拟各个路由器,所以在实验过程当中可以随时挂起某个或多个路由器来模拟网络拓扑的变化,之后仍然可以恢复挂起的路由器。

9、网络的初始拓扑结构如图 2 所示:华北计算机系统工程研究所若只如初见6端口号:50012002端口号:2005端口号:5002 端口号:5004端口号:5003端口号:200620032001200520042006图 2此处,路由表的端口号和路由器号全是来自 entity/Constant.java 文件的整个程序的全局变量,路由器初始值为 2001,而端口初始值为 5001,分别是数组初始化时的维数个。在实验实现过程当中,通过路由器线程的挂起实现网络拓扑结构的动态变化,之后会对相应的更该重新画出拓扑结构。2路由表初始化:在程序的 mainManager/RoutersInit.java 类

10、中初始化了留个路由器,这六个路由器的每一个实现都是在 mainManager/RouterThread.java 类中, 。以上图 2 的初始化二维数组中所规划的网络拓扑结构为标准,根据当前所创建的路由器编号静态初始化每个路由器自己的路由表。3数据格式:各个路由器实例之间通过 UDP 来交换路由表,路由器之间还需要进行数据的传输。在此,需要定义所传输的路由表和数据的结构,我是全部打成了数据包或者路由表包,具体结构见 transportPacket/RouterTablePacket.java(有sourceRouterId 和 routerTable 两个属性) ,transportPacke

11、t/SendDataPacket.java(有 sourceRouterId,destRouterId,bytedata,hops=16 四个属性) , transportPacket/TotalPacket.java(有type,routerTablePacket,sendDataPacket 三个属性, TotalPacket 类定义了具体具体是传输的包是什么类型的) 三个类,如果是传输路由表就用 RouterTablePacket把路由表包装后再用 TotalPacket 的 sendRouterTable 类型来包装,最后用 UDP发送出去,如果是传输数据就用 SendDataPack

12、et 把要传送的数据包装后再用TotalPacket 的 sendData 类型来包装,最后用 UDP 发送出去,在目的路由器端对收到的数据进行解封装。华北计算机系统工程研究所若只如初见7五程序描述为完成所要求功能,程序首先实现了二维数组维数个路由器线程,每一个路由器线程下面又实现了发送线程、接收线程和转发数据线程三个子线程;接收线程下面实现了定时器子线程。建立一个工程,命名为 day12-02_DV_new_hasTimer(名字可以随便起,我是以前的习惯都加上了日期) ,在此工程下建立源程序文件,每个线程放在单独的 java 源程序文件当中。该实验还可以对其中一个路由器进行挂起,别的路由器

13、在 10 秒后如果收不到这个路由器发来的路由表信息,就将其路由表中的与其对应的相应路由表的值进行修改成不可达,逐渐通知到整个网络。在这里有点不同于 DV 算法的是:DV 算法是每个路由器为收到的路由表的每一个简历一个计时器,而该路由器简化了这个设计,是仅仅为相邻的路由器保留一个计时器,这样不仅可以大大减少整个网络的通信量,将计时器的信息保留在内存而不是在路由表中,而且采用了 hashMap 保存后在验证是否联通时,从 hashMap 中取数据方便快捷。六、实验结论在实验过程遇到了许多问题,一方面是编程语言的使用,另一方面是对路由算法的理解程度。三是计时器的用法,尤其是计时器的用法想了将近 2

14、个小时,最后通过不懈的调试与算法完善,程序基本实现所要求的功能,有能力模拟 DV 算法。DV 算法的优缺点:DV 算法简单,容易实现,对于好消息传播的速度快,但是对于坏消息则传播速度慢。华北计算机系统工程研究所若只如初见8package entity;/* 常量类* author 郭金磊*since 20131220*/public class Constant /* return 返回路由 Id 的初试值*/public static int getRouterIdBasic()return 2001;/* return 返回路由端口的初试值*/public static int getPo

15、rtBasic()return 5001;package entity;/* 初始化的网络拓扑图* author 郭金磊*since 20131220*/public class NetMap /* return 返回初始化的网络图*/华北计算机系统工程研究所若只如初见9public int getInitInternetMap()int initVecter=new int0,1,16,16,1,16,1,0,1,16,16,16,16,1,0,1,1,16,16,16,1,0,16,1,1,16,1,16,0,16,16,16,16,1,16,0; return initVecter;package entity;import java.util.HashMap;/* 路由器实体类,包含routerId,port,RouterTable,createTimerMapsForNeighbers,lastTimeMaps* author 郭金磊*since 20131220*/public class Router /* 产生全局唯一的序列化的实体 ID*/private static final long serialVersionUID = -4112736218089137504L;/* 路由 ID*/private int routerId;/* 路由端口*/华北计算

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号