链路状态路由算法原理实验教案
- 格式:ppt
- 大小:396.50 KB
- 文档页数:15
OSPF技术原理与案例OSPF(Open Shortest Path First)是一种基于链路状态(Link State)的路由协议,用于在IP网络中确定最佳路径和路由。
该协议使用Dijkstra算法来计算最短路径,并根据链路成本选择最佳路由。
本文将阐述OSPF的技术原理,并提供一些OSPF技术案例。
一、OSPF技术原理:1.路由器要求:OSPF要求所有参与路由计算的路由器运行OSPF协议,并共享链路状态信息。
2.链路状态广播:每个路由器通过发送链路状态公告(LSA)向周围的路由器广播自己的链路状态信息,并接收其他路由器的链路状态信息。
3.构建拓扑图:路由器将收到的链路状态信息存储在链路状态数据库(LSDB)中,并使用这些信息构建网络拓扑图。
4. Dijkstra算法:路由器使用Dijkstra算法计算最短路径树(SPF tree),确定到达每个目的地的最佳路径,并将该路径存储在路由表中。
5.链路状态更新:当链路状态发生变化(例如链路故障或链路成本改变)时,路由器会周期性地将更新的链路状态信息广播给周围的路由器。
6.最佳路径选择:路由器通过比较链路成本来选择最佳路径,并更新路由表中的路径信息。
二、OSPF技术案例:1.多区域OSPF:在大型企业网络中,可以使用多区域OSPF来减少链路状态信息的传播范围,提高网络的可扩展性和性能。
每个区域在逻辑上相互隔离,但通过区域边界路由器(ABR)连接起来。
ABR负责转发区域之间的路由信息,并维护整个网络的链路状态。
2.OSPF负载均衡:OSPF支持负载均衡,可以在多条等价路径中分担流量。
路由器使用平等的成本算法将流量分配到不同的路径上,提高网络的容量和性能。
3.OSPF区域间路由:当有多个区域在企业网络中时,OSPF可以提供区域间路由功能,以支持不同区域之间的通信。
区域之间的通信通过ABR 完成。
4.OSPF虚拟链路:OSP协议支持创建虚拟链路,用于在不同区域之间建立逻辑上的直连连接。
路由算法之链路状态路由算法LS 把我与谁连接告诉所有的路由器,那么所有的路由器就都具有了⼀幅⽹络图由这副图计算每条具体的路径所以实现的关键在于链路状态信息的可靠分发根据链路状态信息计算路由步骤1. 发现邻接点, 获得邻居的⽹络地址.每⼀个点对点链路发送 HELLO 分组邻居返回响应多个路由器通过LAN连接,路有器的⼀个端⼝有多个邻居,如何抽象?把 LAN 当做⼀个节点 LAN上指定的⼀个路由器来运⾏路由协议2. 测量到每⼀个邻居的代价发送⼀个 ECHO 分组,邻居迅速返回响应测量往返时间, / 2即是到邻居的延迟多测⼏次取平均值3. 构造链路状态分组(邻居信息)LSP (Link-State Packet,链路状态分组)和路由计算相关的项产⽣ LSP节点的ID直接相连的邻居列表到每个邻居的代价和可靠性相关的项序号( sequence number),区分新旧消息年龄( age)更新计时器超时通常⼏⼗分钟⽹络变化时直接连接的链路断开可以⽤链路层协议检测直接连接的邻居下线通过定期发送 “hello” 检测4. 分发链路状态包(发送给所有其它路由器).⽬的:保证所有参加路由的节点得到其它所有节点的链路状态信息的⼀个拷贝⽅法:可靠泛洪(Reliable Flooding)将 LSP发送到所有直接相连的链路收到 LSP 的节点将它转发到所有其它链路存储每个节点的最新 LSP向所有相邻节点转发每个LSP,但不发送给发来该LSP的节点相邻路由器之间有确认和重传的机制控制泛洪规模Packet: 包含⼀个序号保证拥有最新 copy序号存在的问题问题1:序号回转解决:使⽤⼤的序号空间,如32bit问题2:⼀个路由器崩溃了, 将丢失所有序号记录,恢复后从0开始,将会拒绝正常分组问题3:序号本⾝被破坏解决增加 age域 (TTL) 每经过⼀个路由器,age递减 Age=0,抛弃Router: 记录见过的分组 ( router, sequence number )如果 LSP 是 duplicate , 就丢弃Duplicate: LSP序号 is lower当⼀个 LSP 到来时, it wait a short while, ⽽不是⽴即转发当⼀个 LSP 到来, 先放到⼀个保留区等⼀会有新 LSP 到来, ⽐较序号相等,是重复分组,不再转发不同,⽐较年龄,丢弃旧的分组5. 计算到每个节点的最短路径优缺点优点没有慢收敛问题,对坏消息响应迅速代价存储空间开销存储所有的链路状态分组CPU 开销任何拓扑变化都要重新计算最⼩代价树⽐较和 DV对⽐,都要交流信息DV(距离向量)Who: 邻居What:距离向量,可能有不确定(道听途说)的消息使⽤最短路径优先算法,算法复杂度为O(n^2) n个结点(不包括源结点),需要n*(n+1)/2 次⽐较使⽤更有效的实现⽅法,算法复杂度可以达到O(nlogn) 可能存在路由振荡(oscillations)结点会⼴播错误的链路开销每个结点只计算⾃⼰的路由表LS(链路状态)Who: 所有路由器What :LSP,仅通告确定的消息收敛时间不定可能会出现路由循环结点会⼴播错误的路径开销每个结点的路由表被别的结点使⽤,错误会传播到全⽹。
链路状态路由算法的实现一.实验内容与要求1.程实现右图所示简单网络拓扑的链路状态路由算法。
1.1 结点之间的连接关系固定;1.2 链路开销可以由用户设定。
2.链路状态算法的实现:2.1 链路状态消息的交换(可选,简单起见,可基于静态网络拓扑运行Dijkstra算法);2.2 网络拓扑的描述/构造;2.3 利用Dijkstra算法计算路由;2.4 路由表的输出。
3.网络拓扑结构的描述(数据结构),拓扑结构利用文件存储。
4.用可视化界面进行程序演示。
二.实验环境与知识1、实验的运行环境Windows 7 QTcreator QT4.8 编程语言C++ 2、实验的基础知识算法思想按路径长度递增次序产生最短路径算法:把顶点集合V分成两组:(1)S:已求出最短路径的顶点的集合(初始时只含有源点V0)(2)V-S=T:尚未确定最短路径的顶点集合将T中顶点按最短路径递增的次序加入到S中,保证:(1)从源点V0到S中其他各顶点的最短路径长度都不大于从V0到T中任何顶点的最短路径长度(2)每个顶点对应一个距离值S中顶点:从V0到此顶点的最短路径长度T中顶点:从V0到此顶点的只包括S中顶点作中间顶点的最短路径长度依据:可以证明V0到T中顶点Vk的最短路径,或是从V0到Vk的直接路径的权值;或是从V0经S中顶点到Vk的路径权值之和(反证法可证)三.实验程序的设计流程1、设计思路1.1算法思路的设计首先,引进一个辅助向量D,它的每个分量D表示当前所找到的从始点v到每个终点vi的最短路径的长度。
如D[3]=2表示从始点v到终点3的路径相对最小长度为2。
这里强调相对就是说在算法过程中D的值是在不断逼近最终结果但在过程中不一定就等于最短路径长度。
它的初始状态为:若从v到vi有弧,则D为弧上的权值;否则置D 为∞。
显然,长度为D[j]=Min{D | vi∈V} 的路径就是从v出发的长度最短的一条最短路径。
此路径为(v,vj)。
路由技术教案教案标题:路由技术教案目标:1. 了解路由技术的基本概念和原理。
2. 掌握路由器的配置和管理方法。
3. 能够应用路由技术解决网络通信问题。
教案步骤:一、导入(5分钟)1. 引入话题:什么是路由技术?为什么我们需要路由技术?2. 提出问题:在网络通信中,我们经常会遇到什么样的问题?如何解决这些问题?二、讲解路由技术的基本概念和原理(15分钟)1. 介绍路由器的基本功能和作用。
2. 解释路由表的概念和作用。
3. 讲解路由选择算法的原理和常见的算法类型。
三、演示路由器的配置和管理方法(20分钟)1. 演示如何配置路由器的基本参数,如IP地址、子网掩码等。
2. 演示如何配置路由表,添加和删除路由条目。
3. 演示如何进行路由器的故障排除和管理。
四、实践操作(30分钟)1. 学生分组进行实践操作,配置一个简单的网络拓扑。
2. 学生通过配置路由器和路由表,实现网络中不同子网之间的通信。
五、总结和扩展(10分钟)1. 总结本节课所学内容,强调路由技术的重要性和应用场景。
2. 提出拓展问题:在实际网络中,我们还可以使用哪些高级的路由技术来优化网络性能?六、作业布置(5分钟)1. 要求学生阅读相关的路由技术文献或教材,进一步了解和掌握路由技术。
2. 布置实践作业:要求学生在家庭网络中配置路由器,实现不同设备之间的互联。
教案评估:1. 学生在实践操作中的表现和结果。
2. 学生对于路由技术的理解和应用能力。
3. 学生在课堂讨论和回答问题中的参与度和表现。
教案扩展:1. 可以进一步讲解路由协议的原理和分类。
2. 可以引入网络安全的概念,讲解如何使用路由技术来增强网络的安全性。
3. 可以进行实验室实践,使用模拟器或实际设备进行复杂网络拓扑的配置和管理。
实验5-5:路由器的OSPF路由1.实验目的路由器的基本使用和基本配置是本实验要达到的主要目标,本课程陆续开设的实验课,会对教材讲授到的基本原理进行验证,加深基本知识和基本技能的掌握。
主要掌握以下路由器的基本操作:1)通过路由建立起网络之间的连接。
2)熟悉路由器的基本操作命令,并掌握组网的基本技术。
3)掌握距离链路状态路由选择协议中OSPF的基本配置方法。
2.实验环境和要求2.1实验拓扑2.2实验器材1)路由器两台2)交换机两台3)学生实验主机4)网线若干。
请注意主机与交换机,交换机与路由器之间使用直通线。
路由器与路由器之间使用交叉线。
2.3实验要求给定3个C类网络地址:192.168.6.0/24,192.168.7.4/30,192.168.8.0/24。
1)请按实验网络拓扑作出网络规划。
2)并写出路由器的端口地址和各节点网络地址。
3)配置动态路由,使R1和R2两边的机器能够互相连通。
3.实验步骤(参考)3.1按实验图连接线路(可自行设计)设备各接口的IP地址配置表如下:(可自行规划和分配)设备接口IPv4地址默认网关Fa0/0192.168.6.1/24未配置路由器R1Fa0/1192.168.7.5/30未配置Fa0/0192.168.8.1/24未配置路由器R2Fa0/1192.168.7.6/30未配置交换机SW1和SW2无须做任何配置,做傻瓜交换机用PC1FastEthernet192.168.6.0/24中的一个192.168.6.1PC2FastEthernet192.168.6.0/24中的一个192.168.8.13.2两个路由器的初始化配置(参考配置,可自行设计修改)3.2.1R1配置1)登录路由器R1,进入普通用户模式R1>2)键入enable进入超级用户模式R1#3)使用configure terminal进入全局配置模式R1(config)#配置FastEthernet0/0端口1.R1(config)#interface FastEthernet0/02.R1(config-if)#ip address192.168.6.1255.255.255.03.R1(config-if)#no shutdown配置FastEthernet0/1端口1.R1(config)#interface FastEthernet0/12.R1(config-if)#ip address192.168.7.5255.255.255.2523.R1(config-if)#no shutdown3.2.2R2配置参看R1配置方法进入全局配置模式R2(config)#配置FastEthernet0/0端口1.R2(config)#interface FastEthernet0/02.R2(config-if)#ip address192.168.8.1255.255.255.03.R2(config-if)#no shutdown配置FastEthernet0/1端口1.R2(config)#interface FastEthernet0/12.R2(config-if)#ip address192.168.7.6255.255.255.2523.R2(config-if)#no shutdown效果:此时两路由器的端口都应是UP,并两路由器的FastEthernet0/1端口能ping通,FastEthernet0/0端口和下接的本网段主机能ping通,但两网段的主机还不通,无法互访。
电子科技大学通信学院《计算机通信网实验报告》链路状态路由算法原理实验班级学生学号教师实验3:链路状态路由算法原理实验报告【实验目的】1、要求实验者利用路由选择算法模拟软件提供的通信功能,模拟链路状态路由选择算法的初始化、路由信息扩散过程和路由计算方法;2、掌握链路状态算法的路由信息扩散过程;3、掌握链路状态算法的路由计算方法。
【实验环境】1、分组实验,每组4~10人。
2、拓扑:虚线表示节点之间的逻辑关系,构成一个逻辑上的网状拓扑结构。
3、设备:小组中每人一台计算机。
4、实验软件:路由选择算法模拟软件(routing.exe )【实验原理】(请根据实验指导书和课程相关只是填写,包括链路状态路由算法的基本原理,实验软件的基本功能等)【实验步骤】1、建立实验小组。
2、按照链路状态算法完成路由信息扩散和路由计算过程。
3、链路状态算法收敛后,向路由表中列出的每个非直连节点发送路由测试数据,完成路由测试过程。
4、汇总实验小组的实验记录信息,检查路由是否正确。
如果有错误,分析并发现错误产生的原因。
5、将实验从头多做几次,观察如果各节点发送信息和接收处理信息的过程不一样,是否会影响路由表的正确形成。
如在第一次实验时,节点接收一份路由信息后,N路由节点2路由节点N-1N = 4 ~ 10处理,再发送出新的路由信息,而第二次实验时,节点将当前所有的路由信息处理完后,才发送新的路由信息。
6、小组讨论将拓扑中的一条链路断掉,然后通过实验观察路由协议是如何适应这个变化的。
8、完成实验报告。
【实验记录】按照实验记录内容格式要求记录以下内容(不够请另附纸张):1、实验小组的建立要求记录:小组名称、成员数量、本节点编号、本地直连链路表和据此形成的路由表。
2、链路状态算法的路由扩散和路由计算过程要求记录:每次发送、接收的路由信息和根据接收信息所形成的路由表。
3、链路状态算法的路由测试过程要求记录:●源节点:路由测试数据的源、目的、下一跳节点和数据内容;●中继节点:接收到的路由测试数据的源和目的、能否转发和转发的下一跳节点。
实验三路由配置[参考文件夹”文档“的”Packet_Tracer图文教程”]第一部分:路由器静态路由配置【实验目的】1、掌握静态路由配置方法和技巧;2、掌握通过静态路由方式实现网络的连通性;3、熟悉广域网线缆的方式。
【实验背景】学校有新旧两个校区,每个校区是一个独立的局域网,为了使新旧校区能够正常相互通讯,共享资源。
每个校区出口利用一台路由器进行,两台路由器间学校申请了一条2M的DDN专线进行相连,要求做适当配置实现两个校区的正常相互访问。
技术原理:1、路由器属于网络层设备,能够根据IP的信息,选择一条最佳路径,将数据报出去,实现不同网段的主机之间的互相访问。
路由器是根据路由表进行选路和转发的,而路由表里就是由一条条路由信息组成。
2、生成路由表主要有两种方法:手工配置和动态配置,即静态路由协议配置和动态路由协议配置。
3、静态路由是指网络管理员手工配置的路由信息。
4、静态路由除了具有简单、高效、可靠的有点外,它的另一个好处是网络安全性高。
5、缺省路由可以看做是静态路由的一种特殊情况。
当数据在查找路由表时,没有找到目标相匹配的路由表项时,为数据指定路由。
【实验步骤】新建packet tracer拓扑图1、在路由器R1、R2上配置接口的IP地址和R1串口上的时钟频率;2、查看路由表生成的直连路由;3、在路由表R1、R2上配置静态路由;4、验证R1、R2上的静态路由配置;5、将PC1、PC2主机默认网关分别设置为路由器接口fa1/01的IP地址;6、PC1、PC2主机之间可以相互通信。
【实验设备】PC 2台;Router-PT可扩展路由2台(Switch_2811无V.35线接口);Switch_2960 2台;DCE串口线;直连线;交叉线PC1IP:192.168.1.2Submask:255.255.255.0Gateway:192.168.1.1PC2IP:192.168.2.2Submask:255.255.255.0Gateway:192.168.2.1R1enconfthostname R1int fa 1/0no shutip address 192.168.1.1 255.255.255.0exitint serial 2/0no shutip address 192.168.3.1 255.255.255.0clock rate 64000(必须配置时钟才可通信)endR2enconfthostname R2int fa 1/0no shutip address 192.168.2.1 255.255.255.0exitint serial 2/0no shutip address 192.168.3.2 255.255.255.0no shutendR1enconftip route 192.168.2.0 255.255.255.0 192.168.3.2endshow ip routeR2enconftip route 192.168.1.0 255.255.255.0 192.168.3.1endshow ip route第二部分:路由器RIP动态路由配置【实验目的】1、掌握RIP协议的配置方法;2、掌握查看通过动态路由协议RIP学习产生的路由;3、熟悉广域网线缆的方式。
学会IS-IS路由重分发的基本配置和原理实验环境:实验要求:以R3为界,左边运行ISIS协议,右边运行RIP ,R3相当于OSPF中的ASBR。
R1为ISIS的level-1类型属于区域1R2为ISIS的level-1-2类型,也是属于区域1,R3为level-2-only类型,单独属于另一个区域,相当于OSPF的ASBRR4运行RIP协议在R3上实现路由重分发,实现全网互通IS-IS的基本原理1.IS-IS是链路状态路由协议,使用SPF算法计算出到达目的网络的最优路径生成路由表。
2.使用Hello包建立邻居关系,使用LSP交换链路状态信息,采用分层设计。
3.有两种路由选择级别,L1和L2,L1负责在同一个区域内传递链路状态信息,L2负责在不同的区域间传递链路状态信息。
4.三种路由器,L1能获取区域内的路径信息,L2能获取区域间的路径信息,L1-2能同时获取域内和域间的路径。
5.连接L2路由器和L1-2路由器的路径会形成骨干区域。
6.IS-IS区域边界位于链路上,而不是路由器中,每台IS-IS路由器仅属于一个区域。
7.IS-IS LSP使用NSAP地址(NET地址)标识路由器并建立拓扑表,因此为ip提供路由选择需要NSAP地址。
NSAP地址8-12字节,使用16进制数表示,包含如下主要信息:(1)区域编号(2)系统编号(固定6字节) //具备唯一性,以在IS-IS中唯一地标识路由器//(3)NSEL位(固定1字节并置0)(4)NET地址常见规划方式:通过环回口ipv4地址每一段不足3位的前面补0,再每4位一组划分得到。
接口及IP地址规划路由器接口IPR1F0/0192.168.1.1R1F0/1192.168.2.1R2F0/0192.168.3.1R2F0/1192.168.2.2R3F0/0192.168.3.2R 3F0/1192.168.10.1R4F0/0192.168.10.2R4F0/1192.168.20.1R1(config)#router isis //启动Isis进程//R1(config-router)#net 49.0001.0000.0000.0001.00//配置IS-IS的NSAP地址(NET地址)其中6字节的系统编号由环回口地址补0得出,我这里是更简便的方式//R1(config-router)#is-type level-1 //指定为L1路由器只需学习到区域内的路径信息//R1(config-router)#exR1(config)#int range f0/0 -1R1(config-if-range)#ip router isis //IS-IS协议不同于RIP,OSPF,需在接口下开启路由通告//R2(config)#router isisR2(config-router)#net 49.0001.0000.0000.0002.00R2(config-router)#is-type level-1-2 //指定为L1-2路由器需学习到区域内和区域间的路径信息//R2(config-router)#exR2(config)#int range f0/0 -1R2(config-if-range)#ip router isisR3(config)#router isisR3(config-router)#net 49.0002.0000.0000.0003.00R3(config-router)#is-type level-2-only //指定为L2路由器只需学习到区域间的路径信息//R3(config-router)#R3(config-router)#exR3(config)#int f0/0R3(config-if)#ip router isisR3(config)#router rip //启动rip进程//R3(config-router)#network 192.168.10.0 //宣告主网络号,只宣告其中一段,因为另一段运行isis//R3(config-router)#version 2 //启用版本2//R3(config-router)#no auto-summary //关闭自动汇总//R3(config)#router isisR3(config-router)#redistribute rip metric 10 metric-type external 在ISIS中重分发rip,度量值为10//R3(config-router)#exR3(config)#router ripR3(config-router)#redistribute isis level-1-2 metric 15 //在rip重分发isis的level-1-2,并设置为度量值为最大跳15//R3(config-router)#redistribute connected //在isis中还需要充分发直连网段,这个是大多数人往往忽略的地方,也是最容易出错的地方// 大家要注意了哦R4(config)#router ripR4(config-router)#network 192.168.10.0 //在R4上配置rip协议,宣告主网络号,关闭汇总,并启用版本2//R4(config-router)#version 2R4(config-router)#no auto-summaryR4(config-router)#network 192.168.20.01.IS-IS协议是链路状态协议,它与OSPF相比具有收敛更快速(只有2种LSP),更加灵活易于扩展(骨干区域由L2级别链路自动生成)。
《计算机网络原理》试验报告学号XXXXX XXX姓名xxxxxxxxxxx专业班级XXXXXxxxxx完成时间2011-4-25实验一路由算法一.实验目的计算机网络通常使用动态的路由算法,其中距离矢量路由算法和链路状态路由算法最为常见。
本章实验的目的是模拟距离矢量路由算法及链路状态路由算法,使读者熟悉路由算法的基本原理。
二.实验内容在C/C++环境下,编程模拟距离矢量路由选择算法和链路状态路由选择算法中,具体要求如下:(1)距离矢量路由选择算法根据给出或自行设计的网络拓扑结构,初始化每个路由器的初始路由表,模拟并演示距离矢量路由选择算法过程中每个路由器在接收相邻节点发送的信息之后更新路由表的过程。
①根据给出的网络拓扑结构初始化每个路由器的路由选择表。
②每个路由器将其路由选择信息的列表发送给邻居路由器。
③路由器根据接收到的信息列表,修改自己的路由选择表。
④重复(b)(c)过程直到网络中所有路由器的路由选择表均不再发生改变。
在模拟上述过程中,要求显示每个路由器在执行步骤(c)之后路由选择表的内容。
(2)链路状态路由选择算法根据给出的网络拓扑结构和链路状态,模拟链路状态路由算法中路由器进行工作的过程。
①路由器发现其邻居节点,并测量到邻居节点的距离。
②根据邻居节点信息构造分组。
③将分组发送给邻居路由器。
对接收到的分组信息,将其发送给除发送节点外的其他邻节点,并向发送节点返回确认信息;若接收到的信息序号比现有序号小,则停止发送,向发送节点返回确认信息。
④当路由器获得所有节点的分组信息后,利用Dijkstra算法计算到达每个节点的最短路径。
三.实验步骤①距离矢量路由选择算法程序主流程图原理分析当路由器a接收到邻居路由器b的路由选择信息表后,对信息表中的信息进行比较,若发现有新的路径比当前路由表中的路径长度小,或者发现当前路由表中的路径长度发生了变化,则将路由表中的信息进行更新。
每一个路由表发生更新的路由器将新的路由选择信息发送给其邻节点,开始下一轮的更新过程,直到所有路由器的路由表均不发生更新操作,运行结束。
路由算法一链路状态路由算法的具体实现(1)链路状态路由算法的原理链路状态路由协议是目前使用最广的一类域内路由协议。
它采用一种“拼图”的设计策略,即每个路由器将它到其周围邻居的链路状态向全网的其他路由器进行广播。
这样,一个路由器收到从网络中其他路由器发送过来的路由信息后,它对这些链路状态进行拼装,最终生成一个全网的拓扑视图,近而可以通过最短路径算法来计算它到别的路由器的最短路径。
运行链路状态路由协议的路由器, 每台路由器公在其接口的状态发生变化时,才将变化后的状态发送给其他所有路由器,每台路由器都使用收到的信息重新计算前往每个网络的最佳路径,然后将这些信息存储到自己的路由选择表中。
链路状态路由算法背后的思想非常简单,可以用5个基本步骤加以描述。
1、发现他的邻接点,并知道其网络的地址。
2、测量到各邻接点的延迟或开销。
3、构造一个分组,分组中包含所有他刚刚收到的信息。
4、将这个分组发送给其他的路由器。
5、计算出到每一个其他路由器的最短路径。
例如,每个路由器运行Dijkstra算法就可以找从它到每一个其他路由器的最短路径。
(2)程序源代码(c++语言,核心算法为迪杰斯特拉算法)#include <iostream>#include <fstream>#define routeTable "routeTable.txt"using namespace std;const int MAX_NODES = 1024; //能接受的最大路由数const int INFINITY = 100000; //权值int dist[MAX_NODES][MAX_NODES]; //用于存放网络拓扑结构连接矩阵int static Vnums; //总的节点(路由)数void initDist(){ //初始化邻接矩阵for(int i = 0; i < MAX_NODES; i ++)for(int j = 0; j < MAX_NODES; j ++)dist[i][j] = 0;}void creatRouteMap(int Vnums){ //创建网络拓扑结构的邻接矩阵,1.创建路由表函数for(int i = 0; i < Vnums; i ++){cout << "输入第" << i << "个节点\n" ;for(int j = 0; j < Vnums; j ++){cout <<"的第"<< j << "个节点的权值:" ;cin >> dist[i][j];}}}void saveRoute(ofstream& routeTables){ //6.保存路由信息routeTables << "路由邻接矩阵为:";routeTables << "\n";routeTables << "**********************************"; routeTables << "\n";for(int i = 0; i < Vnums; i ++){for(int j = 0; j < Vnums; j ++){routeTables<<dist[i][j]<<"\t";}routeTables << "\n";}}void dijkstra(int s, int t, int path[]){ //迪杰斯特拉算法 s目的节点 t源节点struct state{ //存放节点数据int predecessor; //父节点int length; //权值,存放最小权值bool lable; //访问状态 false未被访问过,true访问过}state[MAX_NODES];int i,k,min,print;struct state *p;for(p = &state[0]; p < &state[Vnums]; p ++) //初始化节点数据{p->predecessor = -1;//类似存下一跳p->length = INFINITY; //=100000p->lable = false;}state[t].length = 0; //源节点的权值改为0state[t].lable = true;k = t;cout << "最短路径为:" << endl;do{ //dowhi le 先是把所有最短路径连起来for(i = 0; i < Vnums; i ++) //找到与永久标定节点直接相连的节点,并改变其权值{if( (dist[k][i] != 0) && (state[i].lable == false)){ //与源节点直接相连并且不是同一个源节点k源节点if(state[k].length + dist[k][i] < state[i].length){state[i].predecessor = k; //记录节点cout << k << "->";state[i].length = state[k].length + dist[k][i]; //路径长度总和}}}k = 0;min = INFINITY;for( i = 0; i < Vnums; i ++) //找到与永久标定节点相邻的节点,并把与最小权值的相邻点改为永久标点{if((state[i].lable == false) && (state[i].length < min)) //找到与永久标点相邻的节点{min = state[i].length;k = i;}}state[k].lable = true; //新的永久标点也变为访问过}while(k!=s); //新的永久标点是否为目的节点,不是继续循环cout << s <<"最小距离="<<min<<"\n";}void addRoute(){ //添加一个路由及结点信息2.增加路由char ch;do{cout << "添加一个路由:" << endl;Vnums = Vnums + 1;cout << "输入第" << Vnums - 1 << "个节点与第" ;for(int j = 0; j < Vnums; j ++){cout << j << "个节点的权值:" << endl;cin >> dist[Vnums - 1][j]; //写入对应增加行的信息dist[j][Vnums - 1] = dist[Vnums - 1][j]; //写入对应增加列的信息}cout << "继续添加(y 或者 n):" << endl;cin >> ch;if(ch == 'n') break;}while(ch == 'y');}void deleteRoute(){ //3.删除路由char ch;int delNum;do{cout << "输入删除路由结点号:" << endl;cin >> delNum;for(int j = 0; j < Vnums; j ++){dist[delNum - 1][j] = 0; //对应行的信息dist[j][delNum - 1] = dist[delNum - 1][j]; //对应列的信息}cout << "继续删除(y 或者 n):" << endl;cin >> ch;if(ch == 'n') break;}while(ch == 'y');}void changeRoute(){ //4.修改路由int i,j;cout << "输入要修改的结点1:" <<endl;cin >> i;cout << "输入要修改的结点2:" <<endl;cin >> j;cout << "输入修改的权值:" <<endl;cin >> dist[i-1][j-1];}void displayRouteInfo(){ //7.显示路由表信息cout << "**********************************" << endl;cout << "路由表信息:" << endl;cout<<" ";for(int j=0;j<Vnums;j++)cout<<"\t"<<(char)(j+65); //显示ABC..的对应数字为012..cout<<" (目的节点)\n";for(int i = 0; i < Vnums; i ++) {int c=i+65;cout<<(char)c<<"\t";for(int j = 0; j < Vnums; j ++) {cout << dist[i][j] << "\t";}cout << "\n";}}int main(){int desNode,rouNode;int path[MAX_NODES];int change;char ch;ofstream routeTables;//初始化权值矩阵initDist();cout << "输入路由总节点数:" << endl;cin >> Vnums;do{//主菜单界面cout << "\t" <<"=============================" << endl; cout << "\t" <<"1.创建路由表" << endl;cout << "\t" <<"2.增加路由" << endl;cout << "\t" <<"3.删除路由" << endl;cout << "\t" <<"4.修改路由" << endl;cout << "\t" <<"5.找两个路由间的最短路径" << endl;cout << "\t" <<"6.保存路由表到文件" << endl;cout << "\t" <<"7.显示路由表信息" << endl;cout << "\t" <<"8.退出" << endl;cout << "\t" <<"=============================" << endl;// cout << "输入路由总节点数:" << endl;// cin >> Vnums;cout << "选择操作(1-8):" << endl;cin >> change;switch(change){case 1: creatRouteMap(Vnums); system("pause");system("cls");break;case 2: addRoute(); system("pause"); system("cls"); break;case 3: deleteRoute(); system("pause"); system("cls"); break;case 4: changeRoute(); system("pause"); system("cls");break;case 5: cout << "输入目标节点和源节点:" << endl;cin >> desNode;cin >> rouNode;dijkstra(desNode,rouNode,path); //求最短路径system("pause");system("cls");break;case 6:routeTables.open(routeTable);if(routeTables==NULL){cout << "打开文件夹错误:" << endl;getchar();exit(0);}//保存文件saveRoute(routeTables);routeTables.close();system("cls");break;case 7: displayRouteInfo();system("pause");system("cls"); break; case 8: return 0;default: system("cls"); break;}cout << "返回选择菜单(y 或者 n):" << endl; cin >> ch;if(ch == 'n') break;}while(ch == 'y');system("pause");return 0;}(3)网络拓扑结构(4)实验运行截图(5)分析与综述本实验用手动输入方式来代替路由之间的分组发送消息,并可以用增加,删除,修改来模拟现实的情况。
路由器基本原理及其配置、FR、ATM引入:通过讲述广域网的应用,讲述为何能发展成为现有的规模,在这其中哪些设备作出的贡献最大,将课堂引入到路由器及其配置上来。
新授:一、路由器基本原理作为路由器,必须具备:1.两个或两个以上的接口:用于连接不同的网络(在现实网络中也存在只有一个接口的情况,这种方式的路由器称为独臂路由器,但应用不多)。
2.协议至少实现到网络层:只有理解网络层协议才能与网络层通讯。
3.具有存储、转发、寻径功能:实现速率匹配与路由寻径。
通常路由器还会支持两种以上的网络协议以支持异种网络互联,一般的路由器还会运行一些动态路由协议以实现动态寻径。
一般路由器逻辑上由输入输出接口、数据转发部分、路由管理部分、用户配置接口几部分构成。
路由器的作用1.数据转发:路由器必须具有根据数据分组的目的网络地址转发分组的功能。
2.路由(寻径):为了实现数据转发,路由器必须有能力建立、刷新路由表,并根据路由表转发数据包。
3.备份、流量流控:为了保证网络可靠运行,路由器一般都具备主备线路的切换及流量控制功能。
4.速率适配:不同接口具有不同的速率,路由器可以利用自己的缓存及流控协议进行适配。
5.隔离网络:路由器可以隔离广播网络,防止广播风暴,同时也可以对数据包施行灵活多样的过滤策略以保证网络安全(防火墙)。
6.异种网络互连:互联网的初衷就是为了实现异种网络互连,现代路由器一般都会实现两种以上的网络协议以实现异种网络互连。
路由器的工作流程路由器工作流程路由器中时刻维持着一张路由表,所有报文的发送和转发都通过查找路由表从相应端口发送。
这张路由表可以是静态配置的,也可以是动态路由协议产生的。
路由器工作流程为:物理层从路由器的一个端口收到一个报文,上送到数据链路层;数据链路层去掉链路层封装,根据报文的协议域上送到网络层;网络层首先看报文是否是送给本机的,若是,去掉网络层封装,送给上层。
若不是,则根据报文的目的地址查找路由表,若找到路由,将报文送给相应端口的数据链路层,数据链路层封装后,发送报文。