RIP路由算法实现_第1页
RIP路由算法实现_第2页
RIP路由算法实现_第3页
RIP路由算法实现_第4页
RIP路由算法实现_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、RIP路由算法实现【摘要】RIP协议作为一种最简单的内部网关协议,已经非常广泛的应用在网络的传输中。并且在未来的IPV6也是占据很重要的位置。RIP协议未来的发展与变化及其与其他内部网关协议的配合是很重要的事。关键词 RIP 协议 OSPF一、RIP协议介绍RIP(RoutinginformatiomProtocol)是应用较早、使用较普遍的内部网关协议(InteriorGatewayProtocol,简称IGP),适用于小型同类网络,是典型的距离向量(distance-vector)协议。RIP协议是内部网关协议IGP中最广泛使用的协议,它是一种分布式的基于距离向量的路由选择协议,它最大的优

2、点就是简单。在国家性网络中如当前的因特网,拥有很多用于整个网络的路由选择协议。作为形成网络的每一个自治系统,都有属于自己的路由选择技术,不同的AS系统,路由选择技术也不同。作为一种内部网关协议或IGP(普通内部网关协议),路由选择协议应用于AS系统。连接AS系统有专门的协议,其中最早的这样的协议是“EGP”(外部网关协议),目前仍然应用于因特网,这样的协议通常被视为内部AS路由选择协议。RIP主要设计来利用同类技术与大小适度的网络一起工作。因此通过速度变化不大的接线连接,RIP比较适用于简单的校园网和区域网,但并不适用于复杂网络的情况。二、RIP工作流程Rip的工作流程图如下:三、RIP的距离

3、向量算法分析矢量距离算法是路由器确定传播选路信息的一个经典算法,其思路是:路由器在其路由表中列出了所有已知的路由,路由器启动时,对路由选择表进行初始化,每个与自己相连的目的网络生成一个表项,并给出相应的距离,距离通常用跳(Hop)数来表示。每个路由器周期性地向与其直接相连的其他路由器发送自己的路由选择表,如路由器A收到路由器B发来的路由选择表后,A检查该路由选择表列出的每个目的站点以及到该目的站点的距离,如果B知道去目的站点更短的路由,或B列出了A不知道的目的站点,或A目前到某个目的站点的路由经过B,而B到该目的站点的距离有所改变,A就修改自己的路由选择表中相应的项目。矢量距离的内容用一个序偶

4、(V,D)来表示,V为目的站点,D为到该目的站点距离。矢量距离算法的优点是易于实现,在构成路由表的过程中不消耗CPU资源。但如果网络中路由变化迅速时,算法就难以稳定。如果收到相邻路由器的一个RIP报文:(1)先修改此RIP报文中的所有项目:把“下一跳”字段中的地址都改成X,并把所有距离字段的值加1。(2)对修改后的RIP报文中的每一个项目重复以下步骤:若项目中的目的网络不在路由表中,则把该项目添加到路由表中。否则 若下一条字段给出的路由器地址是同样的,则把收到的项目替换源路由表中的项目。否则若收到的项目镇南关的距离小于路由表中的距离,则进行更新。否则什么也不做。(3)若3分钟还没有收到相邻路语

5、气的更新路由表,则把此相邻路由器记为不可达的路由器,即将距离置位16(距离为16表示不可达)。(4)返回。其实,这种算法的要点就是这样的:设X是结点A到B的最短路劲上的一个结点。若将路径A到B拆成两段路径A到X和X到B,则将每一段路径A到X和X到B也都分别是节点A到X和节点X到B的最短路径。四、RIP算法处理流程图三、测试结果与结果分析1、先构建一个简易的网络,如下所示:3 1 4 1 -1 1 3 2 c4 1 5 1 -网3网4C2 1 3 1 5 1 -网5 D网2B网12 1 1 1 - A 2、在调试窗口输入以上路由信息,在输入距离大于16的时候会提示重新输入。如下所示:3、输入完成

6、后回车得到如下路由器路由表4、路由器更新后的结果四、程序源代码#include #include#include void main()struct routingchar dst100;int hopcount;char next_station3;struct routing a50;struct routing b50;struct routing c50;int i,j,r,k,x,y;int p,q,n,s;char m3,l3;char str50=目的网络 距离 下一跳路由器;printf(请输入路由器R1的路由表:n);for(i=0;i=17)printf(路由不可到达请重新

7、输入距离:n);printf(请输入路由器R1的路由表:n);for(i=0;i=49;i+)printf(目的网络:);scanf(%s,&ai.dst);printf(距离:);scanf(%d,&ai.hopcount);printf(下一跳:);scanf(%s,&ai.next_station);break;printf(是否继续输入(1=y 2=n)n); scanf(%d,&p);if(p=2)break;printf(请输入相邻路由器:);scanf(%s,m);printf(请输入相邻路由器%s发来的更新信息:n,m);for(j=0;j=17)printf(路由不可到达请重

8、新输入距离:n);printf(请输入相邻路由器%s的路由表:n,m);for(j=0;j=49;j+)printf(目的网络:);scanf(%s,&bj.dst);printf(距离:);scanf(%d,&bj.hopcount);printf(下一跳:);scanf(%s,&bj.next_station);break;printf(是否继续输入(1=y 2=n)n);scanf(%d,&p);if(p=2)break;printf(是否继续输入相邻路由器?(1=y 2=n)n);scanf(%d,&q);if(q=1)printf(请再次输入相邻路由器:);scanf(%s,l);p

9、rintf(请输入相邻路由器%s发来的更新信息:n,l);for(r=0;r=17)printf(路由不可到达请重新输入距离:n);printf(请输入相邻路由器%s路由表:n,l);for(r=0;r=49;r+)printf(目的网络:);scanf(%s,&cr.dst);printf(距离:);scanf(%d,&cr.hopcount);printf(下一跳:);scanf(%s,&cr.next_station);break; printf(是否继续输入(1=y 2=n)n);scanf(%d,&p);if(p=2)break;printf(路由器R1的路由表:n);printf(

10、-n);puts(str); for(x=0;x=i;x+)printf( %s %d %sn,ax.dst,ax.hopcount,ax.next_station);printf(-n); printf(n);printf(路由器%s的路由表:n,m);printf(-n);puts(str);for(x=0;x=j;x+)printf( %s %d %sn,bx.dst,bx.hopcount,bx.next_station);printf(-n);printf(n);if(q=1)printf(路由器%s的路由表:n,l);printf(-n);puts(str);for(x=0;x=r

11、;x+)printf( %s %d %sn,cx.dst,cx.hopcount,cx.next_station);printf(-n);printf(n);for(x=0;x=j;x+) bx.hopcount+;/所有距离都加1strcpy(bx.next_station,m);/把下一跳的地址都改为Xif(q=1)for(x=0;x=r;x+) cx.hopcount+;/所有距离都加1strcpy(cx.next_station,l);/把下一跳的地址都改为Xprintf(相邻路由器%s修改后信息:n,m);printf(-n);puts(str);for(x=0;x=j;x+)pri

12、ntf( %s %d %sn,bx.dst,bx.hopcount,bx.next_station);printf(-n);printf(n);if(q=1)printf(相邻路由器%s修改后信息:n,l);printf(-n);puts(str);for(x=0;x=r;x+)printf( %s %d %sn,cx.dst,cx.hopcount,cx.next_station);printf(-n);printf(n);if(q=1) k=i+1;for(x=0;x=j;x+)n=0;for(y=0;ybx.hopcount)/否则若收到项目的路离小于路由表中的距离,则进行更新ay.ho

13、pcount=bx.hopcount;/更新距离strcpy(ay.next_station,bx.next_station);/更新下一跳路由的地址elsen+;if(n=i+1)/若项目中的目的网络不在路由表中,则将该项目加到路由表中strcpy(ak.dst,bx.dst);ak.hopcount=bx.hopcount;strcpy(ak.next_station,bx.next_station);k+;k=k;for(x=0;x=r;x+)s=0;for(y=0;ycx.hopcount)/否则若收到项目的路离小于路由表中的距离,则进行更新ay.hopcount=cx.hopcoun

14、t;/更新距离strcpy(ay.next_station,cx.next_station);/更新下一跳路由的地址elses+;if(s=k)/若项目中的目的网络不在路由表中,则将该项目加到路由表中strcpy(ak.dst,cx.dst);ak.hopcount=cx.hopcount;strcpy(ak.next_station,cx.next_station);k+;else k=i+1;for(x=0;x=j;x+)n=0;for(y=0;ybx.hopcount)/否则若收到项目的路离小于路由表中的距离,则进行更新ay.hopcount=bx.hopcount;/更新距离strcp

15、y(ay.next_station,bx.next_station);/更新下一跳路由的地址elsen+;if(n=i+1)/若项目中的目的网络不在路由表中,则将该项目加到路由表中strcpy(ak.dst,bx.dst);ak.hopcount=bx.hopcount;strcpy(ak.next_station,bx.next_station);k+;printf(路由器R1更新后的路由表:n);printf(-n);puts(str);if(q!=1)if(k=i+1)/如果路由表中没有加入新的目的地址时的输出for(x=0;x=i;x+)printf( %s %d %sn,ax.dst,ax.hopcount,ax.next_station);printf(-n);printf(n);elsefor(x=0;x=k-1;x+)/加入了新目的地址时的输出printf( %s %d %sn,ax.dst,ax.hopcount,ax.next_station);printf(-n);printf(n);el

温馨提示

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

评论

0/150

提交评论