璁$綉瀹為獙鎶ュ憡 - 鐧惧害鏂囧簱 联系客服

发布时间 : 星期二 文章璁$綉瀹為獙鎶ュ憡 - 鐧惧害鏂囧簱更新完毕开始阅读712e5fa7f524ccbff1218432

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 \ #include \ #include \ #define ROUTNUM 7

typedef struct {

RoutNode data[ROUTNUM][ROUTNUM];

void InitData(FILE* pfile); void OutputRoutData(); void Exchange();

void main() {

int start, end, i, j; FILE *pfile;

pfile = fopen(\, \); if (pfile == NULL) {

printf(\文件打开错误,按任意键退出.\\n\); getch();

/*路由表*/

/*从数据文件读取数据,初始化路由表*/ /*输出所有的路由表*/

int dis; int from;

}RoutNode;

void Communication(int recv, int send);/*send点向recv点发送自己的路由表*/

/*所有节点进行一次数据交换, 更新路由表*/

}

return;

else

InitData(pfile); fclose(pfile);

printf(\路由表初始:\\n\); for (i = 0; i

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

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

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

printf(\输入终点路由节点(%d-%d) : \, 0, ROUTNUM - 1); scanf(\, &end);

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

int cur = start; int total = 0;

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

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

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

printf(\, i + 65); for (j = 0; j < ROUTNUM; j++)

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

printf(\, j + 65, data[i][j].dis);

printf(\);

} /*end of if*/

printf(\, cur + 65);