基于DV算法的路由器模拟设计与实现 - 图文 联系客服

发布时间 : 星期五 文章基于DV算法的路由器模拟设计与实现 - 图文更新完毕开始阅读4fda9e276edb6f1afe001f18

华北计算机系统工程研究所—若@只如初见

基于DV算法的路由器设计与实现

实验报告

学 院: 姓 名: 日 期:

1

华北计算机系统工程研究所—若@只如初见

一. 实验目的

1.深入理解分布式路由选择算法,以最简单的DV算法来增强对路由算法的

认识

2.理解、掌握和利用距离向量算法

3.所实现的路由器模拟Internet上的IP路由器。它能确定网络的最短路由,并在这些利用上传输分组

二. DV算法描述

距离矢量算法,也称为Bellman-Ford shortest path algorithm,每个路由器都定期或拓扑结构突发变化时与其相邻的所有路由器交换路由表,据此更新它们自己的路由表。

DV算法工作方式:每个路由器维护一张路由表,表中分为三个表项:目的地址,列出了当前可达的目的网络地址;到达目的地址下一跳,列出了下一跳的IP地址;到达目的地址的代价,以距离或跳数为表征。 路由表更新规则:

1.发现了一条到达某目的的新路由,而该路由在原来的路由表中不存在(即发现了一条新路由),则在路由表中增加该路由。

2.发现了一条到达某目的的、距离更短的新路由,则用该路由替换原有的路由。

3.到达某目的的一条路由,其后继结点到达该目的地的距离发生了变化,则需要更新该路由的距离。

在此实验当中,为了实现和模拟的方便,刚开始初始化生成一个网络连接图的二维数组(见mainManager/RoutersInit.java,初始化的二维数组是entity/NetMap.java);每个路由器类包括了路由器ID,端口,routerTable对象,还有两个HashMap(一个存储为每一个相邻路由器的计时器,一个存储每一个相邻路由器的上一次交流时间);路由表采用了两个数组来实现,一个数组存储到各个网络的下一跳,一个数组存储到各个网络的跳数,如下结构,以路由器一为例,(路由表的默认数组和两个真是数组的显示信息,其中下一跳是0表示不可达的下一跳,不是0如2004表示下一跳是2004,在距离数组里,如果是16表示不可达,如果是0,表示到本身路由,不是0或16表示可达且跳数为该数值),如下图路由表左边方框中的信息 所示:

2

华北计算机系统工程研究所—若@只如初见

在路由表中,只登记下一跳而不是完整路由,以真实模拟路由器的DV算法

处理。转发分组时,严格按照路由表进行转发。如上图,路由器的连接信息在上面图片的左部区域,右部区域分为两部分(一个是路由器接到相邻路由器发来的路由表的实时-------我设置的是每1秒更新一次-------信息,一个是发送或者转发数据的显示信息)。

三. 实验要求

1.输出路由表:在此实验当中为了实现方便,所有拓扑结构中的路由器都给以显示(可达的,不可达的16以及自己的路由编号):

要求对这个连接图的二维数组解析,进行DV算法的模拟。

2.发送分组:每个数字代表一个数据分组发送请求;数据分组发送到数字代表的目的地;如果目的结点不是邻居结点,不能直接发送分组,而必须在路由的各个结点上沿路由转发该分组。收到数据分组的结点必须输出一行,显示该分

3

华北计算机系统工程研究所—若@只如初见

组的目的,在图1中的右上角显示了每一秒的路由表的更新情况,每一个路由器都有三个转发进程,发送进程和接收进程。发送进程每一秒都需要发送自己的路由表信息。每一个路由器都给自己相邻的路由器设置了一个计时器,如果10秒钟没有收到相邻路由器的信息,就将下一跳设置成0,距离设置成16(表示不可达)。否则重新开始计数。

2.发送数据:数据分组必须有数据,且在如图1中的点击提交按钮之前,必须在文本框中输入正确的数据格式(传送的目的路由和要传送的数据之间必须要有“#”号分割),如:2003#DDDDDDD,表示目的路由是2003,传送的数据是DDDDDDD。例如:路由器2006要向2001发送数据,则具体转发过程如下:

在RouterTablePacket 中有Hops(初始值是16,每过一跳,hops减1,当hops是1的时候,就不再进行转发了,相当于TTL:Time to Live)属性,分组应该在

4