计网实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

CENTRAL SOUTH UNIVERSITY

计算机网络实验报告

题目计算机网络实验

学生姓名梁云华

班级学号0909082311

行政班级计算机0806

指导教师刘丽敏

设计时间2010年12月

实验一:距离向量路由算法的实现

1.1实验目的

本实验是计算机网络课程的实践性锻炼环节。通过实验,模拟距离向量路由算法的路由表交换过程,演示每轮交换后路由表的变化。帮助学生更好地掌握网络通信协议的实现技术,锻炼学生应用高级编程语言完成通信编程的能力,使学生加深对网络协议本质的理解,巩固课堂所学的理论知识。

1.2实验内容

模拟距离向量路由算法的路由表交换过程,演示每轮交换后路由表的变化。

1.3实验原理

距离向量路由算法(Bellman-Ford Routing Algorithm),也叫做最大流量演算法(Ford-Fulkerson Algorithm),

其被距离向量协议作为一个算法,如RIP, BGP, ISO IDRP, NOVELL IPX。使用这个算法的路由器必须掌握这个距离表(它是一个一维排列-“一个向量”),它告诉在网络中每个节点的最远和最近距离。在距离表中的这个信息是根据临近接点信息的改变而时时更新的。表中数据的量和在网络中的所有的接点(除了它自己本身)是等同的。这个表中的列代表直接和它相连的邻居,行代表在网络中的所有目的地。每个数据包括传送数据包到每个在网上的目的地的路径和距离/或时间在那个路径上来传输(我们叫这个为“成本”)。这个在那个算法中的度量公式是跳跃的次数,等待时间,流出数据包的数量,等等。

在距离向量路由算法中,相邻路由器之间周期性地相互交换各自的路由表备份。当网络拓扑结构发生变化时,路由器之间也将及时地相互通知有关变更信息。

距离向量路由算法,使用这个算法的路由器必须掌握这个距离表(它是一个一维排列,即一个向量),它告诉在网络中每个节点的最远和最近距离。在距离表中的这个信息是根据临近接点信息的改变而时时更新的。表中数据的量和在网络中的所有的接点(除了它自己本身)是等同的。这个表中的列代表直接和它相连的邻居,行代表在网络中的所有目的地。每个数据包括传送数据包到每个在网上的目的地的路径和距离/时间在那个路径上来传输(我们叫这个为“成本”)。这个在那个算法中的度量公式是跳跃的次数,等待时间,流出数据包的数量等等。

在距离向量路由算法中,相邻路由器之间周期性地相互交换各自的路由表备份。当网络拓扑结构发生变化时,路由器之间也将及时地相互通知有关变更信息。

1.4实验步骤

1.4.1设计思路

程序先定义了一个路由表——RoutNode data[ROUTNUM][ROUTNUM],路由表

的初始信息存储在文件中,程序运行是先调用函数InitData(FILE* pfile)从文件中

读取路由表的初始信息,然后输出初始路由表的信息,Communication(int recv, int

send)函数主要是向邻近节点发送自己的路由表信息,Exchange()函数则根据新路由表信息更新自己的路由表。当所有的路由表节点都更新一遍后,整个路由表更新完毕。

1.4.2编写程序

程序的源代码如下:

#include "stdio.h"

#include "stdlib.h"

#include "alloc.h"

#define ROUTNUM 7

typedef struct

{

int dis;

int from;

}RoutNode;

RoutNode data[ROUTNUM][ROUTNUM]; /*路由表*/

void InitData(FILE* pfile); /*从数据文件读取数据,初始化路由表*/ void OutputRoutData(); /*输出所有的路由表*/

void Communication(int recv, int send);/*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;

}

else

InitData(pfile);

fclose(pfile);

printf("\n路由表初始:\n");

for (i = 0; i

{

printf("%c||", i + 65);

for (j = 0; j < ROUTNUM; j++)

if (data[i][j].dis > 0)

printf("<%c %d> ", j + 65, data[i][j].dis);

printf("\n");

}

for (i = 0; i < ROUTNUM; i++)

{

Exchange();

}

printf("\n路由表交换:\n");

OutputRoutData();

printf("输入起始路由节点(%d-%d) : ", 0, ROUTNUM - 1);

scanf("%d", &start);

printf("输入终点路由节点(%d-%d) : ", 0, ROUTNUM - 1);

scanf("%d", &end);

if (start == end || start < 0 || start > 6 || end < 0 || end > 6) {

printf("\n输入错误,请按任意键退出\n");

getch();

return;

}

else

{

int cur = start;

int total = 0;

if (data[start][end].dis < 0)

{

printf("没有路由路径发现!\n");

getch();

return;

} /*end of if*/

printf("%c->", cur + 65);

相关文档
最新文档