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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

RIP协议C语言实现.docx

1、RIP协议C语言实现RIP协议的C+实现班级: xxxxxxx 学号: xxxxxxxxxx 姓名: xxxx xxxx.x.xx一、RIP协议距离向量算法原理RIP的距离向量算法如下,当收到相邻路由器(其地址为X)的一个RIP报文时(1)先修改此RIP报文中的所有项目:将下一跳字段中的地址都改为X,并将所有的距离字段值加1;(2)对修改后的RIP报文中的每一个项目重复如下步骤:若项目中的目的网络不在路由表中,则将该项目加到路由表中。否则,若下一跳字段给出的路由器地址相同,则将收到的项目替换原路由表中的项目。否则,若收到的项目中的距离小于路由表中的距离,则进行更新。否则,什么都不做;(3)若3

2、分钟还没有收到相邻路由器的更新路由表,则将此相邻路由器记为不可达的路由器,即将距离置为16(距离为16表示不可达);(4)返回。RIP让互联网中所有的路由器都和各自的相邻路由器不断交换并更新路由信息,最终可以使得每个路由器到到每个目的网络的距离最短。总之,RIP的优点是算法简单,但是RIP不适应大网络,也不适应变化剧烈的网络环境。从RIP算法的分析中可以发现其特点是“好消息传得快,坏消息传的慢”,这意味着当网络出现故障时,信息要经过较长时间才能通知到网内所有的路由器。二、RIP协议基于C+的实现2.1 程序流程图2.2 需要生成的网络示意图 即输入程序用的txt文件内容如下id1 R1 R5i

3、d2 R1 R4id3 R1 R2id4 R2 R3id5 R5 R6id6 R3 R62.3 程序运行结果输入写好的网络信息txt文件route更新前的路由表信息更新路由表中更新后的路由表信息2.4 程序代码#include#include#include#include#includeusing namespace std;#define MAX 100class Net_sec;/路由类相当于头结点class Routepublic: string route; Net_sec *next;/网段类,包含相邻弧的信息(不用route_f,用next),也可用于存储文件读入信息(用rout

4、e_f,不用next)class Net_sec public: string net_id; string route_f; string route_n; Net_sec* next;/路由表内容类class Contentspublic: string net_id; int diatance; string next_stop;/*上面是存储类型的三个类*/路由表和网段类class Route_netpublic: void open_file(ifstream& infile); Route_net(); bool judge(string str); void Init_route

5、s(); void show(); void change(int i); void update(int i); void UPDATE(); bool neighbor(int i,int j);/j和i相邻吗private: list li; /读取信息存储在这 Route routeMAX; /存储图的信息,即各路由的邻接表 list routesMAX; /存储各路由路由表 list temp; /用于存储处理后的临时路由表 string flectionMAX; /用于对应路由器与存储序列标号 int sum; /用于统计路由个数;/打开文件函数void Route_net:ope

6、n_file(ifstream& infile) string filename; coutfilename; infile.open(filename+.txt).c_str(); if(!infile) cerrfile open error!_idt1.route_ft1.route_n; li.push_back(t1); strm.clear(); /以上把文件内容存入了类属性li中 list:iterator it1=li.begin(),it2; int i=0; Net_sec *t2,*t3; for(;it1!=li.end();it1+) if(judge(*it1).r

7、oute_f) flectioni=(*it1).route_f; routei.route=flectioni; t3=t2=routei.next=new Net_sec(); for(it2=li.begin();it2!=li.end();it2+) if(flectioni=(*it2).route_f) t2-net_id=(*it2).net_id; t2-route_n=(*it2).route_n; t3=t2; t2-next=new Net_sec(); t2=t2-next; if(flectioni=(*it2).route_n) t2-net_id=(*it2).n

8、et_id; t2-route_n=(*it2).route_f; t3=t2; t2-next=new Net_sec(); t2=t2-next; t3-next=NULL; i+; if(judge(*it1).route_n) flectioni=(*it1).route_n; routei.route=flectioni; t3=t2=routei.next=new Net_sec(); for(it2=li.begin();it2!=li.end();it2+) if(flectioni=(*it2).route_f) t2-net_id=(*it2).net_id; t2-rou

9、te_n=(*it2).route_n; t3=t2; t2-next=new Net_sec(); t2=t2-next; if(flectioni=(*it2).route_n) t2-net_id=(*it2).net_id; t2-route_n=(*it2).route_f; t3=t2; t2-next=new Net_sec(); t2=t2-next; t3-next=NULL; i+; sum=i; routei.next=NULL;/网络拓扑图的邻接表表示法/判断一个路由是否已为其添加了路由表bool Route_net:judge(string str) int i=0;

10、 while(flectioni!=&inext) p.diatance=1; _id=t-net_id; p.next_stop=直接交付; routesi.push_back(p); /显示各路由表void Route_net:show() int i=0; list:iterator p; for(;isum;i+) cout This is the table of flectioniendl; for(p=routesi.begin();p!=routesi.end();p+) cout(*p).net_id (*p).diatance (*p).next_stopendl; /对相

11、邻路由表change一下,距离加1,下一跳变为该路由名字void Route_net:change(int i) Contents co; temp.erase(temp.begin(),temp.end(); list:iterator p=routesi.begin(); for(;p!=routesi.end();p+) co.diatance=(*p).diatance+1; _id=(*p).net_id; co.next_stop=flectioni; temp.push_back(co); /对一个路由进行更新操作void Route_net:update(int i) int

12、count=0;list:iterator it1=routesi.begin(); list:iterator it2=temp.begin(); for(;it2!=temp.end();it2+) for(it1=routesi.begin();it1!=routesi.end();it1+) if(*it1).net_id=(*it2).net_id) count+; if(*it1).next_stop)=(*it2).next_stop) (*it1).diatance=(*it2).diatance; (*it1).next_stop=(*it2).next_stop; if(*

13、it1).next_stop!=(*it2).next_stop)&(*it1).diatance(*it2).diatance) (*it1).diatance=(*it2).diatance; (*it1).next_stop=(*it2).next_stop; if(count=0) routesi.push_back(*it2); count=0; /对所有路由进行更新路由表操作void Route_net:UPDATE() int j=0,i=0,I; for(I=0;Isum;I+) for(j=0;jsum;j+) for(i=0;isum;i+) if(neighbor(j,i) change(i); update(j); coutThis is the I+1 running.next) if(flectionj=p-route_n) return true; return false;int main() Route_net route_net; route_net.Init_routes(); route_net.show(); route_net.UPDATE(); route_net.show(); return 0;

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

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