计算机网络实验路由算法报告.doc_第1页
计算机网络实验路由算法报告.doc_第2页
计算机网络实验路由算法报告.doc_第3页
计算机网络实验路由算法报告.doc_第4页
计算机网络实验路由算法报告.doc_第5页
免费预览已结束,剩余9页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机网络实验报告1、 实验目的计算机网络通常使用动态的路由算法,其中距离矢量路由算法和链路状态路由算法最为常见。本章实验的目的是模拟距离矢量路由算法及链路状态路由算法,使读者熟悉路由算法的基本原理。2、 实验要求要求在C/C+环境下,编程模拟距离矢量路由选择算法和链路状态路由选择算法中,具体要求如下:(1)距离矢量路由选择算法根据给出或自行设计的网络拓扑结构,初始化每个路由器的初始路由表,模拟并演示距离矢量路由选择算法过程中每个路由器在接收相邻节点发送的信息之后更新路由表的过程。 根据给出的网络拓扑结构初始化每个路由器的路由选择表。 每个路由器将其路由选择信息的列表发送给邻居路由器。 路由器根据接收到的信息列表,修改自己的路由选择表。 重复(b)(c)过程直到网络中所有路由器的路由选择表均不再发生改变。在模拟上述过程中,要求显示每个路由器在执行步骤(c)之后路由选择表的内容。(2)链路状态路由选择算法根据给出的网络拓扑结构和链路状态,模拟链路状态路由算法中路由器进行工作的过程。 路由器发现其邻居节点,并测量到邻居节点的距离。 根据邻居节点信息构造分组。 将分组发送给邻居路由器。对接收到的分组信息,将其发送给除发送节点外的其他邻节点,并向发送节点返回确认信息;若接收到的信息序号比现有序号小,则停止发送,向发送节点返回确认信息。 当路由器获得所有节点的分组信息后,利用Dijkstra算法计算到达每个节点的最短路径。3、 实验原理1距离矢量路由选择算法当路由器a接收到邻居路由器b的路由选择信息表后,对信息表中的信息进行比较,若发现有新的路径比当前路由表中的路径长度小,或者发现当前路由表中的路径长度发生了变化,则将路由表中的信息进行更新。每一个路由表发生更新的路由器将新的路由选择信息发送给其邻节点,开始下一轮的更新过程,直到所有路由器的路由表均不发生更新操作,运行结束。2链路状态路由选择算法以网络中的一个路由器为例,其在链路状态路由选择算法的过程中的状态如下:发现其邻居节点,并测量到邻居节点的距离;测量信息构造分组;将分组发送给邻居路由器;不断对接收缓冲区进行检测:对接收到的分组信息,若接收到的分组信息序号比存储在路由器中的序号大,则更新路由器中的信息,并将其序号加1后发送给除发送节点外的其他邻节点,并向发送节点返回确认信息;若接收到的分组信息序号比现有序号小,则停止发送,向发送节点返回确认信息;若接收到的分组信息年龄变为0,则停止发送,丢弃该分组。当路由器获得所有节点的分组信息后,便可以利用Dijkstra算法计算到达每个节点的最短路径。4、 实验流程图 5、 实验界面(1)距离矢量路由选择算法(2) 链路状态路由选择算法6、 具体细节1. 具体实现综述 本程序采用WPF技术实现,所使用语言为C#语言,其中详细内容,下文会提到。2. 距离矢量路由选择算法(1)主要程序细节代码public ObservableCollection L1_data = new ObservableCollection();上面代码使用ObservableCollection定义一个类数组的L1_data元素,可以收集表1的信息,并且在数据绑定(Biding)技术中,ObservableCollection可以实现动态更新。if (L1_data0.L_ping L2_data0.L_ping) L1_data0.L_ping = L2_data0.L_ping; L1_data0.L_road = L2_data0.L_road; Lelement ch = new Lelement(); ch.L_point = L1_data0.L_point; ch.L_ping = L1_data0.L_ping; ch.L_road = L1_data0.L_road; L1_data.Remove(L1_data0); L1_data.Insert(0, ch); flag = true; 上面代码是对是否存在更短的路径的判断,这里只是代码片段,其中的一个判定。for (int i = 0; i 5; i+) L2_L1_received.Add(L1_datai); for (int i = 0; i 5; i+) L3_L1_received.Add(L1_datai); for (int i = 0; i 5; i+) L1_L2_received.Add(L2_datai); for (int i = 0; i 5; i+) L4_L2_received.Add(L2_datai); for (int i = 0; i 5; i+) L1_L3_received.Add(L2_datai); for (int i = 0; i 5; i+) L4_L3_received.Add(L2_datai); for (int i = 0; i 5; i+) L5_L3_received.Add(L2_datai); for (int i = 0; i 5; i+) L2_L4_received.Add(L4_datai); for (int i = 0; i 5; i+) L3_L4_received.Add(L4_datai); for (int i = 0; i 5; i+) L6_L4_received.Add(L4_datai); for (int i = 0; i 5; i+) L3_L5_received.Add(L5_datai); for (int i = 0; i 5; i+) L6_L5_received.Add(L5_datai); for (int i = 0; i 5; i+) L4_L6_received.Add(L6_datai); for (int i = 0; i 5; i+) L5_L6_received.Add(L6_datai); 上面的代码是在自动计算的时候,所有的表都向邻居节点发送表,然后根据邻居发送的表,来更新自身的表。(2)主要涉及到的算法public void CalcTable() if (_receiveData.Count = 0) / 路由器未接收到临节点的信息,不发生更新 changed = false; return; changed = false; foreach (Router neighbour in _orignal.Keys) try Dictionary table = _receiveDataneighbour; foreach (Router dst in table.Keys) / 计算经过邻节点到达dst节点的距离 int newCost = _tableneighbour._cost + tabledst; try if (newCost _tabledst._cost) / 经邻节点到达dst节点的距离小于路由表当前距离 _tabledst = new RouterPath(dst, neighbour, newCost); / 进行更新 changed = true; else if (_tabledst._nextRouter.Equals(neighbour) & _tabledst._cost != _tableneighbour._cost + tabledst) / 原路由表中的距离发生改变_tabledst = new RouterPath(dst, neighbour, newCost); / 进行更新 changed = true; Catch / 路由表中没有到达dst节点的信息 _tabledst = new RouterPath(dst, neighbour, newCost); / 进行更新 changed = true; catch /计算结束,丢弃接收信息 _receiveData.Clear();(3) 程序运行截图3. 链路状态路由选择算法(1)主要程序细节代码for (int i = 0; i l_copy.Count;i+ ) bool flag = false; for (int j = 0; j L2.Count;j+ ) if (l_copyi.Code=L2j.Code) flag = true; if (flag=false) L2.Add(l_copyi); for (int i = 0; i l_copy.Count; i+) bool flag = false; for (int j = 0; j L3.Count; j+) if (l_copyi.Code = L3j.Code) flag = true; if (flag = false) L3.Add(l_copyi); 以上代码是向邻居节点发送表。(2)主要涉及到的算法Dijkstra (U, E, s) / Dijkstra算法。U:点集合, E:边集合, s:原点S - s; / 初始化S集合V = G S;While (V != null) Foreach(v in V) minDistances, v = Infinity; preVertexv = null; Foreach(p in S) If (shortestDistances, p + Ep, v minDistance) /对于点pS,如果s到p的最短路径

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论