顺序查找路由表分析.docx
- 文档编号:10255925
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:15
- 大小:228.79KB
顺序查找路由表分析.docx
《顺序查找路由表分析.docx》由会员分享,可在线阅读,更多相关《顺序查找路由表分析.docx(15页珍藏版)》请在冰豆网上搜索。
顺序查找路由表分析
青岛农业大学
理学与信息科学学院
计算机网络综合实习报告
题目
专业
学号
姓名
指导教师
日期
一、课程设计任务和目的
1.了解路由器更新的原理。
2.了解表示路由器的结构。
3.掌握路由器转发分组的算法。
二、设计要求
编写计算机程序,用(目的网络,掩码,下一跳)的结构表示路由表,以一个目的地址作为输入,顺序查找路由表,找出正确的下一跳,并输出。
三、设计内容
3.1顺序查找路由表的工作原理
使用子网划分后,路由表必须包含:
目的地址,子网掩码,下一跳地址。
路由器分组转发的算法如下:
(1)从收到的数据包的首部提取目的IP地址D;
(2)对路由器直接相连的网络逐个进行检查:
用个网络的掩码和D逐位相“与”,看结果是否和相应的网络地址匹配。
若匹配,则把分组直接交付,转发任务结束,否则就是间接交付执行(3)。
(3)若路由表中有目的地址为D特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器否则执行(4)。
(4)对路由表的每一行,用其中的子网掩码和D逐位相“与”,其结果为N。
若N与该行的目的网络相匹配,则把数据报送给该行指明的下一跳路由器;否则执行(5)。
(5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则执行(6)。
(6)报告转发分组出错,没有查找到路由。
简单来说,就是当来一个数据报时,抓
出IP地址,与子网掩码相与得出网络号。
再与路由表相对比,查询下一跳。
3.2课程设计程序运行结果与分析
此程序是编写了一些方法,然后在主程序中进行调用,还定义了一些数组,有的用到了动态定义数组。
在这个程序中定义路由器的一个路由表中有三组数据,任意输入三组数据。
在此程序示范运行时,用到的三组数据如表3-1所示:
表3-1路由表
目的网络地址
子网掩码
下一跳
128.30.33.0
128.30.33.128
128.30.36.0
255.255.255.128
255.255.255.128
255.255.255.0
接口0
接口1
R2
然后可以任意输入一个目的地址IP,在示范运行时用到的目的地址IP是:
128.30.33.138和128.3.2.136。
目的地址IP与路由表中的第一组子网掩码逐位相与,如果相与结果与其对应的目的网络地址匹配,则它的下一跳是该子网掩码对应的下一跳;不匹配,则目的地址IP与第二组子网掩码进行逐位相与,看其结果。
就这样,目的地址IP顺序与路由表中的子网掩码进行相与,直到找到下一跳为止,若是找不到,则输出“转发分组出错”。
在此程序中定义的主要方法有:
(1).voidzore_one(intn):
表示将十进制参数n除2取余,得出的二进制序列正排。
(2).voidand(inta,intb):
表示将参数a,b转换成二进制进行逐位相与得出二进制数,再将这个二进制数倒序,然后转换成十进制数。
定义的主要数组有:
(1).intpur_net[3][4]:
目的网络地址。
(2).intsubnet[3][4]:
子网掩码。
(3).stringnext[3]:
下一跳。
编译链接后,开始运行,循环输入路由器(目的网络,子网掩码,下一跳)的三组数据,如图3-1所示:
图3-1输入数据显示路由表
显示出路由表之后,再任意输入一个目的地址IP,比如:
128.30.33.138。
如图3-2所示:
图3-2输入目的地址IP
然后按任意键继续,将网络地址IP与子网掩码进行逐位相与,寻找下一跳,如图3-3所示:
图3-3寻找下一跳
若输入的目的地址IP是:
128.3.2.136,顺序查找路由表,没有找到它的下一跳,则输出“转发分组出错”。
如图3-4所示:
图3-4转发分组出错
四、改进和建议
这个顺序查找路由表的下一跳的程序设计不是很完美,有一些我认为应该有的功能都没有实现,比如从文本中读取路由表,这样方便一些,省的还要每次输入那么多的数据,若是在文本中读取路由表,直接更改文本中路由表的数据,就可以实现多个路由表的计算,在这儿所说的从文本中读取路由表,并不是简单地从磁盘文件中读取数据,并简单地将数据显示在显示器上,而是将从磁盘文件中读取的数据作为程序的输入数据进行运算。
这个程序另外一个不完美的地方是输入一组目的地址IP,运行程序得出结论后,再一次输入另一组的目的地址IP进行计算的功能没有实现,意思就是说应该能够循环输入多组目的地址IP,使它们可以顺序查找同一个路由表,我做的这个顺序查找路由表程序若是还想输入另一组目的地址IP进行计算下一跳时,就必须再次重新运行程序,重新输入各组数据,这样太麻烦了。
五、总结
这次课程设计我又一次复习了计算机网络方面的知识,学会了动态建立数组,多次运用了方法调用,提高效率。
这次课程设计不止让我学到了很多,还让我知道了许多自己的不足之处。
通过这次顺序查找路由器程序的设计,我充分认识到应该将理论付诸于实践的重要性。
这次我做的题目要求是编写计算机程序,用(目的网络,掩码,下一跳)的结构表示路由表,以一个目的地址作为输入,顺序查找路由表,找出正确的下一跳,并输出。
在当初学习计算机网络时,顺序查找路由器的这个知识点非常明白,自己思路和计算也很简单,就是当来一个数据报时,抓出IP地址,与子网掩码相与得出网络号,再与路由表中数据相对比,查询下一跳,思路简单、清晰、明了。
但是简单的人工计算转化成计算机语言真的很不简单。
做这个程序花费了我很大的精力,有时候想到了一些功能,但就是不能用语言去实现它,这暴露了我将计算机语言等方面的理论知识和应用实践相结合的能力有所欠缺的弱点,使我充分认识到自己编程能力方面的不足。
希望通过后期的努力,能让我这方面的能力有所提高。
在这次课程设计中,我遇到了许多的问题。
有不会的时候我就去翻看以前的C语言、C++等专业课资料去解决,有时直接上网查找答案,但是当看书和上网查找都不能找到我要的答案以后,请教周围的同学就是一种比较简便的方法。
六、主要参考文献
[1]谢希仁.计算机网络.电子工业出版社,2008.1.
[2]谭浩强.C++面向对象程序设计.清华大学出版社,2006.1.
附录:
#include
#include
#include
#include
usingnamespacestd;
intM[10],N[10],K[10];
intA,I,flag;
intIP[4];
intpur_net[3][4];
intsubnet[3][4];
stringnext[3];
intand_result[4];
voidinput1()//循环输入路由器(目的网络,子网掩码,下一跳)
{inti,k;
for(i=0;i<3;i++)
{
cout<<"请输入第"<
"< for(k=0;k<4;k++)//输入目的网络 { cin>>pur_net[i][k]; } } for(i=0;i<3;i++) { cout<<"请输入第"< "< for(k=0;k<4;k++)//输入子网掩码 { cin>>subnet[i][k]; } } for(i=0;i<3;i++)//输入下一跳 { cout<<"请输入第"< "< cin>>next[i]; } } voidoutput2()//循环显示目的地址和子网掩码 { inti,k; for(i=0;i<3;i++) { for(k=0;k<3;k++) { cout< } cout< cout<<"\t\t"; for(k=0;k<3;k++) { cout< } cout< cout<<"\t\t"< } } voidoutput1()//循环显示整个路由表 { input1(); cout<<"路由器建立的路由表如下: "< cout< cout<<"目的网络"<<"\t"<<"子网掩码"<<"\t"<<"下一跳"< output2(); cout<<"请输入一个目的地址: "< inti; for(i=0;i<4;i++)//输入目的地址 { cin>>IP[i]; } cout<<"您输入的目的地址是: "; for(i=0;i<3;i++)//显示目的地址 { cout< } cout< cout< } intzore_one(intn)//将十进制数除2取余,结果先正排 { A=0; ofstreamoutfile("1.txt");//定义文件输出对象,打开1.txt inta[10],b,i=0; while(n>0) { b=n%2; if(b! =0) {n=(n-1)/2;} else {n=n/2;} a[i]=b;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 顺序 查找 路由 分析