网络课程设计-路由模拟课程设计说明.doc

上传人:人*** 文档编号:560248896 上传时间:2023-10-02 格式:DOC 页数:7 大小:78.51KB
返回 下载 相关 举报
网络课程设计-路由模拟课程设计说明.doc_第1页
第1页 / 共7页
网络课程设计-路由模拟课程设计说明.doc_第2页
第2页 / 共7页
网络课程设计-路由模拟课程设计说明.doc_第3页
第3页 / 共7页
网络课程设计-路由模拟课程设计说明.doc_第4页
第4页 / 共7页
网络课程设计-路由模拟课程设计说明.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《网络课程设计-路由模拟课程设计说明.doc》由会员分享,可在线阅读,更多相关《网络课程设计-路由模拟课程设计说明.doc(7页珍藏版)》请在金锄头文库上搜索。

1、计算机网络技术课程设计路由模拟程序一、概述1课程设计目的和要求本课程设计通过模拟一个简化的路由器工作过程,从而使学生能够了解路由器的工作过程及其基本实现方法。要求:1 每组由同班2-4名同学组成,可以分组完成分组转发和路由更新两部分的内容,每人负责完成其中的一个部分或其中的若干项功能函数;2 每人都要提交课程设计报告,内容包括:l 本人所属部分的主要内容和整体设计方案及主程序流程;l 本人所完成功能函数的核心代码分析、子程序流程和主要代码;l 程序测试结果,包括测试采用的路由表的内容,测试输入的目的IP地址和输出的下一跳地址。3 进行程序演示和验收2课程设计主要内容编写程序,模拟实现路由器的分

2、组转发过程和RIP路由更新过程。(1) 分组转发程序以命令行方式运行:iprouting,其中iprouting为程序名。程序初始化过程中通过读取路由文件route.txt中的内容来建立路由表,然后提示用户输入目的IP地址。程序根据用户输入的目的IP地址判断下一跳地址并在屏幕上输出,然后重新等待输入目的IP地址,直到用户输入退出命令“quit”。(2) RIP路由更新程序以命令行方式运行:rip,其中rip为程序名。程序初始化过程中通过读取路由文件route.txt中的内容来建立初始路由表,然后提示用户输入RIP报文的内容(目的网络,子网掩码,距离)。程序根据用户的输入更新原路由表,然后重新等

3、待输入新的RIP报文,直到用户输入退出命令“quit”,程序保存新的路由表后退出。二、分析和设计1基本原理和相关知识(1)分组转发的过程分组转发是指路由器根据路由表中记录的最佳路由来转发分组。在路由表中,每一条路由主要由以下几项内容组成:(目的网络地址,子网掩码,下一跳地址,距离)目的网络地址和子网掩码是指目的IP地址所在的网络地址和子网掩码,下一跳地址是指分组应该转发给的下一跳路由器的地址,距离是对到达目的网络的长度的度量(RIP协议中以经过的路由器的跳数进行度量)。当路由器准备转发一个分组时,它首先要从收到的IP分组当中提取目的IP地址,然后通过子网掩码计算出该分组要去的目的网络,具体的分

4、组转发过程如下: 判断是否为直接交付。对路由器直接相连的网络逐个进行检查:用各网络的子网掩码和目的IP地址相“与”,看结果是否与路由表中相应的目的网络匹配。若匹配,则将分组直接交付;若不匹配,则需要间接交付,执行(2)。 若路由表中有该目的IP地址的特定主机路由,则将分组传送给路由表中所指明的下一跳路由器;否则执行(3)。 对路由表中的每一行,将其中的子网掩码和目的IP地址做“与”运算,若结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则执行(4)。 若路由表中有默认路由,则将分组传送给默认路由器;否则执行(5)。 报告转发分组出错。步骤(5)中的默认路由是路由表中一条特

5、殊的记录。默认路由比其它路由项的优先级低,只有在找不到明确的项目相对应时,才使用默认路由。(2)RIP路由更新过程RIP路由器采用距离向量算法从到达目的网络的所有路径中找出最短距离的路径,更新路由表。算法过程如下:路由器M收到来自相邻路由器N的RIP报文,对其中的每一项,若目的网络为X,则: 路由器M将报文中路由项的距离加1,同时下一跳地址记为N,此时就得到了一条从M出发,经过N到达网络X的新路由项。 路由器M将此新路由项与路由表中的每一项进行比较:若新路由的目的网络X不在路由表中,则将该路由项加入路由表。否则,若新路由的下一跳与原有路由的下一跳相同,则用新路由替换原有路由,否则,若新路由项的

6、距离小于原有路由项,则进行更新,否则什么也不做。 返回。2分组转发部分程序分析和设计分组模拟转发的过程主要分为四个步骤,包括:路由表文件的输入、目的IP地址的输入、路由表的查找和下一跳地址的输出。其中主要过程是查找路由表,而程序设计的难点则是路由表数据结构的设计和点分十进制IP地址的转换。(1)程序流程图打开路由表文件文件结束?读取一行,验证IP输入格式并转换为32位二进制数读取目的IP,验证输入格式并转换为32位二进制数添加到路由表查找路由表找到?提示用户选择操作退出?输出下一跳提示目的不可达关闭文件并结束开始提示用户输入目的IP地址YYNYNN图1 分组转发程序流程图(2) 核心代码分析l

7、 定义路由项的数据结构typedef struct routeunsigned long DestNetIP;/目的网络地址unsigned long Mask;/子网掩码unsigned long NextHopIP;/下一跳地址int Hops;/距离ROUTE;这样,就可以再定义一个ROUTETABLE结构类型来保存路由表的内容:typedef struct routetableROUTE route MAX_NUM_ROUTE; int count;/路由项的个数ROUTETABLE;ROUTETABLE route_table; /定义一个ROUTETABLE全局变量,保存路由表信息

8、在这个结构中使用了一个ROUTE数组来保存每一个路由项。当然,这是比较简单的方式,我们还可以使用动态分配内存的方式,通过创建链表来保存路由表的内容。l 路由表文件的输入路由表文件route.txt中,每行记录一条路由,路由项的各个字段间以空格分隔,每次可以从文件中读入一行。如使用fgets()函数每次可以从文件读入一行:fgets(src, 50, fp); /从文件指针fp所指向的文件中读入一行(最多不超过50个字符)到字符数组src中。sscanf(src,%s%s%s%d,strDest,strMask,strNext,&hops); /然后从字符数组src中分别读取目的地址、子网掩码、

9、下一跳地址到三个字符数组strDest,strMask,strNext中,读取距离值到整型变量hops中。由于输入数据(strDest,strMask,strNext)是以字符串形式存储的,因此需要将字符串形式的IP地址转换为32位二进制数后再保存到路由表route_table中。l 定义点分十进制IP地址字符串转换函数:unsigned long str_to_ip(const char* src)为了将点分十进制形式的IP地址转换为一个32位二进制数,可以在函数中定义一个联合类型的变量ip_addr用于IP地址不同形式间的转换: union unsigned long val; / 32位

10、IP值 char ch4; / 4个点分十进制值 ip_addr = 0; /定义变量ip_addr,初始值为0要对一个点分十进制表示的IP地址字符串进行转换,可以先使用sscanf函数从该字符串中以整数形式分别读出4个点分的十进制数,如:cnt = sscanf(strDest, %d.%d.%d.%d, addr1, addr2, addr3, addr4); /从strDest中分别读出4个十进制整数(略过了中间的分隔符“.”)并保存在四个char型变量中。如果成功,函数的返回值cnt应该是4,表示读出了四个整数。将这四个整数分别赋值给联合类型变量ip_addr的元素ch ,然后返回元素

11、val的值即可。因为联合类型中32位无符号整型元素val和4个字符型元素ch 占用相同的内存空间,所以,如果将四个点分的十进制数存储在字符型元素中,则整型元素值也就是这四个字节的32位值,如图Ch0Ch1Ch2Ch3Val当然,在对IP地址字符串进行转换前应首先验证用户的输入是否正确,因此还应编写一个IP地址字符串的检验函数,要求用户输入必须为点分的四个十进制数(不能有其它非数字字符),且每个十进制数的取值应在0-255的范围内:int check_ip(char *str)l 路由表的管理从路由表读入路由项并对IP地址字符串进行相应的转换后,就可以将路由项添加到路由表中。此后,因为还需要对路

12、由表进行查找,所以应该设计对路由表进行操作的函数。向路由表中添加一个路由项,成功则返回路由项的索引号,否则返回-1:int add_route(unsigned long DestNetIP, unsigned long Mask, unsigned long NextHopIP, int Hops)从路由表中查找特定目的IP地址的路由项,返回路由项的索引号:int find_IP_route(unsigned long DestIP)3RIP路由更新部分程序分析和设计RIP路由更新的过程主要分为四个步骤,包括:路由表文件的输入、RIP报文的输入、路由表的更新和路由表的输出。其中主要过程是路由

13、表的更新。(1)程序流程图打开路由表文件文件结束?读取一行,验证IP输入格式并转换为32位二进制数验证输入格式并转换为32位二进制数添加到路由表查找路由表中找到?提示用户选择操作退出?添加到路由表保存路由表并关闭文件开始提示用户输入目的网络、子网掩码和距离显示路由表?输出路由表下一跳相同?距离更短?更新更新YYYYYYNNNNNN结束图2 RIP路由更新程序流程图(2) 核心代码分析本部分程序用到的主要数据结构和核心代码与分组转发部分是一致的,只是需要设计路由表管理当中的更多功能函数,完成更新、删除等操作。此外还要能够将路由表保存到route.txt文件中。从路由表中查找特定目的网络地址的路由

14、项,找到则返回路由项的索引号,否则返回-1:int find_Net_route(unsigned long DestNetIP)更新路由表中索引号为index的路由项,成功则返回1,否则返回-1:int update_route(int index, unsigned long DestNetIP, unsigned long Mask, unsigned long NextHopIP, int Hops)从路由表中删除索引号为index的路由项,成功则返回1,否则返回-1:int del_route(int index)保存路由表:int save_route(FILE *fp)三、分工和

15、评分建议按照以下内容进行小组分工:l 主程序;l 路由表文件的输入子程序;l IP地址字符串输入格式的验证子程序;l IP地址字符串到32位二进制的转换子程序;l 路由表的管理子程序(查找路由表,添加、更新路由项);l 显示和保存路由表的子程序。评分将综合考虑程序演示情况和课程设计报告的质量:l 优秀:独立完成,实现全部功能,具有完善的差错处理,小组分工合理、明确,个人报告内容完整、阐述清楚、测试数据充分;l 良好:独立完成,实现大部分主要功能,具有基本的差错处理,小组分工合理、明确,个人报告内容、测试数据完整;l 合格:在别人的辅助下完成,能够实现基本功能,小组有一定的分工,个人报告内容基本完整,有测试数据;l 不合格:不能实

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号