ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:171.85KB ,
资源ID:7017335      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7017335.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(RIP路由协议原型系统的实现.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

RIP路由协议原型系统的实现.docx

1、RIP路由协议原型系统的实现课程设计报告课程名称: 计算机网络 设计题目: RIP路由协议原型系统的实现 系 别: 计算机与信息工程学院 专 业: 物联网专业 组 别: 第五组 -起止日期: 2014年6月8日2014年6月14日-指导教师: 刘进军 计算机科学与技术系二一四年制组长谢刚学号2012211588班级2012级物联网系别计算机与信息工程学院专业物联网专业组员谢刚指导教师老师 刘进军课程设计目的1)进一步理解动态内部网关协议RIP的工作原理。2)学会将所学知识联合运用,如本次RIP协议原型系统的设计即是将网络与数据结构(图)及C编程语言相结合。3)提高团队合作能力,发挥每一名组员的

2、长处。4)体会做一个项目的流程(包括前期的资料收集,系统要求分析,系统实现的语言选择及实现方法的讨论等)。课程设计所需环境1)Windows操作系统平台2)VC+6.0编译环境3)Cisco Packet Tracer仿真软件课程设计任务要求1)实现一个RIP路由协议的原型系统2)广播发布本地节点的路由信息3)其它节点接收信息并选择最优路径4)支持最大不超过15跳的特性5)动态支持网络拓扑结构的变化(如增加路由节点)课程设计工作进度计划序号起止日期工 作 内 容分工情况12014年6月8日2014年6月9日展开思路讨论工作并搜集相关资料参考相关资料独立完成22014年6月9日2014年6月10

3、日分析课程设计要求,确定目标参考相关资料独立完成32014年6月10日2014年6月11日设计软件功能模块参考相关资料独立完成42014年6月11日2014年6月12日编写代码、实现功能模块参考相关资料独立完成52014年6月12日2014年6月13日系统整合以及测试参考相关资料独立完成62014年6月13日2014年6月14日完成课程设计文档参考相关资料独立完成教研室审核意见:教研室主任签字: 年 月 日课程设计任务书1. 引言. 42. 系统开发分析. 4 2.1 系统需求分析. 4 2.2 系统设计原理43. 系统功能描述与软件模块划分.54. 系统设计详细. 5 4.1 程序流程图 6

4、 4.2 程序源代码7 5. 设计过程关键问题及其解决方法. 10 5.1 如何实现广播本地路由及更新动态更新路由表. 10 5.2 如何在网络拓扑结构改变后实现动态更新维护路由表.116. 程序设计结果界面演示11 6.1 设计结果演示.117. 课程设计总结与体会157.1 总结.157.2 体会.17致谢17参考文献181 引言 RIP(Routing information Protocol,路由信息协议)是应用较早、使用较普遍的内部网关协议(Interior Gateway Protocol,IGP),适用于小型同类网络的一个自治系统(AS)内的路由信息的传递。RIP协议是基于距离矢

5、量算法(DistanceVectorAlgorithms)的,在默认情况下,RIP使用一种非常简单的度量制度:距离就是通往目的站点所需经过的链路数,取值为115,数值16表示无穷大。它使用“跳数”,即metric来衡量到达目标地址的路由距离。这种协议的路由器只关心自己周围的世界,只与自己相邻的路由器交换信息,范围限制在15跳(15度)之内,再远,它就不关心了。RIP进程使用UDP的520端口来发送和接收RIP分组。RIP分组每隔30s以广播的形式发送一次,为了防止出现“广播风暴”,其后续的的分组将做随机延时后发送。在RIP中,如果一个路由在180s内未被刷,则相应的距离就被设定成无穷大,并从路

6、由表中删除该表项。RIP应用于OSI网络七层模型的网络层。RIP是一个用于路由器和主机间交换路由信息的距离向量协议,目前最新的版本为v4,也就是RIPv4。2系统开发分析2.1 系统需求分析1.实现一个RIP路由协议的原型系统。2.广播发布本地节点的路由信息。3.其它节点接收信息并选择最优路径。4.支持最大不超过15跳的特性。5.动态支持网络拓扑结构的变化(如增加路由节点)2.2 系统设计原理RIP协议是动态路由协议,其运行至路由器中,而路由器是运行路由协议软件的专用硬件,它的主要功能可以分成两部分:路由选择和分组转发。其中路由选择是基础。一个路由器对到来的每一个分组先选择合适的路由,然后才能

7、依据此路由进行正确的转发,本次课程设计就是设计有着广泛的使用范围的动态路由协议RIP协议体统原型。它是距离向量协议中的一种,属于内部网关协议。运行协议的相邻路由器通过彼此之间交换路由信息RIP的距离向量,从而知道网络的连接情况,实现各个网络之间的连通,这也是距离向量名称的由来。(Distance Vector)运行协议的每个路由器都要维护一张自己的路由RIP表,该路由表是相应于与它直接相联和通过路由器相连的网络连接情况而动态变化的。因此协议属于动态路由协RIP议。路由器根据路由表对发给它的包进行转发,从而实现IP路由功能。3系统功能描述与系统模块划分本设计实现的RIP路由协议的原型系统功能主要

8、包括,一:初始化每个路由器的路由表信息。即在使用者输入网络拓扑结构中的路由节点数及链路数后,系统首先会自动生成每个节点到其相邻路由节点的路由信息,具体包括:目的地址、跳数、下一跳,初始设置相邻节点的跳数为1。 二:当路由器的初始路由表建立后,接下来就开始进行邻接节点的路由信息广播,即路由节点将自身的路由表信息广播至其相邻的节点,具体的广播信息是将每一条路由的目的地址不变,跳数加一,吓一跳修改为自身路由器接口的名称进行传送,收到广播信息的路由表对收到的每一条路由信息进行判断,分两大情况::若原来的路由表中没有目的网络N,则将该项添加到路由表中,否则(即在该路由表中有到目的网络N的信息,则观察下一

9、条)此时分两种小情况1:若吓一跳与原路由表项相同,则无条件进行更新。2:若吓一跳与原路由表项不相同,则若收到的路由信息中距离d小于路由表中的距离,则进行更新。(还有对于接受的路由信息跳数=16的信息,则将跳数置为16,表明不可达。)三:动态改变网络拓扑结构,即当因为实际需要,需增设路由节点时,系统会根据增设的路由节点数、名称、链路数,首先进行新增设节点的路由表信息初始化,而后将该节点的路由信息想邻接节点进行广播,随后整个网络节点向邻接节点进行路由信息广播,这样经过几轮广播后,每一个节点都接收到了新增路由节点的最小路径信息,从而实现了路由表的动态维护与创建。4系统设计详细4,1程序流程图4.2程

10、序源码因为系统的设计涉及到网络拓扑图的存储,所以本设计采用数据结构中图的存储思想来进行拓扑结构的存储,输出。下面是系统设计的主要代码:首先分别设置了4种类型的结构体,以来表示链路信息、路由表、路由器,网络拓扑图。#include#include#define MAX_VERTEX_NUM 15#define MAX 15#include typedef struct ArcCell/存储链路信息 int adj;ArcCell,AmMAX_VERTEX_NUMMAX_VERTEX_NUM;typedef struct/路由表 char destinationMAX; int distance;

11、 char nextjumpMAX;TNode;typedef struct/路由结点 char rMAX;/存储路由器名称 TNode tMAX;/存储路由结点的路由表信息。VNode;typedef struct VNode vexMAX; Am arcs; int vexnum,arcnum;Graph;/用图来存储网络拓扑结构。/另外在此设置一个全局变量,用来辨别路由表中信息的结束。TNode end=,0,;copy(char *str1,char *str2) int i; char *temp = str2; for(i=0;*temp!=0;i+) *(str1+i)=*(st

12、r2+i); temp+; *(str1+i)=0; /第一步:待设计好需要的结构模型后,接下来开始根据路由节点的个数及链路数进行网络拓扑结构的构造,详细代码如下:Graph Create() Graph G; int i,j,k,count; char v120,v220; printf(分别输入网络拓扑结构中的路由数和链路数(中间用逗号隔开):n); scanf(%d,%d,&G.vexnum,&G.arcnum); printf(分别输入路由器名称及路由表n); int LocateVex(Graph *G,char s); void initRoute(Graph *G,int i,i

13、nt j); for(i=0;iG.vexnum;i+)/构造路由结点 count=0; printf(输入第%d个路由器名称:n,i+1); scanf(%s,G.vexi.r); G.vexi.t0=end; for(i=0;iG.vexnum;i+)/初始化邻接矩阵 for(j=0;jG.vexnum;j+) G.arcsij.adj=10000; for(k=0;kG.arcnum;k+)/构造邻接矩阵 printf(输入第%d条链路的两端路由器的名称:n,k+1); scanf(%s%s,v1,v2);/用scanf输入多个字符串,中间用空格隔开。 i=LocateVex(&G,v1

14、); j=LocateVex(&G,v2); G.arcsij.adj=1; G.arcsji.adj=1; /初始化该链路两端路由节点的路由表。 initRoute(&G,i,j); return G;int compare(char a,char b);void printG(Graph *G);void insertNewRoute(Graph *G);/其中的LocateVex()函数用来确定s在图中的位置,具体实现如下:int LocateVex(Graph *G,char s) int i; for(i=0;i(*G).vexnum;i+) if(compare(s,(*G).ve

15、xi.r)=1) return i; return -1;/第二步:构造完网路拓扑图后,接下来进行拓扑结构中路由节点的路由表信息的初始化。void initRoute(Graph *G,int i,int j) int m,n; for(m=0;(*G).vexi.tm.distance!=0;m+); copy(*G).vexi.tm.destination,(*G).vexj.r); (*G).vexi.tm.distance=1; copy(*G).vexi.tm.nextjump,(*G).vexi.r); (*G).vexi.tm+1=end; for(n=0;(*G).vexj.t

16、n.distance!=0;n+); copy(*G).vexj.tn.destination,(*G).vexi.r); (*G).vexj.tn.distance=1; copy(*G).vexj.tn.nextjump,(*G).vexj.r); (*G).vexj.tn+1=end; /第三步:开始进行邻接节点的路由信息广播:void Exchange(Graph *G) int i,j,k,h,count; char c; TNode temp; for(i=0;i(*G).vexnum;i+) for(j=0;j16) temp.distance=16; copy(temp.nex

17、tjump,(*G).vexi.r); count=0; for(h=0;(*G).vexj.th.distance!=0;h+) if(compare(temp.destination,(*G).vexj.r)=1)/表明该条路由信息的目的地址指向的是路由结点j本身,因而不需要更新及修改。 count+; break; if(compare(*G).vexj.th.destination,temp.destination)=1) count+; if(compare(*G).vexj.th.nextjump,temp.nextjump)=1) (*G).vexj.th.distance=te

18、mp.distance; else if(*G).vexj.th.distancetemp.distance) (*G).vexj.th.distance=temp.distance; copy(*G).vexj.th.nextjump,temp.nextjump); if(count=0) copy(*G).vexj.th.destination,temp.destination); (*G).vexj.th.distance=temp.distance; copy(*G).vexj.th.nextjump,temp.nextjump); (*G).vexj.th+1=end; / prin

19、tf(路由器%s向路由器%s发送消息n,(*G).vexi.r,(*G).vexj.r); printG(G); / printf(若需在原有网络拓扑结构中增加新的节点,请输入#键n); getchar(); scanf(%c,&c); if(c=#) insertNewRoute(G); /第四步:增加路由表,实现网络拓扑结构的动态变化及路由表信息的动态更新与维护。void insertNewRoute(Graph *G) int i,j,nVexNum,nArcNum,k,num; char v120,v220; printf(分别输入新增加的路由数和链路数(中间用逗号隔开):n); sc

20、anf(%d,%d,&nVexNum,&nArcNum); printf(分别输入路由器名称及路由表n); for(num=0;numnVexNum;num+) printf(输入新增第%d个路由器名称:n,num+1); scanf(%s,(*G).vexnum+(*G).vexnum.r); (*G).vexnum+(*G).vexnum.t0=end; (*G).vexnum+=nVexNum; (*G).arcnum+=nArcNum; for(k=0;knArcNum;k+)/构造邻接矩阵 printf(输入新增路由节点后第%d条链路的两端路由器的名称:n,k+1); scanf(%

21、s%s,v1,v2);/用scanf输入多个字符串,中间用空格隔开。 i=LocateVex(G,v1); j=LocateVex(G,v2); (*G).arcsij.adj=1; (*G).arcsji.adj=1; initRoute(G,i,j); for(i=0;i(*G).vexnum;i+)/初始化邻接矩阵 for(j=0;j(*G).vexnum;j+) if(*G).arcsij.adj!=1) (*G).arcsij.adj=10000; Exchange(G);/下面是系统设计过程中所需的辅助自定义函数。int compare(char a,char b) int j;

22、for(j=0;aj!=0&bj!=0;j+) if(aj!=bj) return 0; return 1;/显示网络拓扑结构:void printG(Graph *G) int i,j; for(i=0;i(*G).vexnum;i+) printf(t路t由t器%s:n,(*G).vexi.r); printf(目的地址tt距离tt下一跳nn); for(j=0;(*G).vexi.tj.distance!=0;j+) printf(%sttt%dtt%snn,(*G).vexi.tj.destination,(*G).vexi.tj.distance,(*G).vexi.tj.nextj

23、ump); printf(nn); /显示指定路由节点v的路由表:void printv(VNode v) int i; printf(t路t由t器%sn,v.r); printf(目的地址tt距离tt下一跳nn); for(i=0;v.ti.distance!=0;i+) printf(%sttt%dtt%snn,v.ti.destination,v.ti.distance,v.ti.nextjump); printf(nn); /通过主函数进行函数的调用运行:void main() Graph G=Create(); printG(&G); Exchange(&G);5设计过程关键问题及其

24、解决办法5.1 如何实现广播本地路由及更新动态更新路由表。路由器最初启动时只包含了其直连网络的路由信息,并且其直连网络的metric值为1,然后它向周围的其他路由器发出完整路由表的RIP请求。路由器根据接收到的RIP应答来更新其路由表,具体方法是添加新的路由表项,并将其metric值加1。如果接收到与已有表项的目的地址相同的路由信息,则分下面四种情况分别对待:第一种情况,已有表项的来源端口与新表项的来源端口相同,那么无条件根据最新的路由信息更新其路由表;第二种情况,已有表项与新表项来源于不同的端口,那么比较它们的metric值,将metric值较小的一个最为自己的路由表项;第三种情况,新旧表项

25、的metric值相等,普遍的处理方法是保留旧的表项。第四种情况,新表项在该路由表中不存在,则将跳数加一,吓一跳改为原发送路由器后添加到表项后。 5.2 如何在网络拓扑结构改变后实现动态更新维护路由表。首先要实现新添加路由表的路由信息初始化,而后再更新与之相邻的路由节点的路由信息,接下来就进行路由信息的邻接节点广播,从而达到全网络的路由信息更新。6程序设计结果界面演示6.1 设计结果演示程序运行过程演示以及结果如下:1分别从键盘输入网络拓扑结构中的路由数和链路数(中间用逗号隔开)例如输入 3,2 表示共有两个路由器和一条链路,如图1-1所示拓扑结构: 图1-12再分别输入各个路由器名称及其链路(中间用空格隔开)例如分别依次输入第一个路由器名称v1 ,第二个路由器名称v2 及两个路由器间的链路v1 v2.程序输入数据界面与按下ENTER键后各路由表的初始路由信息如图1-2 4接下来改变原始网络拓扑结构,增加新的路由节点,如图1-3中拓扑结构所示: 图1-3运行命令后输入如下:输入新增第1个路由器名称:v4输入新增路

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1