文档介绍:路由算法距离矢量路由算法的具体实现距离矢量路由算法的原理距离向量路由算法(Bellman-FordRoutingAlgorithm),作为距离向量协议的一个算法,如RIP,(RIP跳最大跳数16)BGP。使用这个算法的路由器必须掌握这个距离表,它告诉在网络中每个节点的最远和最近距离。在距离表中的这个信息是根据临近接点信息的改变而时时更新的。这个在算法中的度量公式是跳跃的次数,等待时间,流出数据包的数量等等。概括地说,距离向量算法要求每一个路由器把它的整个路由表发送给与它直接连接的其它路由器。路由表中的每一条记录都包括目标逻辑地址、相应的网络接口和该条路由的向量距离。当一个路由器从它的相邻处收到更新信息时,它会将更新信息与本身的路由表相比较。如果该路由器比较出一条新路由或是找到一条比当前路由更好的路由时,它会对路由表进行更新:将从该路由器到邻居之间的向量距离与更新信息中的向量距离相加作为新路由的向量距离。在距离向量路由算法中,相邻路由器之间周期性地相互交换各自的路由表备份。当网络拓扑结构发生变化时,路由器之间也将及时地相互通知有关变更信息。距离矢量路由算法在理论中可以工作,但在实践中有一个严重的缺陷:虽然它总是能够达到正确的答案,但是它收敛到正确答案的速度非常慢,尤其是,它对于好消息的反应非常快,但是对于坏消息的反应非常迟缓。程序源代码(c语言)#include""#include""  //atoi的头文件//#include""#defineROUTNUM7   //定义路由的个数为7个typedefstruct{intdis;         //存延迟大小intfrom;         //存下一跳的路由}RoutNode;RoutNodedata[ROUTNUM][ROUTNUM];    /*路由表,能存7行7列数据,数据为权值*/voidInitData(FILE*pfile);        /*从数据文件读取数据,初始化路由表*/voidOutputRoutData();          /*输出所有的路由表*/munication(intrecv,intsend);/*send点向recv点发送自己的路由表*/voidExchange();            /*所有节点进行一次数据交换,更新路由表*/voidmain(){intstart,end,i,j;FILE*pfile;pfile=fopen("","r");if(pfile==NULL){printf("文件打开错误,按任意键退出.\n");getch();return;}elseprintf("\n路由表初始:\n");InitData(pfile);fclose(pfile);for(i=0;i<ROUTNUM;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++)   //循环7次(好像多余,改成一次得到同样结果){Exchange();}                 printf("\n路由表交换:\n");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>6){printf("\n输入错误,请按任意键退出\n");getch();return;}else{intcur=start;inttotal=0;if(data[start][end].dis<0){printf("没有路由路径发现!\n");getch();return;}printf("%c->",cur+65);while(data[cur][end].from>=0)  //起始点与终点不相连。0是A{total+=data[cur][data[cur][end].from].dis;  //total变成cur与下一跳的延迟printf("%c->",data[cur][end].from+65);cur=data[cur][end].from;          //