RIP协议路由表调整算法的实现c++编写.docx
- 文档编号:30235460
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:19
- 大小:252.96KB
RIP协议路由表调整算法的实现c++编写.docx
《RIP协议路由表调整算法的实现c++编写.docx》由会员分享,可在线阅读,更多相关《RIP协议路由表调整算法的实现c++编写.docx(19页珍藏版)》请在冰豆网上搜索。
RIP协议路由表调整算法的实现c++编写
计算机网络
课程设计说明书
RIP协议路由表调整算法的实现
起止日期:
2012年06月18日至2012年06月22日
学生姓名
班级
通信
学号
成绩
指导教师(签字)
计算机与通信学院
2012年6月22日
RIP协议路由表调整算法的实现
一、设计目的
Ø理解RIP协议的工作原理;
Ø掌握RIP的收敛实现;
Ø根据相邻路由器传来的路由信息修改本站路由表。
二、设计内容
【主要要求】
1.熟悉RIP协议机制。
2.完成路由表的更新。
【方法提示】
1.用一个二维数组存储路由表。
2.用一个文件存储一个路由器的路由表,初始化为只含相邻网的路由(1跳)。
3.设计一个函数,实现路由表调整算法。
4.外循环:
每个节点读取相邻节点的路由表,更新自己的路由表。
5.内循环:
读取一个相邻节点的路由表,更新一次自己的路由表。
6.交互式确定,是否继续外循环(连续二次交换路由信息后路由表不在变化)。
【程序输出】
1.接收的相邻站的路由表。
2.本站调整前的路由表。
3.本站调整后的路由表。
【调试数据】一个小网络的路由收敛过程
如图,四个网络N、三个路由器R的小网
N1――R1――N2-―R2――N3――R3――N4
用四个文件存储四个路由器的路由表,初始化为只含相邻网的路由(1跳)。
(观察结果,多少次交换路由信息后路由表收敛,即路由表不在变化)
【选作】
1.增加一个网络和一个路由器,相邻节点交换路由表,直至路由表收敛(不在变化)。
2.删除一个网络和一个路由器,相邻节点交换路由表,直至路由表收敛(不在变化)。
三、实验基本原理
距离向量算法
对每一个相邻路由器发送过来的RIP报文,进行以下步骤:
(1)对地址为X的相邻路由器发来的RIP报文,先修改此报文中的所有项目:
把“下一跳”字段中的地址都改为X,并把所有的“距离”字段的值加1.每一个项目都有三个关键数据,即:
到目的网络N,距离d,下一跳路由器是X。
(2)对修改后的RIP报文中的每一个项目,进行以下步骤:
若原来的路由表中没有目的网络N,则把该项目添加到路由表中。
否则,
若下一跳路由器的地址是X,则把收到的项目替换原路由表中的项目
否则
若收到的项目中的距离d小于路由表中的距离,则进行更新,
否则什么都不做。
(3)若3分钟还没有收到相邻路由器的更新路由表,则把次相邻路由器记为不可达的路由器,即把距离置为16.
(4)返回。
四、总体设计
RIP协议路由表调整算法的实现最重要的是距离向量算法的实现:
1.对地址为X的相邻路由器发来的RIP报文,先修改此报文中的所有项目:
把“下一跳”字段中的地址都改为X,并把所有的“距离”字段的值加1.每一个项目都有三个关键数据,即:
到目的网络N,距离d,下一跳路由器是X。
voidNetwork:
:
change(inti){
for(intj=0;j { rts[i][j].distance=rts[i][j].distance+1; rts[i][j].next_route=rt[i].route; } } 2.若原来的路由表中没有目的网络N,则把该项目添加到路由表中。 intx,y; ints1; boolyou=true; for(x=0;x { for(y=0;y { if((rts[i][x].net)! =(rts[j][y].net)) { for(intt=0;t { if((rts[i][t].net)==(rts[j][y].net))you=false; } if(you) { rts[i][tiao[i]].net=rts[j][y].net; rts[i][tiao[i]].distance=rts[j][y].distance; rts[i][tiao[i]].next_route=rts[j][y].next_route; tiao[i]++; s2[i]++; } } you=true; } } 3.若下一跳路由器的地址是X,则把收到的项目替换原路由表中的项目 for(x=0;x { for(y=0;y { if((rts[i][x].next_route)==(rts[j][y].next_route)) { rts[i][x].net=rts[j][y].net; rts[i][x].distance=rts[j][y].distance; } } } 4.若收到的项目中的距离d小于路由表中的距离,则进行更新 you=true; for(x=0;x { for(y=0;y { if(rts[i][y].net==rts[j][x].net){ if(rts[i][y].distance<=rts[j][x].distance) { you=false; s1=y; } if(you) { rts[i][s1].next_route=rts[j][x].next_route; rts[i][s1].distance=rts[j][x].distance; } you=true; } } } 五、源程序 在源程序文件夹下的初始化data.txt //中间是路由器,自己添加 N1R1N2 N2R2N3 N3R3N4 N4R4N5 N5R5N6 N6R6N7 #include #include #include #include #include usingnamespacestd; classRoute{ public: stringroute; stringnet_r; stringnet_l; }; classRoutelists{ public: stringnet; intdistance; stringnext_route; }; classNetwork{ public: Network(); voidshow(); voidbgroutes(); voidchange(inti); voidchange2(inti); voidupdate(inti,intj); voidUPDATE(); boolneighbor(inti,intj); Routelistsrts[20][12]; Routert[20]; voidsave(); private: intn,n1; inttiao[20]; ints2[20]; }; //构造函数 Network: : Network(){ cin>>n;//输入路由器个数 n1=n; for(intj=0;j<20;j++) { tiao[j]=0; } for(inttt=0;tt<20;tt++){ s2[tt]=0; } ifstreaminfile("data.txt",ios: : in); if(! infile) { cerr<<"openerror! "< exit (1); } inti=0; while(n1--) { infile>>rt[i].net_l>>rt[i].route>>rt[i].net_r; i++; } infile.close(); } //初始化路由表 voidNetwork: : bgroutes(){ ofstreamoutfile("R.txt"); if(! outfile) { cerr<<"openerr.txterror! "< exit (1); } for(inti=0;i rts[i][0].net=rt[i].net_l; rts[i][0].distance=1; rts[i][0].next_route="直接交付"; outfile< tiao[i]++; rts[i][1].net=rt[i].net_r; rts[i][1].distance=1; rts[i][1].next_route="直接交付"; outfile< tiao[i]++; } outfile.close(); } //显示所有路由表 voidNetwork: : show(){ for(inti=0;i cout<<""<<"第"< for(intj=0;j { cout<<""< } cout< } cout< cout< cout< } //对相邻路由表,距离加1,下一跳变为该路由名字 voidNetwork: : change(inti){ for(intj=0;j { rts[19][j].distance=rts[i][j].distance; rts[19][j].next_route=rts[i][j].next_route; rts[i][j].distance=rts[i][j].distance+1; rts[i][j].next_route=rt[i].route; } } //将改变后的路由表变回来 voidNetwork: : change2(inti){ for(intj=0;j { rts[i][j].distance=rts[19][j].distance; rts[i][j].next_route=rts[19][j].next_route; } } //对一个路由表进行更新操作 voidNetwork: : update(inti,intj){ intx,y; ints1; boolyou=true; for(x=0;x { for(y=0;y { if((rts[i][x].net)! =(rts[j][y].net)) { for(intt=0;t { if((rts[i][t].net)==(rts[j][y].net))you=false; } if(you) { rts[i][tiao[i]].net=rts[j][y].net; rts[i][tiao[i]].distance=rts[j][y].distance; rts[i][tiao[i]].next_route=rts[j][y].next_route; tiao[i]++; s2[i]++; } } you=true; } } for(x=0;x { for(y=0;y { if((rts[i][x].next_route)==(rts[j][y].next_route)) { rts[i][x].net=rts[j][y].net; rts[i][x].distance=rts[j][y].distance; } } } you=true; for(x=0;x { for(y=0;y { if(rts[i][y].net==rts[j][x].net){ if(rts[i][y].distance<=rts[j][x].distance) { you=false; s1=y; } if(you) { rts[i][s1].next_route=rts[j][x].next_route; rts[i][s1].distance=rts[j][x].distance; } you=true; } } } } //对所有路由表进行更新 voidNetwork: : UPDATE(){ charstop; for(intt=0;t for(intj=0;j { for(inti=0;i { if(neighbor(i,j)) { change(i); update(j,i); change2(i); //Sleep(1000); stop=getchar(); cout<<"================================================="< cout<<"根据第"< cout<<"================================================="< for(intx=0;x { cout<<""<<"第"< for(inty=0;y { cout<<""< } cout< } cout< cout< cout< } } } } } //判断两路由是否相邻 boolNetwork: : neighbor(inti,intj){ if(i-j==1)returntrue; if(j-i==1)returntrue; returnfalse; } //保存 voidNetwork: : save(){ ofstreamoutfile1("R1.txt"); for(inti=0;i outfile1< } outfile1.close(); ofstreamoutfile2("R2.txt"); for(intj=0;j outfile2< } outfile2.close(); ofstreamoutfile3("R3.txt"); for(intk=0;k outfile3< } outfile3.close(); } intmain(){ Networkgfw; gfw.bgroutes(); gfw.show(); gfw.UPDATE(); gfw.show(); gfw.save(); return0; } 六、程序运行情况 1.初始化的路由表 2.更新中的路由表 3.更新完后的路由表 七、实验总结 通过本次课程设计,我RIP协议的理解更深了,最重要的是,在编写距离路由算法时,经过多次的修改完善,对于距离向量算法的理解更加透彻,其实这次课程设计的难度就是距离路由算法的实现,在这一次的课程设计后,对因特网的路由选择协议的理解由略懂到完全理解,感觉学到了很多。 当然,自己对计算机网络其他方面的问题还有很多不懂,还需更加努力的学习。 最后,谢谢金老师这几天的细心指导。 参考文献 【1】陆魁军等编著计算机网络基础实践教程.北京: 清华大学出版社,2005.11 【2】谭浩强编著C++程序设计.北京: 清华大学出版社,2004,6 【3】谭浩强编著C程序设计.北京: 清华大学出版社,2005,7 【4】王洪涛编著深入剖析VisualC++.北京: 人民邮电出版社,2003,3 【5】陈良伦编著网络工程概论.北京: 机械工业出版社,2007,4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RIP协议路由表调整算法的实现 c+编写 RIP 协议 路由 调整 算法 实现 c+ 编写