基于DV算法的路由器模拟设计与实现实验报告
物联网定位技术实验DV-Hop报告

物联网定位技术实验报告----------DV-Hop姓名学号:专业班级:物联网工程指导老师:完成时间:20170425目录实验一常用无线传感器网络定位算法实现与比较 (1)1实验背景 (1)2.实验目的 (1)3.使用的工具 (1)4.DV-Hop算法基本思想与基本原理 (1)5.实验详细设计 (1)实验一常用无线传感器网络定位算法实现与比较1实验背景DV-Hop定位机制由美国路特葛斯大学的DragosNiculescu等人提出的,DV-Hop算法是为了避免对节点间的距离直接进行测量而提出的一种基于距离矢量路由(根据目的地远近决定最好路径)的非测距定位算法。
非常类似于传统网络中的距离向量路由(从相邻站点收集网络列表,来路由选择)机制。
2实验目的2.实验目的1.(课堂完成)掌握典型的无线传感器网络定位算法基本原理,理解所讲的迭代式多边定位算法、DV-HOP算法、PDM定位算法、基于MDS的定位算法;2.(实验完成)利用所给的网络数据,实现两种以上的定位算法并进行比较。
3.使用的工具与语言工具:Visual studio语言:C#4.DV-Hop算法基本思想与基本原理(1)通过距离矢量路由方法使未知节点获得与信标节点之间的最小跳数(2)并计算出每跳的平均距离,然后以每跳平均距离和最小跳数的乘积作为未知节点与信标节点之间的估计距离,(3)再利用多边测量法获得未知节点的位置估算。
5.实验详细设计5.1本实验用到的基本数据类型Node(int NodeId,double x, do uble y,intisBeacon)//节点类NodeId—节点idX,y–节点的坐标isBeacon–是否为锚节点List<Node>NodeList–保存节点的信息Dictionary<int, int>hopCountTable–保存着路由信息double[,] d = newdouble[288, 32]; --锚节点i与锚节点j之间的实际距离path[b, c]–表示两点之间的跳数double avg --以锚节点i为基准,计算出的平均每跳距离本实验用到的计算方法是极大似然估计法double[,] A = newdouble[31, 2]; -- 表示如下A的信息double[] B = newdouble[31]; -- 表示如下B的信息double[] C = newdouble[2]; -- 表示如下X的值5.2.本实验用到的一些函数publicstaticvoid Floyd(int[,] path, int n)//找出两点最小跳数publicstaticdouble AvgHopSize(List<Node> list)//计算每跳的平均距离publicstaticvoid Multilateration(double[,] A, double[] B, double[] C)//多变定位本实验分四大阶段:第1阶段:读取信息---读取net1_pos.txt中的节点数据并存入List<Node>NodeList中,读取net1_topo-error free.txt中的节点距离数据,并存入string[] num中。
实训报告路由器配置

一、实训目的通过本次实训,掌握路由器的基本配置方法,了解路由器在网络中的作用,提高网络设备的配置与管理能力。
二、实训环境1. 路由器:华为AR系列路由器一台2. 交换机:华为S系列交换机一台3. 网线:直通网线若干4. 计算机若干5. 实验室网络环境:模拟企业局域网环境三、实训内容1. 路由器基本配置2. 路由器接口配置3. 路由协议配置4. 静态路由配置5. 动态路由配置6. 路由策略配置7. NAT配置8. 路由器安全配置四、实训步骤1. 路由器基本配置(1)连接路由器与计算机,使用Console线进入路由器配置模式。
(2)配置路由器基本参数,包括主机名、密码等。
(3)配置接口IP地址,确保路由器与交换机之间能够正常通信。
2. 路由器接口配置(1)查看路由器接口信息,了解接口状态。
(2)配置接口VLAN,实现不同VLAN之间的隔离。
(3)配置接口安全特性,如MAC地址绑定、IP源地址过滤等。
3. 路由协议配置(1)配置静态路由,实现不同网络之间的互通。
(2)配置动态路由协议,如RIP、OSPF等,实现网络自动路由。
4. 静态路由配置(1)查看路由表,了解当前网络的路由信息。
(2)配置静态路由,实现特定网络之间的互通。
5. 动态路由配置(1)配置RIP协议,实现网络自动路由。
(2)配置OSPF协议,实现网络自动路由。
6. 路由策略配置(1)配置路由策略,实现特定数据包的转发。
(2)配置策略路由,实现不同数据包的转发。
7. NAT配置(1)配置NAT地址池,实现内部网络访问外部网络。
(2)配置NAT转换,实现内部网络访问外部网络。
8. 路由器安全配置(1)配置ACL,实现访问控制。
(2)配置IPsec VPN,实现远程访问。
(3)配置端口安全,防止未授权访问。
五、实训结果通过本次实训,成功配置了路由器的基本参数、接口、路由协议、静态路由、动态路由、路由策略、NAT和路由器安全配置。
实现了不同网络之间的互通,满足了网络需求。
实验五 模拟路由器配置实验报告

实验五模拟路由器配置实验报告
一、实验目的
⏹了解路由器各部件、接口的特性
⏹通过使用路由器模拟软件来学习和掌握路由器配置的基本方法、用户接口模
式以及基本命令。
二、实验内容
⏹通过使用路由器模拟软件,利用不同模式下的命令,完成不同网
络拓扑结构情况下路由器各接口及其协议的配置和管理;
⏹通过常用的网络命令测试路由器配置结果和网络连通状态
四、实验过程
1.软件的熟悉:
接口的选择:
2.配置图
3、配置PC的IP地址Pc1的IP地址:
Pc2的IP地址:
Pc3的IP地址:
4.配置路由器RouterA的配置情况:
RouterB的配置情况:
RouterC 的配置情况:
5.实验结果:
六、实验心得
通过此次试验,我了解了路由器各部件、接口的特性;通过使用路由器模拟软件基本掌握了由器配置的基本方法、用户接口模式以及基本命令。
这次实验也加深了我对网络拓扑结构的认识,对什么是IP地址,什么是子网掩码,什么是默认网关等问题也有了更深一步的认识知道了在配置PC机的IP地址的时候必须要与路由器的网络号保持一致。
同时也反思了几点在实验过程中应该注意的几点:注意交换机与路由器的区别;注意命令模式中exit(返回上一级命令模式)与end(直接返回到特权模式)的区别;实验过程中要仔细认真,不能遗漏任何一个步骤。
最后,利用模拟软件还是有几条命令不能使用,我觉得以后最好能够有真实的路由器能让我们进行实验,毕竟在模拟软件上进行操作还是略显抽象。
路由器实训报告

路由器实训报告第一部分:引言在网络通信中,路由器是一种关键设备,负责将数据包从一个网络传输到另一个网络。
为了更好地了解并掌握路由器的工作原理和配置方法,我们进行了一次路由器实训。
本报告将详细介绍我们的实训内容、实训过程以及实训结果。
第二部分:实训目标我们的实训目标是通过实际操作,掌握以下内容:1. 路由器的基本概念和工作原理;2. 路由器的配置和管理方法;3. 路由器的故障排除和维护。
第三部分:实训内容在实训中,我们按照以下步骤进行操作:1. 硬件准备:购买路由器,并将其与电脑进行连接;2. 路由器的初始化配置:通过命令行界面(CLI)或Web界面,进行路由器的基本配置;3. 路由器的路由配置:配置路由表,使路由器能够正确地将数据包转发到目标网络;4. 网络连接测试:通过ping命令或其他工具,测试路由器与其他网络设备的连通性;5. 故障排除与维护:模拟一些常见的故障情况,如链路故障、IP地址冲突等,然后通过相应的方法进行排除和修复。
第四部分:实训过程在实训过程中,我们遇到了一些挑战:1. 基础知识不足:由于我们对路由器的了解相对较少,刚开始时遇到了一些困难。
但通过阅读相关资料和请教老师,逐渐弥补了这方面的不足;2. 配置命令复杂:路由器的配置命令较为复杂,需要熟悉并记忆各种命令及其参数。
通过反复练习和实际操作,我们逐渐掌握了常用命令;3. 故障排除难度大:在模拟故障排除时,由于故障种类繁多,有时需要一定的经验和思维逻辑才能找到问题所在。
通过和同学的讨论和老师的指导,我们逐渐提高了故障排除的能力。
第五部分:实训结果通过本次路由器实训,我们取得了以下成果:1. 理论知识掌握:我们对于路由器的基本概念和工作原理有了更深入的理解;2. 配置能力提升:我们学会了通过命令行界面或Web界面对路由器进行配置和管理;3. 故障排除技巧:通过模拟故障情况,我们掌握了一些故障排除的方法和技巧;4. 团队合作能力:在实训中,我们相互帮助、互相学习,提高了团队合作的能力。
路由器仿真软件实验报告

路由器仿真软件实验报告路由器仿真软件实验报告1、简介本实验报告旨在介绍路由器仿真软件的使用方法和实验结果。
通过仿真软件,我们可以模拟和测试各种网络场景中路由器的性能和功能。
2、实验环境设置在本实验中,我们使用了路由器仿真软件,并在一台个人电脑上进行了安装和配置。
实验所需的硬件和软件环境如下:- 个人电脑:操作系统Windows 10,处理器Intel Core i7,内存8GB- 路由器仿真软件:版本- 网络拓扑配置:3、实验目标本次实验的目标是:- 模拟一个复杂的网络拓扑,并验证路由器在该拓扑中的性能和功能。
- 测试不同路由器配置参数对网络性能和数据传输速度的影响。
- 分析路由器在各种网络故障情况下的表现,并评估其可靠性和鲁棒性。
4、实验步骤4.1 网络拓扑配置在路由器仿真软件中,设置所需的网络拓扑,包括路由器、交换机、主机等设备的连接和配置。
确保拓扑结构符合实验要求。
4.2 路由器配置对每个路由器进行配置,包括路由表配置、接口配置、路由协议配置等。
根据实验要求设置相应的参数。
4.3 数据包发送与接收在仿真软件中,网络流量,模拟数据包的发送和接收过程。
可以使用自定义的数据包,或者选择预定义的测试数据。
4.4 性能测试与分析通过监测路由器的性能指标,如转发速率、内存利用率等,评估路由器在实验环境下的性能表现。
针对不同配置和网络故障场景,进行性能测试和分析。
5、实验结果与讨论根据实验步骤中所进行的实验和性能测试,记录并整理实验结果。
对实验结果进行分析和讨论,比较不同配置和场景下的性能差异。
6、结论根据实验结果和分析,得出结论,总结路由器的性能和功能,以及对网络设计和优化的启示。
7、附件本文档附带了以下附件供参考:- 路由器仿真软件配置截图- 实验数据和性能指标记录表8、法律名词及注释请参阅附录部分。
路由器的配置实验报告

路由器的配置实验报告路由器的配置实验报告一、引言在现代网络通信中,路由器扮演着重要的角色。
路由器作为网络中的交通警察,负责将数据包从源地址发送到目标地址。
为了使路由器能够正常工作,需要进行相应的配置。
本文将介绍路由器的配置实验过程和结果。
二、实验目的本次实验的目的是熟悉路由器的配置过程,了解路由器的基本功能和参数设置。
通过实验,掌握如何设置路由器的IP地址、子网掩码、网关等参数,以及如何配置路由表。
三、实验步骤1. 连接路由器和电脑首先,将路由器和电脑通过网线连接起来。
确保连接的稳定性和正确性。
2. 登录路由器管理页面打开电脑上的浏览器,输入路由器的默认IP地址,进入路由器的管理页面。
输入正确的用户名和密码,登录路由器。
3. 设置IP地址在管理页面中找到“网络设置”或类似的选项,进入IP地址设置界面。
根据实际情况,设置合适的IP地址、子网掩码和网关。
确保设置的IP地址与电脑在同一个子网中。
4. 配置DHCP服务在管理页面中找到“DHCP服务器”或类似的选项,进入DHCP服务设置界面。
开启DHCP服务,设置IP地址分配的起始地址和结束地址,以及租期时间等参数。
5. 配置路由表在管理页面中找到“路由表”或类似的选项,进入路由表设置界面。
添加需要的路由条目,包括目标网络地址、子网掩码、下一跳地址等信息。
6. 保存并应用配置在完成以上设置后,点击“保存”或类似的按钮,保存配置信息。
然后点击“应用”或类似的按钮,使配置生效。
四、实验结果经过以上步骤的配置,我们成功完成了路由器的配置实验。
通过登录路由器管理页面,我们可以看到设置的IP地址、子网掩码、网关等参数已经生效。
DHCP服务成功开启,并能够为连接到路由器的设备分配IP地址。
路由表中添加的路由条目也能够正常工作,实现了数据包的正确转发。
五、实验总结通过本次实验,我们对路由器的配置过程有了更深入的了解。
路由器的配置需要注意各个参数的设置,确保网络的正常运行。
路由器实验报告1

路由器实验报告11. 引言本实验主要目的是通过对路由器的实验观察和实际操作,深入了解路由器的工作原理、配置和性能。
通过本实验,我们将能够更好地理解和运用路由器,提升网络的稳定性和性能。
2. 实验设备和配置本次实验使用的设备为一台常见的路由器,并根据实验要求进行了相应的配置,主要包括以下几个方面:2.1 路由器类型:在本次实验中,我们选择了一台用于家庭网络的无线路由器。
2.2 网络拓扑:基于实验的需求,我们搭建了一个简单的网络拓扑,包括一个主机和两个子网。
主机通过无线方式连接到路由器,而子网则由有线方式连接到路由器。
2.3 IP地址和子网掩码配置:根据网络拓扑,我们为每个子网配置了独立的IP地址和子网掩码,以确保网络通信的正常进行。
2.4 路由器配置:为了实现本实验的目标,我们对路由器进行了以下几个重要配置:- 配置路由器的管理地址和密码,以便于我们远程管理和操作路由器。
- 配置路由器的无线网络名称(SSID)和密码,以提供无线网络服务。
- 配置路由器的端口映射和QoS(Quality of Service)策略,以实现网络流量控制和优先级调整。
3. 实验步骤和观察结果在本次实验中,我们按照以下步骤进行了实验,并观察了相应的结果:3.1 路由器的基本操作和管理我们首先进行了路由器的基本操作,包括登录、查看和修改路由器的配置信息等。
通过观察,我们对路由器的管理界面和操作流程有了更加直观和深入的认识。
3.2 无线网络设置和连接在本次实验中,我们设置了路由器的无线网络名称(SSID)和密码,并尝试连接该网络。
通过观察,我们验证了无线网络的可用性和安全性。
3.3 端口映射和QoS配置为了实现网络流量的控制和优化,我们对路由器进行了端口映射和QoS配置。
我们通过观察网络传输速度和响应时间的变化,评估了配置的效果。
4. 实验结果分析通过以上实验步骤和观察结果,我们得出了以下几个结论:4.1 路由器的管理功能很强大,我们可以通过管理界面对路由器进行各种设置和配置,方便我们进行远程管理和维护。
路由器实习报告

实习报告:路由器实习体验一、实习背景随着互联网的普及和信息技术的飞速发展,路由器作为网络通信的重要设备,其在现代社会中的作用日益凸显。
为了更好地了解路由器的原理和应用,提高自己的实践能力,我选择了路由器实习项目。
本次实习主要涉及路由器的安装、配置、调试和维护等方面。
二、实习内容1. 路由器的基本概念和原理在实习过程中,我首先学习了路由器的基本概念和原理。
路由器是一种网络层设备,主要用于实现不同网络之间的数据传输和路由选择。
它通过分析数据包的目的地址,根据路由表确定数据包的下一跳路径,从而实现网络之间的互联。
2. 路由器的硬件组成实习过程中,我对路由器的硬件组成有了更深入的了解。
路由器主要由处理器、内存、接口、电源等部分组成。
其中,处理器负责路由器的数据处理和转发;内存用于存储路由表、操作系统和运行数据等;接口用于连接网络设备;电源则为路由器提供稳定的电力供应。
3. 路由器的软件系统路由器的软件系统是实现其功能的核心部分。
实习过程中,我学习了路由器的操作系统,如IP路由、静态路由、动态路由等。
此外,还了解了路由器的配置方法,包括命令行接口(CLI)配置、图形化界面配置等。
4. 路由器的调试与维护在实习过程中,我参与了路由器的调试和维护工作。
通过实际操作,掌握了路由器的基本调试命令,如ping、tracert等。
在遇到问题时,能够根据现象分析原因,采取相应的措施解决问题。
此外,我还学习了路由器的日常维护方法,如查看运行日志、分析系统性能等。
三、实习收获1. 提高了自己的实际操作能力。
通过实习,我能够熟练地操作路由器,进行基本的配置和调试。
2. 加深了对路由器原理和应用的理解。
通过实习,我对路由器的工作原理和应用场景有了更深入的了解,为今后的工作和学习打下了基础。
3. 增强了团队协作能力。
在实习过程中,我与同学们共同解决问题,分工合作,提高了自己的团队协作能力。
4. 拓宽了视野。
实习过程中,我了解了路由器在现代通信领域的重要地位,以及我国在路由器技术方面的最新进展。
路由配置实验报告

路由配置实验报告路由配置实验报告一、实验目的本次实验的目的是通过实际操作,深入了解路由器的配置和管理。
通过配置路由器,实现网络之间的通信和数据传输,掌握基本的路由配置技巧和命令。
二、实验环境本次实验使用的实验环境为一台模拟的网络实验平台,其中包括两台路由器和三台主机。
路由器之间通过网络连接,主机通过路由器与外部网络进行通信。
三、实验步骤1. 确定网络拓扑结构在开始配置之前,首先需要确定网络的拓扑结构。
根据实验要求,我们将两台路由器连接在一起,形成一个局域网。
主机通过路由器与外部网络进行通信。
2. 配置路由器的基本参数首先,我们需要为每台路由器配置基本的参数,包括IP地址、子网掩码、网关等。
通过这些参数,路由器可以正确地识别和转发数据包。
3. 配置路由器之间的静态路由在配置完成基本参数后,我们需要为路由器之间建立静态路由。
静态路由是一种手动配置的路由方式,通过手动指定路由器之间的路径,实现网络之间的通信。
4. 配置主机的默认网关为了使主机能够与外部网络进行通信,我们需要为主机配置默认网关。
默认网关是主机发送数据包时的默认路由,用于指定数据包的下一跳地址。
5. 进行网络测试在完成路由器和主机的配置后,我们需要进行网络测试,验证配置的正确性。
通过向外部网络发送数据包,并观察数据包的传输情况,我们可以判断路由器的配置是否成功。
四、实验结果经过以上步骤的配置和测试,我们成功地建立了两台路由器之间的网络连接,并实现了主机与外部网络的通信。
通过网络测试,我们发现数据包可以正常地传输,网络延迟较低,网络稳定性较好。
五、实验总结通过本次实验,我们深入了解了路由器的配置和管理。
通过配置路由器和主机的参数,我们成功地建立了网络连接,并实现了数据的传输和通信。
在实验过程中,我们掌握了基本的路由配置技巧和命令,提高了对网络配置和管理的理解和能力。
六、实验心得本次实验让我深入了解了路由器的配置和管理,提高了对网络的理解和认识。
路由器模拟实验心得体会

路由器模拟实验心得体会路由器模拟实验是我们在网络技术课程中进行的一项实践活动,通过构建和配置网络拓扑,实现路由器之间的通信和数据传输。
这次实验使我更加深入地理解了路由器的工作原理和网络管理的重要性。
以下是我在实验中的体会和心得。
首先,通过这个实验,我明白了路由器在网络中的作用。
路由器是一种网络设备,负责将数据包从一个网络转发到另一个网络,以实现不同网络之间的通信。
在这个实验中,我们模拟了一个具有多个子网的网络拓扑,通过配置路由器的路由表,实现了不同子网之间的通信。
通过观察路由器的数据转发过程,我更加深入地理解了路由器的工作原理。
其次,实验中的路由器配置使我了解了网络管理的重要性。
通过配置路由器的IP地址、子网掩码和路由表,我能够定义网络中不同设备的网络地址和路由规则。
这样,路由器能够根据路由表自动选择最佳路径来转发数据包,提高网络性能。
同时,我也学到了一些网络管理的基本概念,如IP地址分配、子网划分和路由协议等。
这些概念对于网络的正常运行和故障排除至关重要。
实验中的网络故障排除也给我留下了深刻的印象。
在实验过程中,我遇到了一些问题,如数据包无法传输、网络延迟较高等。
通过分析路由器的配置和网络拓扑,我发现了一些错误配置和故障点,如IP地址冲突、路由循环等。
通过修复这些问题,我成功实现了网络的正常运行。
这次经历使我了解到故障排除在网络管理中的重要性,同时也提高了我的解决问题的能力。
此外,这个实验培养了我的团队合作和沟通能力。
在实验中,我与同组的同学合作,共同构建和配置网络拓扑。
我们分工合作,共同解决问题,确保实验的顺利进行。
实验中的合作过程中,我体会到了团队协作的重要性,学会了与他人进行有效的沟通和合作。
这对我的职业发展和人际交往都有很大帮助。
总的来说,通过这个路由器模拟实验,我对路由器的工作原理和网络管理有了更深入的了解。
同时,也提高了我的团队合作和问题解决能力。
这次实验是我网络技术学习中的重要一环,对我今后的学习和工作都有很大帮助。
路由器基本配置实验报告总结

路由器基本配置实验报告总结这次路由器基本配置实验的主要目的是通过实践学习如何进行路由器的基本设置,包括IP地址配置、VLAN划分、静态路由设置等。
在本次实验中,我们根据实验指导书的要求,顺利完成了实验任务,并取得了良好的实验效果。
1. 实验背景介绍路由器是网络通信中至关重要的设备,能够将数据包从一个网络传输到另一个网络。
通过对路由器的基本配置,可以实现网络的互通和数据的传输。
本次实验的目的是熟悉路由器的基本配置过程,并理解路由器的工作原理。
2. 实验过程与结果在本次实验中,我们按照实验指导书的步骤进行了路由器的基本配置。
首先,我们通过串口连接路由器,并进入路由器的命令行界面。
然后,我们依次进行了如下配置:2.1 IP地址配置通过命令行界面,我们为路由器的每个接口分配了相应的IP地址。
这样,不同网络中的路由器可以通过IP地址相互通信。
我们还设置了默认网关,使得路由器可以将数据包传输到其他网络中。
2.2 VLAN划分为了实现虚拟网络的划分以提高网络的安全性和管理性,我们使用了VLAN(虚拟局域网)技术。
通过命令行界面,我们创建了几个VLAN,并将其与特定的接口绑定。
这样,不同VLAN内的主机之间可以进行通信,而不同VLAN之间的主机则无法直接通信。
2.3 静态路由设置为了实现不同网络之间的数据包转发,我们需要配置路由表。
通过命令行界面,我们为每个网络设置了相应的静态路由,以告知路由器如何将数据包传输到目标网络。
在完成上述配置后,我们进行了相应的测试。
通过ping命令,我们确认路由器之间和不同网络中的主机之间能够正常通信。
3. 实验心得体会通过本次实验,我深刻理解了路由器的基本配置流程和原理。
我学会了如何为路由器分配IP地址,划分VLAN以及设置静态路由。
这些配置是网络通信中非常重要的一环,掌握了这些技能后,我相信能够更好地理解和解决网络故障。
此外,在实验过程中,我还体会到了团队合作的重要性。
与同学们共同探讨、解决问题,不仅加深了我的理解,还培养了我的团队协作能力。
路由技术实习报告

实习报告:路由技术实习一、实习背景和目的随着互联网的普及和发展,路由技术成为了计算机网络领域中的重要组成部分。
为了更好地了解和掌握路由技术,提高自己在网络领域的实际操作能力,我选择了路由技术实习。
本次实习的主要目的是学习和掌握路由器的基本配置、路由协议的配置和调试、以及路由技术在实际网络中的应用。
二、实习内容和过程1. 路由器的基本配置在实习的第一周,我学习了路由器的基本配置。
通过使用命令行界面,我熟悉了路由器的启动模式、接口配置、路由配置等基本操作。
我还了解了如何设置路由器的访问密码、重启路由器以及查看路由器的状态信息等。
2. 路由协议的配置和调试在实习的第二周,我学习了路由协议的配置和调试。
我了解了静态路由、动态路由协议RIP和OSPF的基本原理和配置方法。
通过实际操作,我掌握了如何配置路由器的路由协议、调整路由优先级、设置路由过滤器等。
我还学会了如何使用路由器命令行界面进行路由表的查看和调试。
3. 路由技术在实际网络中的应用在实习的第三周,我学习了路由技术在实际网络中的应用。
我参与了一个实际的网络项目,负责配置和调试路由器,实现不同网络之间的数据转发和互联。
通过这个项目,我了解了路由器在网络中的作用,掌握了路由技术在实际应用中的重要性。
三、实习收获和总结通过这次路由技术实习,我学习和掌握了一定的路由技术知识和实际操作能力。
我了解了路由器的基本配置方法,熟悉了路由协议的配置和调试技巧。
我还学会了如何将路由技术应用于实际网络中,实现不同网络之间的互联和数据转发。
在实习过程中,我也遇到了一些困难和挑战。
例如,在配置路由协议时,我曾经遇到过路由表更新不及时的问题。
通过与同事的讨论和查阅资料,我最终找到了解决方案,并成功解决了问题。
总的来说,这次路由技术实习对我来说是一次宝贵的实践经验。
我不仅学习和掌握了一定的路由技术知识和实际操作能力,还锻炼了自己的问题解决能力和团队合作能力。
我相信这次实习对我今后的学习和职业发展将产生积极的影响。
路由器仿真软件实验报告

路由器仿真软件实验报告一、实验目的随着网络技术的飞速发展,路由器作为网络连接的核心设备,其配置和管理变得越来越重要。
本次实验的目的是通过使用路由器仿真软件,深入了解路由器的工作原理、配置方法和网络性能优化策略,提高对网络设备的实际操作能力和问题解决能力。
二、实验环境1、操作系统:Windows 10 专业版2、仿真软件:Cisco Packet Tracer3、计算机配置:Intel Core i5 处理器,8GB 内存,512GB 固态硬盘三、实验内容1、路由器的基本配置接口配置:包括 IP 地址、子网掩码和网关的设置。
路由协议配置:如静态路由、RIP 协议和 OSPF 协议。
2、网络拓扑的搭建使用软件中的设备和线缆构建简单的网络拓扑,包括多个路由器和终端设备。
3、网络性能测试利用 Ping 命令和 Traceroute 命令测试网络的连通性和路径。
分析网络延迟、丢包率等性能指标。
4、访问控制列表(ACL)的配置配置标准 ACL 和扩展 ACL 来实现网络访问控制。
四、实验步骤1、打开 Cisco Packet Tracer 软件,创建一个新的实验项目。
2、从设备库中拖出所需的路由器和终端设备,并使用线缆将它们连接起来,构建网络拓扑。
3、双击路由器设备,进入配置界面。
首先进行接口配置,为每个接口分配适当的 IP 地址、子网掩码和网关。
4、选择路由协议进行配置。
对于静态路由,手动指定目标网络和下一跳地址;对于动态路由协议如 RIP 和 OSPF,按照协议的规则进行相应的配置。
5、在终端设备上配置 IP 地址和网关,确保网络设备之间能够相互通信。
6、使用 Ping 命令从终端设备向其他设备发送数据包,检查网络的连通性。
同时,使用 Traceroute 命令查看数据包在网络中的传输路径。
7、配置访问控制列表(ACL)。
例如,创建标准 ACL 来禁止特定网段的访问,或者创建扩展 ACL 来限制特定端口的访问。
路由器配置实验实训报告

一、实验目的本次实验旨在通过实际操作,让学生掌握路由器的基本配置方法,熟悉路由器的不同命令行操作模式,了解单臂路由的配置方法,并能够实现不同VLAN之间的通信。
二、实验内容1. 路由器的基本配置2. 单臂路由配置3. 不同VLAN之间的通信实现三、实验环境1. 硬件环境:Cisco Packet Tracer 6.2sv 模拟软件,一台PC,一台路由器(如Router2811),交叉线,配置线。
2. 软件环境:操作系统(如Windows 10),Cisco Packet Tracer 6.2sv。
四、实验步骤1. 路由器的基本配置(1)新建Packet Tracer拓扑图,添加一台路由器(如Router2811)和一台PC。
(2)通过Console线缆连接PC和路由器的控制台端口。
(3)打开PC的终端模拟器,按照以下步骤进入路由器配置模式:- 连接到路由器的控制台端口。
- 输入命令“enable”进入特权模式。
- 输入命令“configure terminal”进入全局配置模式。
(4)进行以下基本配置:- 设置路由器的主机名:`hostname 路由器名称`- 配置路由器的接口:`interface fastethernet0/0`- 配置接口的IP地址:`ip address IP地址子网掩码`- 配置默认网关:`ip default-gateway Default-Gateway-IP`(5)保存配置:`write memory`2. 单臂路由配置(1)在Packet Tracer拓扑图中添加一台交换机(如Switch2960)和两台PC。
(2)将路由器的FastEthernet0/0接口连接到交换机的FastEthernet0/1接口。
(3)在交换机上创建VLAN,并为每台PC分配相应的VLAN。
(4)在路由器上配置单臂路由:- 进入接口配置模式:`interface fastethernet0/0`- 配置VLAN成员:`switchport mode access`- 配置VLAN ID:`switchport access vlan VLAN-ID`(5)在路由器上配置静态路由:- 进入全局配置模式:`configure terminal`- 添加静态路由:`ip route 目标网络子网掩码下一跳IP地址`3. 不同VLAN之间的通信实现(1)在交换机上配置VLAN间路由:- 进入全局配置模式:`configure terminal`- 配置路由协议:`router rip`- 配置路由器ID:`router-id 路由器ID`- 配置VLAN路由:`network VLAN-ID`(2)在PC上配置默认网关:- 进入PC的网络连接设置。
dvhop定位算法的实验心得

dvhop定位算法的实验心得
DV-HOP(Distance Vector Hop)算法是一种无线传感器网络的定位算法。
该算法的主要思想是通过测量节点之间的距离和信号强度,来推断节点的位置。
通过一系列的多跳通信,每个节点可以推断出自己相对于某个已知节点的距离和位置。
在进行实验时,我们首先需要部署一组无线传感器节点,这些节点之间可以通过无线信号进行通信。
我们利用这些节点来构建一个拓扑图,该拓扑图描述了节点之间的连接关系和信号强度情况。
在使用DV-HOP算法进行定位时,我们首先需要选定一些已知位置的节点作为锚点,这些锚点节点将用于定位其他节点。
接着,我们通过计算节点之间的距离和信号强度,来推算出每个非锚点节点的位置信息。
在实验过程中,我们可以通过比较算法计算的位置信息和实际位置信息之间的误差来评估算法的性能。
通常情况下,误差越小,算法的性能越好。
需要注意的是,DV-HOP算法的定位精度受到多种因素的影响,如节点密度、信号传播特性、信噪比等。
因此,在进行实验时,我们需要对这些因素进行充分的考虑,以保证算法的准确性和可靠性。
总体而言,DV-HOP算法是一种较为常用的无线传感器网络定位算法,具有较高的定位精度和稳定性。
在实际应用中,我们可以根据具体情况选择合适的算法,并进行充分的实验验证,以提高定位精度和可靠性。
基于DV算法的路由器模拟设计与实现实验报告 精品

基于DV算法的路由器设计与实现实验报告学院:姓名:日期:一.实验目的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表示可达且跳数为该数值),如下图路由表左边方框中的信息所示:在路由表中,只登记下一跳而不是完整路由,以真实模拟路由器的DV算法处理。
路由技术方面的实习报告

实习报告:路由技术实习体验一、实习背景随着互联网的普及和发展,路由技术成为了网络技术领域中的重要组成部分。
为了更好地了解路由技术及其应用,提高自己在网络领域的实际操作能力,我选择了路由技术方面的实习。
在本报告中,我将分享我在实习期间的学习经历和收获。
二、实习内容1. 路由器的基本原理和配置在实习过程中,我首先学习了路由器的基本原理,包括路由器的硬件组成、工作原理以及路由选择的算法等。
此外,我还掌握了路由器的配置方法,包括静态路由和动态路由的配置,以及路由器的安全设置等。
2. 路由协议的学习通过实习,我深入了解了常用的路由协议,如RIP、OSPF和BGP等。
我学会了如何配置这些协议,并了解了它们在实际网络环境中的应用和优缺点。
此外,我还通过实际操作,掌握了路由协议的调试和故障排除方法。
3. 路由器性能测试在实习期间,我参与了路由器的性能测试工作。
通过使用各种测试工具,如ping、traceroute等,我学会了如何测试路由器的吞吐量、延迟和丢包率等性能指标。
这些测试有助于评估路由器的性能,并为网络优化提供依据。
4. 网络故障排查与优化实习过程中,我参与了网络故障的排查和优化工作。
通过分析网络拓扑和日志,我学会了如何定位网络故障,如路由器配置错误、链路故障等。
同时,我还学会了如何根据网络运行情况,对网络进行优化和调整,提高网络的性能和稳定性。
三、实习收获1. 理论知识与实践操作相结合通过实习,我将所学的路由技术理论知识与实际操作相结合,提高了自己的实践能力。
我学会了路由器的配置和调试,掌握了路由协议的配置和优化方法,为今后的工作打下了基础。
2. 团队协作与沟通能力的提升在实习过程中,我与同事们共同完成各项任务,学会了团队协作。
同时,通过与同事的交流和讨论,我提高了自己的沟通表达能力,增强了自信心。
3. 对路由技术的深入理解通过实习,我对路由技术有了更深入的理解。
我认识到路由技术不仅是网络通信的基础,而且在网络优化和故障排查中起着关键作用。
基于DV算法的路由器模拟设计与实现实验报告

基于DV算法地路由器设计与实现实验报告学院:姓名:日期:一.实验目地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表示可达且跳数为该数值),如下图路由表左边方框中地信息所示:在路由表中,只登记下一跳而不是完整路由,以真实模拟路由器地DV算法处理.转发分组时,严格按照路由表进行转发.如上图,路由器地连接信息在上面图片地左部区域,右部区域分为两部分(一个是路由器接到相邻路由器发来地路由表地实时-------我设置地是每1秒更新一次-------信息,一个是发送或者转发数据地显示信息).三.实验要求1.输出路由表:在此实验当中为了实现方便,所有拓扑结构中地路由器都给以显示(可达地,不可达地16以及自己地路由编号):要求对这个连接图地二维数组解读,进行DV算法地模拟.2.发送分组:每个数字代表一个数据分组发送请求;数据分组发送到数字代表地目地地;如果目地结点不是邻居结点,不能直接发送分组,而必须在路由地各个结点上沿路由转发该分组.收到数据分组地结点必须输出一行,显示该分组地目地,在图1中地右上角显示了每一秒地路由表地更新情况,每一个路由器都有三个转发进程,发送进程和接收进程.发送进程每一秒都需要发送自己地路由表信息.每一个路由器都给自己相邻地路由器设置了一个计时器,如果10秒钟没有收到相邻路由器地信息,就将下一跳设置成0,距离设置成16(表示不可达).否则重新开始计数.2.发送数据:数据分组必须有数据,且在如图1中地点击提交按钮之前,必须在文本框中输入正确地数据格式(传送地目地路由和要传送地数据之间必须要有“#”号分割),如:2003#DDDDDDD ,表示目地路由是2003,传送地数据是DDDDDDD.例如:路由器2006要向2001发送数据,则具体转发过程如下:在RouterTablePacket 中有Hops(初始值是16,每过一跳,hops 减1,当hops 是1地时候,就不再进行转发了,相当于TTL :Time to Live)属性,分组应该在Hops 规定地时间或步数内到达目地结点,否则丢弃之.分组经过每个中间结点时,将其TTL 减 1.若TTL=1,丢弃,否则继续转发. 3.关于时间定时:每个路由器每1秒钟发出它们地路由表;每个路由器根据收到地路由表更新它们自己地路由表;路由器必须具备检测邻居是否活动地能力,如果路由器在10秒钟没有收到邻居发来地更新,则认为邻居不可达.4.显示活动地相邻路由:用一个特定地表格来显示与当前路由相邻地路由器地信息.5.关于拓扑结构:路由器必须具备路由器故障和恢复地能力;这里假设链路不会出现故障,分组不会丢失和出错;如果路由器在给定时间内未运行,表示路由器故障,如果重启运行,则认为路由器故障恢复;当然,假设通信是双向地.四.实验用例编程语言:java;开发环境:jdk1.6.0_02、Myeclipse8.6,测试用例为二维数组地维数个(你可以随便写出一个对称地二维数组,程序可以自己解读地,我用地都是活代码),如下如所示我写地一个拓扑图地二维数组,如图:此实验是模仿DV算法,应用java中地多线程来模拟多个路由器,并且实现路由器之间地路由表和数据地传送.实验中路由表地数据结构相比真实地DV算法发生了变化,所以程序在实现过程当中尽量地按照实验所用地路由表结构来完成功能,但是这不影响其主要思想地实现.1.拓扑结构:为了模拟路由表地更新,首先是先确立六个结点网络地拓扑结构,由于是应用多线程来模拟各个路由器,所以在实验过程当中可以随时挂起某个或多个路由器来模拟网络拓扑地变化,之后仍然可以恢复挂起地路由器.网络地初始拓扑结构如图2图 2此处,路由表地端口号和路由器号全是来自entity/Constant.java文件地整个程序地全局变量,路由器初始值为2001,而端口初始值为5001,分别是数组初始化时地维数个.在实验实现过程当中,通过路由器线程地挂起实现网络拓扑结构地动态变化,之后会对相应地更该重新画出拓扑结构.2.路由表初始化:在程序地mainManager/RoutersInit.java 类中初始化了留个路由器,这六个路由器地每一个实现都是在mainManager/RouterThread.java类中,.以上图2地初始化二维数组中所规划地网络拓扑结构为标准,根据当前所创建地路由器编号静态初始化每个路由器自己地路由表.3.数据格式:各个路由器实例之间通过UDP来交换路由表,路由器之间还需要进行数据地传输.在此,需要定义所传输地路由表和数据地结构,我是全部打成了数据包或者路由表包,具体结构见transportPacket/RouterTablePacket.java(有sourceRouterId和routerTable两个属性),transportPacket/SendDataPacket.java(有sourceRouterId,destRouterId,byte[]data,hops=16四个属性),transportPacket/TotalPacket.java (有type,routerTablePacket,sendDataPacket 三个属性,TotalPacket类定义了具体具体是传输地包是什么类型地)三个类,如果是传输路由表就用RouterTablePacket把路由表包装后再用TotalPacket地sendRouterTable类型来包装,最后用UDP发送出去,如果是传输数据就用SendDataPacket把要传送地数据包装后再用TotalPacket地sendData类型来包装,最后用UDP发送出去,在目地路由器端对收到地数据进行解封装.五.程序描述为完成所要求功能,程序首先实现了二维数组维数个路由器线程,每一个路由器线程下面又实现了发送线程、接收线程和转发数据线程三个子线程;接收线程下面实现了定时器子线程.建立一个工程,命名为day12-02_DV_new_hasTimer(名字可以随便起,我是以前地习惯都加上了日期),在此工程下建立源程序文件,每个线程放在单独地java源程序文件当中.该实验还可以对其中一个路由器进行挂起,别地路由器在10秒后如果收不到这个路由器发来地路由表信息,就将其路由表中地与其对应地相应路由表地值进行修改成不可达,逐渐通知到整个网络.在这里有点不同于DV算法地是:DV算法是每个路由器为收到地路由表地每一个简历一个计时器,而该路由器简化了这个设计,是仅仅为相邻地路由器保留一个计时器,这样不仅可以大大减少整个网络地通信量,将计时器地信息保留在内存而不是在路由表中,而且采用了hashMap保存后在验证是否联通时,从hashMap中取数据方便快捷.六、实验结论在实验过程遇到了许多问题,一方面是编程语言地使用,另一方面是对路由算法地理解程度.三是计时器地用法,尤其是计时器地用法想了将近2个小时,最后通过不懈地调试与算法完善,程序基本实现所要求地功能,有能力模拟DV算法.DV算法地优缺点:DV算法简单,容易实现,对于好消息传播地速度快,但是对于坏消息则传播速度慢.package entity。
DV算法实验报告

DV算法实验报告一、实验目的通过自己写代码模拟路由器DV算法。
输入为路由器个数n,路由器i到路由器j的花费(i<n,i>j)。
输出为,稳定状态的路由表。
二、实验过程(1)输入路由器的相关信息(路由器个数,到邻居路由器的花费)(2)开始路由器间的信息交换(3)初始化flag为false。
每个路由器和邻居路由器交换信息。
若路由器i到路由器k的当前花费大于通过先到j再到k的花费,则更新路由表。
同时将flag设为true,表示有路由表发生变化(4)若flag为true则重复第三步。
否则输出各个路由器的路由表(5)程序结束三、实验结果假设输入的路由器扑拓图如下图:输出结果为:四、心得体会本次实验意义重大。
是一次把理论与实践的结合,是一次抽象到具体的转变。
之前在课堂上学习DV算法时,还有有点抽象,仅限在理论上讨论算法的能得到正确结果。
通过亲自编写代码,模拟路由器的工作过程,我对DV算法和路由器生成路由表的工作过程有了更深入的理解。
让我不再对网络课觉得恐惧。
import java.util.Scanner;public class DV {public static Router[] R=new Router[20];public static int MAX=10000;public static void main(String[] args) {// TODO Auto-generated method stubScanner s=new Scanner(System.in);System.out.print("Input the number of router: ");int num=s.nextInt();for(int i=0;i<20;i++){R[i]=new Router();}int cost;for(int i=0;i<20;i++){R[i].cost[i]=0;R[i].nexthop[i]=i;R[i].neighbour[i]=true;for(int j=i+1;j<num;j++){System.out.print("Input the cost from "+i+" to "+j+": ");cost=s.nextInt();if(cost<MAX){R[i].cost[j]=cost;R[j].cost[i]=cost;R[i].nexthop[j]=j;R[j].nexthop[i]=i;R[i].neighbour[j]=true;R[j].neighbour[i]=true;}}}boolean flag=true;while(flag){flag=false;for(int i=0;i<num;i++){boolean f=R[i].changeAll(R);if(f==true){flag=true;}}}for(int i=0;i<num;i++){System.out.println("Router["+i+"]");R[i].printRoutingTable(num);}}}class Router{boolean[] neighbour=new boolean[20];int[] cost=new int[20];int[] nexthop=new int[20];public Router(){for(int i=0;i<20;i++){this.neighbour[i]=false;this.cost[i]=10000;this.nexthop[i]=i;}}public boolean change(Router r,int k){boolean flag=false;for(int i=0;i<20;i++){if(this.cost[i]>this.cost[k]+r.cost[i]){this.cost[i]=this.cost[k]+r.cost[i];this.nexthop[i]=k;if(this.neighbour[i]=false){this.neighbour[i]=true;flag=true;}}}return flag;}public boolean changeAll(Router[] router){ boolean flag=false;for(int i=0;i<20;i++){if(this.neighbour[i]==true){boolean f=this.change(router[i],i);if(f==true)flag=true;}}return flag;}public void printRoutingTable(int n){System.out.println("dest cost nexthop");for(int i=0;i<n;i++){System.out.println(i+" "+this.cost[i]+" "+this.nexthop[i]);}}}。
距离矢量_DV_算法分析实验

目的地址 202.112.130.0
下一跳 B
路由器A的路由表
跳数 1
北航计算机网络实验
路由器收到一条Rip选路信息后的计算过程
每个当路由器收到相邻路由器R发来的一个跳数为 M、目的地址为D的更新消息时,会将收到的路由信息 与自己的路由表进行比较,如果
1. 没有到D这个网段的路由表项存在,则生成路由表项(D、 M+1,R),其中跳数为M+1;
5
北航计算机网络实验
DV算法分析实验组网图
E0:192.168.2.2/24 R1 E1:192.168.3.1/24
E0/13
Vlan1:192.168.2.1/24
Loop1:
192.168.1.1/24
S1
E0/1 E0/2
Vlan1:192.168.3.2/24 E0/13
S2
E0/1
E0/2
PCA
PCB
PCC
PCD
Ip:192.168.2.10/24 Ip:192.168.2.11/24 Gw:192.168.2.1 Gw:192.168.2.1 Ip:192.168.3.10/24
Gw:192.168.3.2 注:交换机S1和S2各端口都在vlan1 中。
Ip:192.168.3.11/24 Gw:192.168.3.2
6
北航计算机网络实验
DV算法分析实验关键实验步骤说明
1. 按组网图连接好各设备,配置各设备的IP地址, 配置计算机的IP地址和默认网关。各路由器 和交换机分别配置RIP协议。
2. 在各台计算机上运行Wireshark,观察截取 到的报文。
3. 按照指导书上的步骤对截取的报文进行分析, 理解距离矢量算法的计算过程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于DV算法的路由器设计与实现实验报告学院:姓名:日期:一.实验目的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表示可达且跳数为该数值),如下图路由表左边方框中的信息所示:在路由表中,只登记下一跳而不是完整路由,以真实模拟路由器的DV算法处理。
转发分组时,严格按照路由表进行转发。
如上图,路由器的连接信息在上面图片的左部区域,右部区域分为两部分(一个是路由器接到相邻路由器发来的路由表的实时-------我设置的是每1秒更新一次-------信息,一个是发送或者转发数据的显示信息)。
三.实验要求1.输出路由表:在此实验当中为了实现方便,所有拓扑结构中的路由器都给以显示(可达的,不可达的16以及自己的路由编号):要求对这个连接图的二维数组解析,进行DV算法的模拟。
2.发送分组:每个数字代表一个数据分组发送请求;数据分组发送到数字代表的目的地;如果目的结点不是邻居结点,不能直接发送分组,而必须在路由的各个结点上沿路由转发该分组。
收到数据分组的结点必须输出一行,显示该分组的目的,在图1中的右上角显示了每一秒的路由表的更新情况,每一个路由器都有三个转发进程,发送进程和接收进程。
发送进程每一秒都需要发送自己的路由表信息。
每一个路由器都给自己相邻的路由器设置了一个计时器,如果10秒钟没有收到相邻路由器的信息,就将下一跳设置成0,距离设置成16(表示不可达)。
否则重新开始计数。
2.发送数据:数据分组必须有数据,且在如图1中的点击提交按钮之前,必须在文本框中输入正确的数据格式(传送的目的路由和要传送的数据之间必须要有“#”号分割),如:2003#DDDDDDD,表示目的路由是2003,传送的数据是DDDDDDD。
例如:路由器2006要向2001发送数据,则具体转发过程如下:在RouterTablePacket 中有Hops(初始值是16,每过一跳,hops减1,当hops是1的时候,就不再进行转发了,相当于TTL:Time to Live)属性,分组应该在Hops规定的时间或步数到达目的结点,否则丢弃之。
分组经过每个中间结点时,将其TTL减1。
若TTL=1,丢弃,否则继续转发。
3.关于时间定时:每个路由器每1秒钟发出它们的路由表;每个路由器根据收到的路由表更新它们自己的路由表;路由器必须具备检测邻居是否活动的能力,如果路由器在10秒钟没有收到邻居发来的更新,则认为邻居不可达。
4.显示活动的相邻路由:用一个特定的表格来显示与当前路由相邻的路由器的信息。
5.关于拓扑结构:路由器必须具备路由器故障和恢复的能力;这里假设链路不会出现故障,分组不会丢失和出错;如果路由器在给定时间未运行,表示路由器故障,如果重启运行,则认为路由器故障恢复;当然,假设通信是双向的。
四.实验用例编程语言:java;开发环境:jdk1.6.0_02、Myeclipse8.6,测试用例为二维数组的维数个(你可以随便写出一个对称的二维数组,程序可以自己解析的,我用的都是活代码),如下如所示我写的一个拓扑图的二维数组,如图:此实验是模仿DV算法,应用java中的多线程来模拟多个路由器,并且实现路由器之间的路由表和数据的传送。
实验中路由表的数据结构相比真实的DV算法发生了变化,所以程序在实现过程当中尽量的按照实验所用的路由表结构来完成功能,但是这不影响其主要思想的实现。
1.拓扑结构:为了模拟路由表的更新,首先是先确立六个结点网络的拓扑结构,由于是应用多线程来模拟各个路由器,所以在实验过程当中可以随时挂起某个或多个路由器来模拟网络拓扑的变化,之后仍然可以恢复挂起的路由器。
网络的初始拓扑结构如图2所示:在程序的mainManager/RoutersInit.java 类中初始化了留个路由器,这六个路由器的每一个实现都是在mainManager/RouterThread.java类中,。
以上图2的初始化二维数组中所规划的网络拓扑结构为标准,根据当前所创建的路由器编号静态初始化每个路由器自己的路由表。
3.数据格式:各个路由器实例之间通过UDP来交换路由表,路由器之间还需要进行数据的传输。
在此,需要定义所传输的路由表和数据的结构,我是全部打成了数据包或者路由表包,具体结构见transportPacket/RouterTablePacket.java(有sourceRouterId和routerTable两个属性),transportPacket/SendDataPacket.java(有sourceRouterId,destRouterId,byte[]data,hops=16四个属性),transportPacket/TotalPacket.java(有type,routerTablePacket,sendDataPacket 三个属性,TotalPacket类定义了具体具体是传输的包是什么类型的)三个类,如果是传输路由表就用RouterTablePacket把路由表包装后再用TotalPacket的sendRouterTable类型来包装,最后用UDP发送出去,如果是传输数据就用SendDataPacket把要传送的数据包装后再用TotalPacket的sendData类型来包装,最后用UDP发送出去,在目的路由器端对收到的数据进行解封装。
五.程序描述为完成所要求功能,程序首先实现了二维数组维数个路由器线程,每一个路由器线程下面又实现了发送线程、接收线程和转发数据线程三个子线程;接收线程下面实现了定时器子线程。
建立一个工程,命名为day12-02_DV_new_hasTimer (名字可以随便起,我是以前的习惯都加上了日期),在此工程下建立源程序文件,每个线程放在单独的java源程序文件当中。
该实验还可以对其中一个路由器进行挂起,别的路由器在10秒后如果收不到这个路由器发来的路由表信息,就将其路由表中的与其对应的相应路由表的值进行修改成不可达,逐渐通知到整个网络。
在这里有点不同于DV算法的是:DV 算法是每个路由器为收到的路由表的每一个简历一个计时器,而该路由器简化了这个设计,是仅仅为相邻的路由器保留一个计时器,这样不仅可以大大减少整个网络的通信量,将计时器的信息保留在存而不是在路由表中,而且采用了hashMap保存后在验证是否联通时,从hashMap中取数据方便快捷。
六、实验结论在实验过程遇到了许多问题,一方面是编程语言的使用,另一方面是对路由算法的理解程度。
三是计时器的用法,尤其是计时器的用法想了将近2个小时,最后通过不懈的调试与算法完善,程序基本实现所要求的功能,有能力模拟DV 算法。
DV算法的优缺点:DV算法简单,容易实现,对于好消息传播的速度快,但是对于坏消息则传播速度慢。
package entity;/*** 常量类* author 郭金磊*since 20131220*/public class Constant {/*** return 返回路由Id的初试值*/public static int getRouterIdBasic(){ return 2001;}/*** return 返回路由端口的初试值*/public static int getPortBasic(){ return 5001;}}package entity;/*** 初始化的网络拓扑图* author 郭金磊*since 20131220*/public class NetMap {/*** return 返回初始化的网络图*/public int[][] getInitInternetMap(){int[][] initVecter=new int[][]{{0,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 = -04L;/*** 路由ID*/private int routerId;/*** 路由端口*/private int port;/*** 路由表*/private RouterTable RouterTable;/*** 存储计时器的Map*/private HashMap<Integer,TimeCounter> createTimerMapsForNeighbers=new HashMap<Integer,TimeCounter>();/*** 存储上一次该路由器收到某个路由器的路由表时间*/private HashMap<Integer,Long> lastTimeMaps=new HashMap<Integer,Long>();/*** 默认的构造方法*/public Router() {super();}/*** 有参数routerId和port的构造方法*/public Router(int routerId, int port) {super();this.routerId = routerId;this.port = port;}/*** 有参数routerId和port和routerTable的构造方法*/public Router(int routerId, int port, RouterTable routerTable) { super();this.routerId = routerId;this.port = port;RouterTable = routerTable;}/*** getters 和setters方法* return 相应的属性值*/public int getRouterId() {return routerId;}/*** getters 和setters方法*/public void setRouterId(int routerId) { this.routerId = routerId;}/*** getters 和setters方法* return 相应的属性值*/public int getPort() {return port;}/*** getters 和setters方法*/public void setPort(int port) {this.port = port;}/*** getters 和setters方法* return 相应的属性值*/public RouterTable getRouterTable() {return RouterTable;}/*** getters 和setters方法* return 相应的属性值*/public void setRouterTable(RouterTable routerTable) {RouterTable = routerTable;}/*** getters 和setters方法* return 相应的属性值*/public HashMap<Integer, TimeCounter> getCreateTimerMapsForNeighbers() {return createTimerMapsForNeighbers;}/*** getters 和setters方法* return 相应的属性值*/public void setCreateTimerMapsForNeighbers(HashMap<Integer, TimeCounter> createTimerMapsForNeighbers) { this.createTimerMapsForNeighbers = createTimerMapsForNeighbers;}/*** getters 和setters方法* return 相应的属性值*/public HashMap<Integer, Long> getLastTimeMaps() {return lastTimeMaps;}/*** getters 和setters方法* return 相应的属性值*/public void setLastTimeMaps(HashMap<Integer, Long> lastTimeMaps) { stTimeMaps = lastTimeMaps;}/*** tostring方法*/Overridepublic String toString() {return "Router [routerId=" + routerId + ", port=" + port+ ", RouterTable=" + RouterTable + "]";}}package entity;import java.io.Serializable;import java.util.Arrays;/*** 路由表实体类* author 郭金磊*since 20131220*/public class RouterTable implements Serializable{/*** 产生全局唯一的序列化的实体ID*/private static final long serialVersionUID = 31L;/*** 为每一个路由器设置一个下一跳的数组*/private int [] nextHop;/*** 为每一个路由器设置一个距离的数组*/private int [] distance;/*** 有参数routerId和port的构造方法*/public int[] getDistance() {return distance;}/*** getters 和setters方法* return 相应的属性值*/public void setDistance(int[] distance) { this.distance = distance;}/*** getters 和setters方法* return 相应的属性值*/public int[] getNextHop() {return nextHop;}/*** getters 和setters方法* return 相应的属性值*/public void setNextHop(int[] nextHop) { this.nextHop = nextHop;}/*** tostring方法*/Overridepublic String toString() {return "RouterTable [distance=" + Arrays.toString(distance) + ", nextHop=" + Arrays.toString(nextHop) + "]";}}package entity;import java.util.Timer;import java.util.TimerTask;/*** 计时器类,用于判断是否路由器的联通* author 郭金磊*since 20131220*/public class TimeCounter {/*** 得到邻居的路由器ID*/private int sourceRouterId;/*** 得到本身路由器*/private Router router;/*** 每个这个类一个计时器*/private Timer timer=new Timer();/*** getters 和setters方法* return 相应的属性值*/public int getSourceRouterId() {return sourceRouterId;}/*** getters 和setters方法* return 相应的属性值*/public void setSourceRouterId(int sourceRouterId) { this.sourceRouterId = sourceRouterId;}/*** getters 和setters方法* return 相应的属性值*/public Router getRouter() {return router;}/*** getters 和setters方法* return 相应的属性值*/public void setRouter(Router router) {this.router = router;}/*** 默认的构造方法*/public TimeCounter() {super();}/*** 带参数的构造方法* param sourceRouterId 邻居的路由器ID* param router 得到本身路由器,可以得到本身路由器的很多信息*/public TimeCounter(int sourceRouterId, Router router) {super();this.sourceRouterId = sourceRouterId;this.router = router;}/*** 开启计时器*/public void start() {final long lastTime=router.getLastTimeMaps().get(sourceRouterId);timer.schedule(new TimerTask() {Overridepublic void run() {if(lastTime==router.getLastTimeMaps().get(sourceRouterId)){for(int i=0;i<new NetMap().getInitInternetMap().length;i++){if(router.getRouterTable().getNextHop()[i]==sourceRouterId){router.getRouterTable().getDistance()[i]=16;router.getRouterTable().getNextHop()[i]=0;}}}else{timer.cancel();}}}, 10 * 1000);}/*** 关闭该计时器*/public void close() {timer.cancel();}}package main;import java.awt.BorderLayout;import java.awt.Color;import javax.swing.JFrame;import javax.swing.JTextArea;import mainManager.RouterThread;import mainManager.RoutersInit;import Map;import entity.Router;/*** 主进入界面,进入程序的主控制接口* author 郭金磊*since 20131220*/public class RoutersStart extends JFrame{/*** 产生全局唯一的序列化的实体ID*/private static final long serialVersionUID = -52L;/*** 建立一个全局的JTextArea,用来关闭时窗口是,关闭整个进程而不是线程*/private JTextArea router_MainArea;/*** 初始化多少个路由器*/public RoutersStart(){super("router_MainProcess");router_MainArea=new JTextArea();getContentPane().add(router_MainArea,BorderLayout.CENTER);router_MainArea.append("\n\n\n开始模拟"+new NetMap().getInitInternetMap().length+"个路由器的距离向量路由算法...");setBounds(150,150,500,400);router_MainArea.setBackground(Color.lightGray);setBackground(Color.DARK_GRAY);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);int length=new NetMap().getInitInternetMap().length;Router[] routers=new RoutersInit().getInitRouters();for(int i=0;i<length;i++){new Thread(new RouterThread(routers[i])).start();}}/*** 主程序的入口* param args 默认的参数,此处不用参数*/public static void main(String[] args) {new RoutersStart();}}package mainManager;import entity.Constant;import Map;import entity.Router;import entity.RouterTable;/*** 读取拓扑图的二维数组数据,来初始化二维数组维数个路由器线程* author 郭金磊*since 20131220*/public class RoutersInit {/*** 初始化路由器数组* return 得到初始化的几个路由器*/public Router[] getInitRouters() {int[][] initNetMap=new NetMap().getInitInternetMap();Router[] routers=new Router[initNetMap.length];RouterTable [] routerTables=new RouterTable[initNetMap.length];for(int i=0;i<initNetMap.length;i++){routers[i]=newRouter(Constant.getRouterIdBasic()+i,Constant.getPortBasic()+i);routerTables[i]=new RouterTable();routerTables[i].setDistance(initNetMap[i]);int [] nextHop=new int[initNetMap.length];for(int j=0;j<initNetMap.length;j++){if(initNetMap[i][j]==1){nextHop[j]=Constant.getRouterIdBasic()+j;}else{nextHop[j]=0;}}routerTables[i].setNextHop(nextHop);routers[i].setRouterTable(routerTables[i]);System.out.println(routers[i]);}return routers;}}package mainManager;import java.awt.BorderLayout;import java.awt.Color;import java.awt.GridLayout;import java.awt.HeadlessException;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectOutputStream;import .DatagramPacket;import .DatagramSocket;import .InetAddress;import .SocketException;import .UnknownHostException;import java.util.Arrays;import javax.swing.JButton;import javax.swing.JCheckBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;import totalThreads.ForwardThread;import totalThreads.ReceiveThread;import totalThreads.SendThread;import transportPacket.SendDataPacket;import transportPacket.TotalPacket;import entity.Constant;import Map;import entity.Router;import entity.RouterTable;/*** 每一个路由器都有的路由器线程* author 郭金磊*since 20131220*/public class RouterThread extends JFrame implements Runnable { /*** 产生全局唯一的序列化的实体ID*/private static final long serialVersionUID = -05L;/*** 每一个路由器线程一个路由器实体*/private Router router;/*** 每一个路由器实体一个接受路由表线程*/private DatagramSocket receiveSocket =null;/*** 每一个路由器实体一个接受转发的数据线程private DatagramSocket receiveDataSocket =null;/*** 每个路由器线程一个接受线程*/private ReceiveThread receiveThread=null;/*** 每个路由器线程一个发送线程*/private SendThread sendThread=null;/*** 每个路由器线程一个转发线程*/private ForwardThread forwardThread=null;/*** 每个路由器线程一个主窗口*/private JFrame routerFrame;/*** 有三个显示路由器信息的JTextArea,一个路由表,一个路由表的更新信息,一个是发送数据的显示信息*/private JTextArea routerAreaLeft,routerAreaRightNorth,routerAreaRightSouth; // 构造路由器窗口的组件。