下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验二 网络路由层协议模拟实验报告(1)实验目的和要求1. 掌握 VB 、VC+ 、VS 或 JAVA 等集成开发环境编写路由仿真程序的方法;2. 理解并掌握距离向量路由协议和链路状态路由协议的工作原理。(2)实验内容实现链路状态路由算法的模拟。基本要求 (动态生成网络拓扑图, 节点间的距离随机生成。 每个节点生成自己的链路状态分 组,依据收到的链路状态表得到整体网络结构,在得到的整体网络结构上用最短路径算法, 生成每个节点的路由表)(3)距离矢量路由算法的原理距离向量路由算法 (Bellman-Ford Routing Algorithm) ,作为距离向量协议的一个算 法,如RIP,( RI
2、P跳 最大跳数16 ) BGP。使用这个算法的路由器必须掌握这个距离表,它告诉在网络中每个节点的最远和最近距离。 在距离表中的这个信息是根据临近接点信息的 改变而时时更新的。 这个在算法中的度量公式是跳跃的次数, 等待时间, 流出数据包的数量概括地说,距离向量算法要求每一个路由器把它的整个路由表发送给与它直接连接的其它路由器。路由表中的每一条记录都包括目标逻辑地址、 相应的网络接口和该条路由的向量距离。 当一个路由器从它的相邻处收到更新信息时, 它会将更新信息与本身的路由表相比较。 如果 该路由器比较出一条新路由或是找到一条比当前路由更好的路由时,它会对路由表进行更 新:将从该路由器到邻居之间
3、的向量距离与更新信息中的向量距离相加作为新路由的向量距 离。在距离向量路由算法中, 相邻路由器之间周期性地相互交换各自的路由表备份。 当网络 拓扑结构发生变化时,路由器之间也将及时地相互通知有关变更信息。 距离矢量路由算法在理论中可以工作, 但在实践中有一个严重的缺陷: 虽然它总是能够达到 正确的答案,但是它收敛到正确答案的速度非常慢,尤其是,它对于好消息的反应非常快, 但是对于坏消息的反应非常迟缓。(4)程序源代码(c 语言)#include "stdio.h"#include "stdlib.h"/atoi 的头文件/#include "a
4、lloc.h"#include<conio.h>#define ROUTNUM 7/ 定义路由的个数为 7 个typedef structint dis;/ 存延迟大小int from;/ 存下一跳的路由RoutNode;RoutNode dataROUTNUMROUTNUM;/* 路由表,能存 7 行 7 列数据 ,数据为权值*/void InitData(FILE* pfile); /* 从数据文件读取数据,初始化路由表 */void OutputRoutData(); /* 输出所有的路由表 */void Communication(int recv, int se
5、nd);/*send 点向 recv 点发送自己的路由表 */void Exchange(); /* 所有节点进行一次数据交换 , 更新路由表 */ void main()int start, end, i, j;FILE *pfile;pfile = fopen("1.txt", "r");if (pfile = NULL)printf(" 文件打开错误,按任意键退出 .n");getch();return;elseprintf("n 路由表初始 :n");InitData(pfile);fclose(pfile
6、);for (i = 0; i<ROUTNUM; i+)printf("%c|", i + 65);for (j = 0; j < ROUTNUM; j+)if (datai j.dis > 0)printf("<%c %d> ", j + 65, dataij.dis);printf("n"); / 显示各路由的路由表果)for (i = 0; i < ROUTNUM; i+)/ 循环 7 次(好像多余,改成一次得到同样结Exchange();printf("n 路由表交换 :n&quo
7、t;);OutputRoutData();printf(" 输入起始路由节点数字(%d-%d)0 代表 A,1 代表 B. : ", 0, ROUTNUM - 1);scanf("%d", &start);printf(" 输入终点路由节点数字(%d-%d)0 代表 A,1 代表 B. : ", 0, ROUTNUM - 1);scanf("%d", &end);if (start = end | start < 0 | start > 6 | end < 0 | end >
8、 6) printf("n 输入错误,请按任意键退出 n"); getch();return;elseint cur = start;int total = 0;if (datastartend.dis < 0)printf(" 没有路由路径发现 !n");getch();return;printf("%c->", cur + 65);while (datacurend.from >= 0) / 起始点与终点不相连。 0 是 Atotal += datacurdatacurend.from.dis; /total 变
9、成 cur 与下一跳的延迟printf("%c->", datacurend.from + 65);cur = datacurend.from; / 起始路由变成下一跳total += datacurend.dis;printf("%cn 总的路由距离 = %d", end + 65, total);getch();return;void InitData(FILE *pfile)char num10;int i = 0;char c;int m, n;fseek(pfile, 0, 0); / 文件指针从距 0 位置 0 距离开始读取for (m
10、 = 0; !feof(pfile) && m < 7; m+)/feof(pfile), 文件尾返回 1,不是返回 0.即不是文件尾部且 m<7 循环 .for (n = 0; !feof(pfile) && n < 7; n+)while (!feof(pfile)c = fgetc(pfile);/ 读取单个字节if (c = ',')/* 读完一个数字 */numi = '0'/ 赋值为空datamn.dis = atoi(num);/atoi将字符变成数字, 将路由权值给data.disdatamn.f
11、rom = -1;/ 直接相连下一跳全都赋值为 -1i = 0;break; /*end of if*/else if (c >= '0' && c <= '9') | c = '-') /*如果读到数字或符号 .本题路由权值只能0到 9*/numi+ = c; /*end of else if*/ /*end of while*/ /*end of for (n = 0*/ /*end of for (m = 0*/void OutputRoutData()int i, j;printf(" ")
12、;for (i = 0; i < ROUTNUM; i+)printf(" %c ", i + 65);printf("n");for (i = 0; i < ROUTNUM; i+)printf("%c ", i + 65);for (j = 0; j < ROUTNUM; j+)if (datai j.dis < 0) / 如果无路径 printf(" -");elseif(datai j.dis>=10)printf(" %d", dataij.dis);el
13、seprintf(" %d", datai j.dis);if (datai j.from < 0)/ 如果未经过其它节点 所以直接相连的路由下一跳为 -1printf(" - ");elseprintf(" %c ", dataij.from + 65);/ 输出下一跳路由printf("n");void Communication(int recv, int send) / 相连的两路由 recv 和 send 交换数据计算一次得到暂时最短距离int i;for (i = 0; i < ROUTNU
14、M; i+)if (datasendi.dis > 0)/ 如果 send 节点到 i 号节点有路线if (datarecvi.dis < 0) / 如果 recv 到 i 号节点无路径datarecvi.dis = datasendi.dis + datarecvsend.dis; /第一种recv 不予 i 相连, recv 到不与他相连的 i 的延迟datarecvi.from = send;下一跳为 sendelse if (datarecvi.dis > datasendi.dis + datarecvsend.dis)/种 recv 与 i 相连,且直接相连值大于
15、间接到 i 的延迟/ 如果现有路径比新路径远datarecvi.dis = datasendi.dis + datarecvsend.dis;recv 到 i 的延迟改为间接延迟的值datarecvi.from = send;/ 下一跳改为 send/第二/ 将void Exchange()计算最短数值int i, j;for (i = 0; i < ROUTNUM; i+)/ 实现所有相连的两路由进行数据交换并for (j = 0; j < ROUTNUM; j+)if (datai j.dis > 0)/ 如果两个节点之间有路径j 号节点Communication(j,
16、i); /将 i 号节点的路由表发送给/*1.text 中存者路由信息0, 2,-1,-1, 8,-1, 5,2, 0,4, 5,-1,-1,-1,-1,4, 0,-1,-1, 9,-1,-1, 5,-1, 0,1,-1,-1,8,-1,-1,1, 0,-1, 7,-1,-1, 9,-1,-1, 0, 3,5,-1,-1,-1, 7, 3, 0, 数值代表权值(如延迟大小) 0 代表目的网络到其本身 -1 代表无法直接相连*/网络拓扑结构(5 )实验结果HCST STULIO SUITE跨由表初始:路由奏交换:B4DR4pH9F8111环-C:DOCTTWEMTS AW) SETTTHGST.
17、ENOTO桌面'Debyl计管机两络实勢三mftSa我的电胞计建机网结 实验三.hwr.lA>:ipluLAdranced BatI gi 一算机珂搭 实益二-optCCS 2 CCSOOO)实验三.cpprSetup CCS 2CCSOOO)回收站浏上邻届Mul ti Sim;JO. 1cv T: .DOCUEIHS AN勁实验二网络珞由.卄算桩网絡实验三ED4 58BA B CDEB R< <8 »处9>1>1>3>7>D更7BS-与一£D9BIBD0-1-1-Q-G 5-? ft 11 B 8 E ?-输入起始路由至点数J<0-6>0代表筑t代表 输入线点疇宙咐点数T<0-6>t«代勲 丄代紅 走、的踣由距离=J11103IDE 6 7 1(6)实验总结在输入 代码后发生错误,原因是程序 中用了 getch() 函数,但开头没有定义 #include<conio.h> ,修改过之后程序运行正确, 起始路由节点输入为 3 ,终点路由节点输 入为 2 ,结果输出如图。其最短的距离为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论