距离向量算法更新路由表2
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if (start==end || start<0 || start>6 || end<0 || end>6)
{
printf("\nwrong input, press any key to quit.\n");/*设定距离大于6错误*/
return;
}
else
{
int cur = start;
int total = 0;
{
printf("%d ", i);
for (j=0; j<ROUTNUM; j++)
{
if (data[i][j].dis < 0) /*如果无路径*/
printf("- ");
else
printf("%-5d", data[i][j].dis);
if (data[i][j].from < 0) /*如果未经过其它节点*/
与同学分工合作,加强了团队精神与合作意识,培养严谨的工作作风,养好良好的工作习惯,培养正确的劳动观与人生观,也培养团队集体精神。我觉得心态在工作中是相当重要的,有好的心态才会在工作中发挥出自己最好的水平,做事的效率也是事半功倍。还有就是要有扎实的理论知识,如果所学知识不过扎实,在实习过程中会漏洞百出,大大减慢自己的实习进度,也会让自己感到很气恼。这次实习,培养我们的实践能力和创新精神。加强了我的动手能力和对问题的分析能力,以及发现并解决问题的能力。
假设建立七个路由器,其中三个A,B和C。路由器A的两个网络接口E0和S0
分别连接在10.1.0.0和10.2.0.0网段上;路由器B的两个网络接口S0和S1
分别连接在10.2.0.0和10.3.0.0网段上;路由器C的两个网络接口S0和E0
分别连接在10.3.0.0和10.4.0.0网段上;
如上图中各路由表的前两行所示,通过路由表的网络接口到与之直接相连的网
四.程序编写
#include <stdio.h>
#include <stdlib.h>
#define ROUTNUM 7/*定义七个路由器*/
typedef struct/*定义结构*/
{
int dis;
int from;
}RoutNode;
RoutNode data[ROUTNUM][ROUTNUM]; /*路由表*/
printf("- ");
else
printf("%c ", data[i][j].from+65);
}
printf("\n");
}
}
void Communication(int recv, int send)
{int i;
for (i=0; i<ROUTNUM; i++)
{
if (data[send][i].dis > 0) /*如果send节点到i号节点有路线*/
Fra Baidu bibliotekreturn;
}
else
InitData(pfile);
fclose(pfile);
printf("\nInitial State:\n");
OutputRoutData();
for (i=0; i<ROUTNUM; i++)
{
Exchange();/*小于远距离,路由更新*/
}
printf("\nState Exchanged:\n");
void main()
{
int start,end;
int i;
FILE *pfile;
pfile = fopen("data.txt", "r");/*打开数据文件data*/
if (pfile == NULL)/*文件data为空,显示错误*/
{
printf("data file failed to open, press any key to quit.\n");
printf("%c->",data[cur][end].from+65);
cur = data[cur][end].from;
}
total += data[cur][end].dis;
printf("%c\ntotal distance=%d", end+65, total);
return;
}
}
void InitData(FILE* pfile)
if (data[start][end].dis < 0)
{
printf("No routine find!\n");
return;
}
printf("%c->", cur+65);
while (data[cur][end].from >= 0)
{
total += data[cur][data[cur][end].from].dis;
通过实习使自己对课本上的知识有了更进一步的了解同时应用于实际,使得理论与实际相结合,加深了自己对课本知识的理解。实习还锻炼了我个人的自主学习能力,例如,充分利用图书馆的海量信息,查阅相关资料,学到了许多课本以外的相关知识。能用BOSON网络路由仿真软件,能达到学以致用。对我们来说,理论与实际同样重要,这是我们以后在工作中说明自己能力的一个重要标准。了解了路由器的相关知识,路由表的的基本知识,路由表建立及更新,通过网络连接,掌握了简单路由元器件配置,对故障的诊断和排除以及对其原理工作有了一般掌握。
void InitData(FILE* pfile); /*从数据文件读取数据,初始化路由表*/
void OutputRoutData(); /*输出所有的路由表*/
void Communication(int recv, int send); /*send点向recv点发送自己的路由表*/
void Exchange(); /*所有节点进行一次数据交换,更新路由表*/
{if (data[i][j].dis > 0) /*如果两个节点之间有路径*/
{Communication(j,i); /*将i号节点的路由表发送给j号节点*/
}
}
}
}
五.运行结果
六.实习心得和体会
通过本次实习对BOSON模拟软件有了一定的认识,基本了解其中的模拟元件及应用,能够用其进行电路设计模拟。用BOSON模拟软件模拟电路设计如同在实验室面板上搭接电路,且不受元器件种类、数量和测试仪器的限制,从而为网络系统的设计、产品的开发提供了一种全新的手段和便捷的途径,同时BODON模拟软件以其高品质的性能、强大的分析能力和在线屏幕显示能让设计者轻松、有效地完成设计任务。应用BOSON软件还可以简化并提高教学的难度,让我们可以很轻松的学会。
if (c==',') /*读完一个数字*/
{
num[i] = '\0';
data[m][n].dis = atoi(num);
data[m][n].from = -1;
i = 0;
break;
}
else if ((c>='0' && c<='9') || c=='-') /*如果读到数字或符号*/
同样道理,路由器B还会产生一条(10.1.0.0,S0,1)路由,这条路由是通过网络端口S0从路由器A获得的。如此反复,直到最终收敛,形成图中所示的路由表。
概括地说,距离向量算法要求每一个路由器把它的整个路由表发送给与它直接连接的其它路由器。路由表中的每一条记录都包括目标逻辑地址、相应的网络接口和该条路由的向量距离。当一个路由器从它的相邻处收到更新信息时,它会将更新信息与本身的路由表相比较。如果该路由器比较出一条新路由或是找到一条比当前路由更好的路由时,它会对路由表进行更新:将从该路由器到邻居之间的向量距离与更新信息中的向量距离相加作为新路由的向量距离。
{
num[i++] = c;
}
}
}
}
}
void OutputRoutData()
{
int i,j;
printf(" ");
for(i=0; i<ROUTNUM; i++)/*读取路由距离*/
{
printf("< %d >", i);
}
printf("\n");
for (i=0; i<ROUTNUM; i++)
参考书籍:
《计算机网络》谢希仁著电子工业出版社
实 习成绩评定表
学生姓名
专业班级
通信07级2班
论文题目
距离向量算法更新路由表
{
char num[10];
int i=0;
char c;
int m,n;
fseek(pfile, 0, 0);
for (m=0; !feof(pfile)&&m<7; m++)
{
for (n=0; !feof(pfile)&&n<7; n++)
{
while (!feof(pfile))
{
c = fgetc(pfile);
{
data[recv][i].dis = data[send][i].dis + data[recv][send].dis;
data[recv][i].from = send;
}}}}
void Exchange()
{
int i,j;
for (i=0; i<ROUTNUM; i++)
{ for (j=0; j<ROUTNUM; j++)
计算机网络实习报告
论 文 题 目距离向量算法更新路由表
学生专业班级通信工程07级2班
学生姓名(学号)
指 导 教 师
完 成 时 间2010年5月24日
实 习(设计)地点信息楼139机房
2010年5月24日
距离向量算法更新路由表
一.实验目的
1.认识路由器及路由建立与更新的原理
2.理解、掌握和利用距离向量算法解决遇到的问题
3. 能够用距离向量算法建立一个路由表并进行更新
4.所实现的路由器模拟Internet上的IP路由器,它能确定网络的最短路由,并在其上传输分组
二.原理概述
距离向量路由算法(Bellman-Ford Routing Algorithm),也叫做最大流量演算法(Ford-Fulkerson Algorithm),其被距离向量协议作为一个算法,如RIP, BGP, ISO IDRP, NOVELL IPX。使用这个算法的路由器必须掌握这个距离表(它是一个一维排列-“一个向量”),它告诉在网络中每个节点的最远和最近距离。在距离表中的这个信息是根据临近接点信息的改变而时时更新的。表中数据的量和在网络中的所有的接点(除了它自己本身)是等同的。这个表中的列代表直接和它相连的邻居,行代表在网络中的所有目的地。每个数据包括传送数据包到每个在网上的目的地的路径和距离/或时间在那个路径上来传输。这个在那个算法中的度量公式是跳跃的次数、等待时间、流出数据包的数量等等。
络的网络连接,其向量距离设置为0。这即是最初的路由表。
当路由器B和A以及B和C之间相互交换路由信息后,它们会更新各自的路由表。
例如,路由器B通过网络端口S1收到路由器C的路由信息(10.3.0.0,S0,0)和(10.4.0.0,E0,0)后,在自己的路由表中增加一条(10.4.0.0,S1,1)路由信息。该信息表示:通过路由器B的网络接口S1可以访问到10.4.0.0网段,其向量距离为1,该向量距离是在路由器C的基础上加1获得的。
OutputRoutData();
printf("input the start node(%d-%d) : ", 0, ROUTNUM-1);
scanf("%d", &start);
printf("input the end node(%d-%d) : ", 0, ROUTNUM-1);
scanf("%d", &end);
在距离向量路由算法中,相邻路由器之间周期性地相互交换各自的路由表备份。当网络拓扑结构发生变化时,路由器之间也将及时地相互通知有关变更信息。
它是一种动态路由选择算法。每个路由器都定期与其相邻的所有路由器交换路由表,据此更新它们自己的路由表。
所有路由器都监听从其邻居传来的路由表,并在下列情况下更新其路由表:
1.发现了一条到达某目的的新路由,而该路由在原来的路由表中不存在,即发现了一条新路由,则在路由表中增加该路由。
2.发现了一条到达某目的的、距离更短的新路由,则用该路由替换原有的路由。
3.到达某目的的一条路由,其后继结点到达该目的地的距离发生了变化,则需要更新该路由的距离。
三.设计方案
路由表的建立和更新
{
if (data[recv][i].dis < 0) /*如果recv到i号节点无路径*/
{
data[recv][i].dis = data[send][i].dis + data[recv][send].dis;
data[recv][i].from = send;
}
else if (data[recv][i].dis > data[send][i].dis + data[recv][send].dis) /*如果现有路径比新路径远*/
{
printf("\nwrong input, press any key to quit.\n");/*设定距离大于6错误*/
return;
}
else
{
int cur = start;
int total = 0;
{
printf("%d ", i);
for (j=0; j<ROUTNUM; j++)
{
if (data[i][j].dis < 0) /*如果无路径*/
printf("- ");
else
printf("%-5d", data[i][j].dis);
if (data[i][j].from < 0) /*如果未经过其它节点*/
与同学分工合作,加强了团队精神与合作意识,培养严谨的工作作风,养好良好的工作习惯,培养正确的劳动观与人生观,也培养团队集体精神。我觉得心态在工作中是相当重要的,有好的心态才会在工作中发挥出自己最好的水平,做事的效率也是事半功倍。还有就是要有扎实的理论知识,如果所学知识不过扎实,在实习过程中会漏洞百出,大大减慢自己的实习进度,也会让自己感到很气恼。这次实习,培养我们的实践能力和创新精神。加强了我的动手能力和对问题的分析能力,以及发现并解决问题的能力。
假设建立七个路由器,其中三个A,B和C。路由器A的两个网络接口E0和S0
分别连接在10.1.0.0和10.2.0.0网段上;路由器B的两个网络接口S0和S1
分别连接在10.2.0.0和10.3.0.0网段上;路由器C的两个网络接口S0和E0
分别连接在10.3.0.0和10.4.0.0网段上;
如上图中各路由表的前两行所示,通过路由表的网络接口到与之直接相连的网
四.程序编写
#include <stdio.h>
#include <stdlib.h>
#define ROUTNUM 7/*定义七个路由器*/
typedef struct/*定义结构*/
{
int dis;
int from;
}RoutNode;
RoutNode data[ROUTNUM][ROUTNUM]; /*路由表*/
printf("- ");
else
printf("%c ", data[i][j].from+65);
}
printf("\n");
}
}
void Communication(int recv, int send)
{int i;
for (i=0; i<ROUTNUM; i++)
{
if (data[send][i].dis > 0) /*如果send节点到i号节点有路线*/
Fra Baidu bibliotekreturn;
}
else
InitData(pfile);
fclose(pfile);
printf("\nInitial State:\n");
OutputRoutData();
for (i=0; i<ROUTNUM; i++)
{
Exchange();/*小于远距离,路由更新*/
}
printf("\nState Exchanged:\n");
void main()
{
int start,end;
int i;
FILE *pfile;
pfile = fopen("data.txt", "r");/*打开数据文件data*/
if (pfile == NULL)/*文件data为空,显示错误*/
{
printf("data file failed to open, press any key to quit.\n");
printf("%c->",data[cur][end].from+65);
cur = data[cur][end].from;
}
total += data[cur][end].dis;
printf("%c\ntotal distance=%d", end+65, total);
return;
}
}
void InitData(FILE* pfile)
if (data[start][end].dis < 0)
{
printf("No routine find!\n");
return;
}
printf("%c->", cur+65);
while (data[cur][end].from >= 0)
{
total += data[cur][data[cur][end].from].dis;
通过实习使自己对课本上的知识有了更进一步的了解同时应用于实际,使得理论与实际相结合,加深了自己对课本知识的理解。实习还锻炼了我个人的自主学习能力,例如,充分利用图书馆的海量信息,查阅相关资料,学到了许多课本以外的相关知识。能用BOSON网络路由仿真软件,能达到学以致用。对我们来说,理论与实际同样重要,这是我们以后在工作中说明自己能力的一个重要标准。了解了路由器的相关知识,路由表的的基本知识,路由表建立及更新,通过网络连接,掌握了简单路由元器件配置,对故障的诊断和排除以及对其原理工作有了一般掌握。
void InitData(FILE* pfile); /*从数据文件读取数据,初始化路由表*/
void OutputRoutData(); /*输出所有的路由表*/
void Communication(int recv, int send); /*send点向recv点发送自己的路由表*/
void Exchange(); /*所有节点进行一次数据交换,更新路由表*/
{if (data[i][j].dis > 0) /*如果两个节点之间有路径*/
{Communication(j,i); /*将i号节点的路由表发送给j号节点*/
}
}
}
}
五.运行结果
六.实习心得和体会
通过本次实习对BOSON模拟软件有了一定的认识,基本了解其中的模拟元件及应用,能够用其进行电路设计模拟。用BOSON模拟软件模拟电路设计如同在实验室面板上搭接电路,且不受元器件种类、数量和测试仪器的限制,从而为网络系统的设计、产品的开发提供了一种全新的手段和便捷的途径,同时BODON模拟软件以其高品质的性能、强大的分析能力和在线屏幕显示能让设计者轻松、有效地完成设计任务。应用BOSON软件还可以简化并提高教学的难度,让我们可以很轻松的学会。
if (c==',') /*读完一个数字*/
{
num[i] = '\0';
data[m][n].dis = atoi(num);
data[m][n].from = -1;
i = 0;
break;
}
else if ((c>='0' && c<='9') || c=='-') /*如果读到数字或符号*/
同样道理,路由器B还会产生一条(10.1.0.0,S0,1)路由,这条路由是通过网络端口S0从路由器A获得的。如此反复,直到最终收敛,形成图中所示的路由表。
概括地说,距离向量算法要求每一个路由器把它的整个路由表发送给与它直接连接的其它路由器。路由表中的每一条记录都包括目标逻辑地址、相应的网络接口和该条路由的向量距离。当一个路由器从它的相邻处收到更新信息时,它会将更新信息与本身的路由表相比较。如果该路由器比较出一条新路由或是找到一条比当前路由更好的路由时,它会对路由表进行更新:将从该路由器到邻居之间的向量距离与更新信息中的向量距离相加作为新路由的向量距离。
{
num[i++] = c;
}
}
}
}
}
void OutputRoutData()
{
int i,j;
printf(" ");
for(i=0; i<ROUTNUM; i++)/*读取路由距离*/
{
printf("< %d >", i);
}
printf("\n");
for (i=0; i<ROUTNUM; i++)
参考书籍:
《计算机网络》谢希仁著电子工业出版社
实 习成绩评定表
学生姓名
专业班级
通信07级2班
论文题目
距离向量算法更新路由表
{
char num[10];
int i=0;
char c;
int m,n;
fseek(pfile, 0, 0);
for (m=0; !feof(pfile)&&m<7; m++)
{
for (n=0; !feof(pfile)&&n<7; n++)
{
while (!feof(pfile))
{
c = fgetc(pfile);
{
data[recv][i].dis = data[send][i].dis + data[recv][send].dis;
data[recv][i].from = send;
}}}}
void Exchange()
{
int i,j;
for (i=0; i<ROUTNUM; i++)
{ for (j=0; j<ROUTNUM; j++)
计算机网络实习报告
论 文 题 目距离向量算法更新路由表
学生专业班级通信工程07级2班
学生姓名(学号)
指 导 教 师
完 成 时 间2010年5月24日
实 习(设计)地点信息楼139机房
2010年5月24日
距离向量算法更新路由表
一.实验目的
1.认识路由器及路由建立与更新的原理
2.理解、掌握和利用距离向量算法解决遇到的问题
3. 能够用距离向量算法建立一个路由表并进行更新
4.所实现的路由器模拟Internet上的IP路由器,它能确定网络的最短路由,并在其上传输分组
二.原理概述
距离向量路由算法(Bellman-Ford Routing Algorithm),也叫做最大流量演算法(Ford-Fulkerson Algorithm),其被距离向量协议作为一个算法,如RIP, BGP, ISO IDRP, NOVELL IPX。使用这个算法的路由器必须掌握这个距离表(它是一个一维排列-“一个向量”),它告诉在网络中每个节点的最远和最近距离。在距离表中的这个信息是根据临近接点信息的改变而时时更新的。表中数据的量和在网络中的所有的接点(除了它自己本身)是等同的。这个表中的列代表直接和它相连的邻居,行代表在网络中的所有目的地。每个数据包括传送数据包到每个在网上的目的地的路径和距离/或时间在那个路径上来传输。这个在那个算法中的度量公式是跳跃的次数、等待时间、流出数据包的数量等等。
络的网络连接,其向量距离设置为0。这即是最初的路由表。
当路由器B和A以及B和C之间相互交换路由信息后,它们会更新各自的路由表。
例如,路由器B通过网络端口S1收到路由器C的路由信息(10.3.0.0,S0,0)和(10.4.0.0,E0,0)后,在自己的路由表中增加一条(10.4.0.0,S1,1)路由信息。该信息表示:通过路由器B的网络接口S1可以访问到10.4.0.0网段,其向量距离为1,该向量距离是在路由器C的基础上加1获得的。
OutputRoutData();
printf("input the start node(%d-%d) : ", 0, ROUTNUM-1);
scanf("%d", &start);
printf("input the end node(%d-%d) : ", 0, ROUTNUM-1);
scanf("%d", &end);
在距离向量路由算法中,相邻路由器之间周期性地相互交换各自的路由表备份。当网络拓扑结构发生变化时,路由器之间也将及时地相互通知有关变更信息。
它是一种动态路由选择算法。每个路由器都定期与其相邻的所有路由器交换路由表,据此更新它们自己的路由表。
所有路由器都监听从其邻居传来的路由表,并在下列情况下更新其路由表:
1.发现了一条到达某目的的新路由,而该路由在原来的路由表中不存在,即发现了一条新路由,则在路由表中增加该路由。
2.发现了一条到达某目的的、距离更短的新路由,则用该路由替换原有的路由。
3.到达某目的的一条路由,其后继结点到达该目的地的距离发生了变化,则需要更新该路由的距离。
三.设计方案
路由表的建立和更新
{
if (data[recv][i].dis < 0) /*如果recv到i号节点无路径*/
{
data[recv][i].dis = data[send][i].dis + data[recv][send].dis;
data[recv][i].from = send;
}
else if (data[recv][i].dis > data[send][i].dis + data[recv][send].dis) /*如果现有路径比新路径远*/