已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机网络技术课程设计路由模拟程序一、概述1课程设计目的和要求本课程设计通过模拟一个简化的路由器工作过程,从而使学生能够了解路由器的工作过程及其基本实现方法。要求:1 每组由同班2-4名同学组成,可以分组完成分组转发和路由更新两部分的内容,每人负责完成其中的一个部分或其中的若干项功能函数;2 每人都要提交课程设计报告,内容包括:l 本人所属部分的主要内容和整体设计方案及主程序流程;l 本人所完成功能函数的核心代码分析、子程序流程和主要代码;l 程序测试结果,包括测试采用的路由表的内容,测试输入的目的IP地址和输出的下一跳地址。3 进行程序演示和验收2课程设计主要内容编写程序,模拟实现路由器的分组转发过程和RIP路由更新过程。(1) 分组转发程序以命令行方式运行:iprouting,其中iprouting为程序名。程序初始化过程中通过读取路由文件route.txt中的内容来建立路由表,然后提示用户输入目的IP地址。程序根据用户输入的目的IP地址判断下一跳地址并在屏幕上输出,然后重新等待输入目的IP地址,直到用户输入退出命令“quit”。(2) RIP路由更新程序以命令行方式运行:rip,其中rip为程序名。程序初始化过程中通过读取路由文件route.txt中的内容来建立初始路由表,然后提示用户输入RIP报文的内容(目的网络,子网掩码,距离)。程序根据用户的输入更新原路由表,然后重新等待输入新的RIP报文,直到用户输入退出命令“quit”,程序保存新的路由表后退出。二、分析和设计1基本原理和相关知识(1)分组转发的过程分组转发是指路由器根据路由表中记录的最佳路由来转发分组。在路由表中,每一条路由主要由以下几项内容组成:(目的网络地址,子网掩码,下一跳地址,距离)目的网络地址和子网掩码是指目的IP地址所在的网络地址和子网掩码,下一跳地址是指分组应该转发给的下一跳路由器的地址,距离是对到达目的网络的长度的度量(RIP协议中以经过的路由器的跳数进行度量)。当路由器准备转发一个分组时,它首先要从收到的IP分组当中提取目的IP地址,然后通过子网掩码计算出该分组要去的目的网络,具体的分组转发过程如下: 判断是否为直接交付。对路由器直接相连的网络逐个进行检查:用各网络的子网掩码和目的IP地址相“与”,看结果是否与路由表中相应的目的网络匹配。若匹配,则将分组直接交付;若不匹配,则需要间接交付,执行(2)。 若路由表中有该目的IP地址的特定主机路由,则将分组传送给路由表中所指明的下一跳路由器;否则执行(3)。 对路由表中的每一行,将其中的子网掩码和目的IP地址做“与”运算,若结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则执行(4)。 若路由表中有默认路由,则将分组传送给默认路由器;否则执行(5)。 报告转发分组出错。步骤(5)中的默认路由是路由表中一条特殊的记录。默认路由比其它路由项的优先级低,只有在找不到明确的项目相对应时,才使用默认路由。(2)RIP路由更新过程RIP路由器采用距离向量算法从到达目的网络的所有路径中找出最短距离的路径,更新路由表。算法过程如下:路由器M收到来自相邻路由器N的RIP报文,对其中的每一项,若目的网络为X,则: 路由器M将报文中路由项的距离加1,同时下一跳地址记为N,此时就得到了一条从M出发,经过N到达网络X的新路由项。 路由器M将此新路由项与路由表中的每一项进行比较:若新路由的目的网络X不在路由表中,则将该路由项加入路由表。否则,若新路由的下一跳与原有路由的下一跳相同,则用新路由替换原有路由,否则,若新路由项的距离小于原有路由项,则进行更新,否则什么也不做。 返回。2分组转发部分程序分析和设计分组模拟转发的过程主要分为四个步骤,包括:路由表文件的输入、目的IP地址的输入、路由表的查找和下一跳地址的输出。其中主要过程是查找路由表,而程序设计的难点则是路由表数据结构的设计和点分十进制IP地址的转换。(1)程序流程图打开路由表文件文件结束?读取一行,验证IP输入格式并转换为32位二进制数读取目的IP,验证输入格式并转换为32位二进制数添加到路由表查找路由表找到?提示用户选择操作退出?输出下一跳提示目的不可达关闭文件并结束开始提示用户输入目的IP地址YYNYNN图1 分组转发程序流程图(2) 核心代码分析l 定义路由项的数据结构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全局变量,保存路由表信息在这个结构中使用了一个ROUTE数组来保存每一个路由项。当然,这是比较简单的方式,我们还可以使用动态分配内存的方式,通过创建链表来保存路由表的内容。l 路由表文件的输入路由表文件route.txt中,每行记录一条路由,路由项的各个字段间以空格分隔,每次可以从文件中读入一行。如使用fgets()函数每次可以从文件读入一行:fgets(src, 50, fp); /从文件指针fp所指向的文件中读入一行(最多不超过50个字符)到字符数组src中。sscanf(src,%s%s%s%d,strDest,strMask,strNext,&hops); /然后从字符数组src中分别读取目的地址、子网掩码、下一跳地址到三个字符数组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位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 ,然后返回元素val的值即可。因为联合类型中32位无符号整型元素val和4个字符型元素ch 占用相同的内存空间,所以,如果将四个点分的十进制数存储在字符型元素中,则整型元素值也就是这四个字节的32位值,如图Ch0Ch1Ch2Ch3Val当然,在对IP地址字符串进行转换前应首先验证用户的输入是否正确,因此还应编写一个IP地址字符串的检验函数,要求用户输入必须为点分的四个十进制数(不能有其它非数字字符),且每个十进制数的取值应在0-255的范围内:int check_ip(char *str)l 路由表的管理从路由表读入路由项并对IP地址字符串进行相应的转换后,就可以将路由项添加到路由表中。此后,因为还需要对路由表进行查找,所以应该设计对路由表进行操作的函数。向路由表中添加一个路由项,成功则返回路由项的索引号,否则返回-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报文的输入、路由表的更新和路由表的输出。其中主要过程是路由表的更新。(1)程序流程图打开路由表文件文件结束?读取一行,验证IP输入格式并转换为32位二进制数验证输入格式并转换为32位二进制数添加到路由表查找路由表中找到?提示用户选择操作退出?添加到路由表保存路由表并关闭文件开始提示用户输入目的网络、子网掩码和距离显示路由表?输出路由表下一跳相同?距离更短?更新更新YYYYYYNNNNNN结束图2 RIP路由更新程序流程图(2) 核心代码分析本部分程序用到的主要数据结构和核心代码与分组转发部分是一致的,只是需要设计路由表管理当中的更多功能函数,完成更新、删除等操作。此外还要能够将路由表保存到route.txt文件中。从路由表中查找特定目的网络地址的路由项,找到则返回路由项的索引号,否则返回-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)三、分工和评分建议按照以下内容进行小组分工:l 主程序;l 路由表文件的输入子程序;l IP地址字符串输入格式的验证子程序;l IP地址字符串到32位二进制的转换子程序;l 路由表的管理子程序(查找路由表,添加、更新路由项);l 显示和保存路由表的子程序。评分将综合考虑
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 硫酸生产工高级面试官评价标准
- 农工党面试参政议政
- 农村电商平台活动策划及执行总结报告
- 平顶山学院2025通知书
- 广中路小学复课通知书
- 广州地铁调整情况通知书
- 广西大学校庆通知书
- 开封核酸严查通知书
- 开沙岛停工通知书
- 张南小区封控通知书
- (人教A版)必修一高一数学上册期中模拟卷01(解析版)
- 胸痛患者转运课件
- 基于PLC技术的电动汽车充电系统设计
- 2025-2026学年教科版(2024)小学科学三年级上册(全册)每课教学反思
- 办理诈骗案件汇报
- GB 21256-2025粗钢生产主要工序单位产品能源消耗限额
- 2025年《临床输血技术规范》
- 2025年仓储员笔试题库及答案
- DGJ08-121-2006 建设工程扬尘污染防治规范
- 企业风险控制管理办法
- 2025年教育政策法规考试真题试题及答案
评论
0/150
提交评论