路由与交换技术.docx
《路由与交换技术.docx》由会员分享,可在线阅读,更多相关《路由与交换技术.docx(10页珍藏版)》请在冰豆网上搜索。
路由与交换技术
路由与交换技术
实验报告
课程名称路由与交换实验名称将PC转化为路由器
分组名单
教师审批
2015年6月
一.实验名称
基于quagga及linux,将PC转换为路由器。
2.实验要求
利用两台交换机完成其之间的RIP及OSPF路由。
三.实验环境
Linux系统,quagga软件
二.实验目的
实现两台虚拟机之间的RIP及OSPF路由,掌握路由器相关知识,熟悉配置操作,提高动手能力,加深课程体会。
三.实验内容及步骤、结果
为了熟悉软件操作及使用,在完成这个实现几个要求的综合网络拓扑前,我对几个要求分别进行了实验。
小实验1:
配置zebra
小实验2:
配置ripd
小实验3:
配置ospfd
综合实验:
使用虚拟机进行RIP和OSPF路由
实验原理:
虚拟机间路由定义为使用路由器从一个虚拟机向另一个虚拟机转发网络流量的过程。
虚拟机与网络中唯一的IP地址相关联。
这种配置为实现多网段环境中的路由过程提供了依据。
通过路由器进行虚拟机间路由时,路由器接口可连接到不同的网段。
网络拓扑设计:
1、配置Zebra
1)启动zebra进程,设置hostname为Router,以及eth0的ip address为192.168.1.2/24,eth0:
0的ip address为192.168.4.1/24
2)用show running-config查看运行配置
3)用show interface description查看端口状态:
4)将运行配置保存到startup-config中
2、配置RIP
1)启动ripd,进入ripd进程,并修改名称,ripd的进程号是2602,于是我们可以使用命令telnet localhost 2602进入Router的ripd设置,登陆口令默认是zebra
2)启动rip协议,并指定哪个网络使用rip协议
3)查看运行配置,并将运行配置保存到startup-config中
4)showiprip查看Router的路由表:
5)通过debug查看路由器之间的通信状况
3、配置ospfd
1)启动ospfd,进入ospfd进程,并修改名称,ospfd的进程号是2604,于是我们可以使用命令telnet localhost 2604进入Router的ospfd设置,登陆口令默认是zebra
2)启动ospf协议,指定哪个网络使用ospf协议
3)查看运行配置,并将运行配置保存到startup-config中
4)showipospf查看Router中的OSPf协议信息
5)showipospf查看Router中的ospf1中的路由信息信息
6)通过debug查看路由器之间的通信状况
四.RIP路由协议源代码分析
(一)代码的结构关系、重要子函数之间的调用关系及关键函数的调用
1、帮助信息显示:
usage(char*progname,intstatus)
2、SIGHUP处理器:
sighup(void)
3、刷新配置文件:
vty_read_config(config_file,config_default)
4、创建VTY的包:
vty_serv_sock
5、SIGINT处理程序:
sigint(void)
6、ripd的主程序:
main(intargc,char**argv)
1)初始化记录:
zlog_default=openzlog(progname,ZLOG_RIP,
LOG_CONS|LOG_NDELAY|LOG_PID,LOG_DAEMON)
2)命令行选项解析
3)准备主线程:
master=thread_master_create()
4)库初始化
5)RIP相关初始化
6)排序所有已安装的命令:
sort_node()
7)获取配置文件:
vty_read_config(config_file,config_default)
8)开始执行只如果不是在干运行模式if(dryrun)return(0);
9)更改为守护程序
10)PID文件创建:
pid_output(pid_file)
11)创建VTY的包:
vty_serv_sock(vty_addr,vty_port,RIP_VTYSH_PATH);
12)打印横幅:
zlog_notice
13)执行每个线程:
while(thread_fetch(master,&thread))
14)Notreached
(二)重要报文格式
其中:
·Metric:
到下一路由器的权值。
·AddressFamilyIdentifier:
指示路由项中的地址种类,这里应为2。
·IpAddress:
地址域,包括网络类和IP地址在内,RIP报文中对每一网络共有14个字节的地址空间。
·RIPVersion2报文的特有的一些属性:
·RouteTag:
外部路由标记,是表示路由是保留还是重播的属性。
它提供一种从外部路由中分离内部路由的方法,用于传播从外部路由器协议(EGP)获得的路由信息。
·Subnetmask:
子网掩码,应用于IP地址产生非主机部分地址,为0时表示不包括子网掩码部分,使得RIP能够适应更多的环境。
·NextHop:
下一驿站,可以对使用多路由协议的网络环境下的路由进行优化。
·认证,确认合法的信息包,目前支持纯文本的口令形式。
(三)核心变量及参数设置
1、ripd的选择:
staticstructoptionlongopts[]=
{
{"daemon",no_argument,NULL,'d'},
{"config_file",required_argument,NULL,'f'},
{"pid_file",required_argument,NULL,'i'},
{"help",no_argument,NULL,'h'},
{"dryrun",no_argument,NULL,'C'},
{"vty_addr",required_argument,NULL,'A'},
{"vty_port",required_argument,NULL,'P'},
{"retain",no_argument,NULL,'r'},
{"user",required_argument,NULL,'u'},
{"group",required_argument,NULL,'g'},
{"version",no_argument,NULL,'v'},
{0}
};
2、ripd的特权:
structzebra_privs_tripd_privs
3、配置文件和目录:
config_default[]=SYSCONFDIRRIPD_DEFAULT_CONFIG;,*config_file=NULL
4、路由保留模式标志:
retain_mode=0
5、RIPVTY绑定地址:
*vty_addr=NULL
6、RIPVTY连接端口:
vty_port=RIP_VTY_PORT
7、线程:
thread_master
8、进程ID保存由initSYSTE使用:
*pid_file=PATH_RIPD_PID;
(三)主要流程
当路由器A刚启动RIP时,以广播的形式向相邻路由器B发送请求报文,路由器B的RIP收到请求报文后,响应请求,回发包含本地路由表信息的响应报文。
路由器A的RIP收到响应报文后,修改本地路由表的信息,同时以触发修改的形式向相邻路由器B广播本地路由修改信息。
路由器B收到触发修改报文后,又向其各自的相邻路由器发送触发修改报文。
在一连串的触发修改广播后,各路由器都得到修改并保持最新消息。
同时,RIP每30秒向相邻路由器广播本地路由表,各相邻路由器在RIP收到路由报文后,对本地路由进行的维护,在众多路由中选择一条最佳路由,并向各自的相邻网广播路由修改信息,使路由达到全局有效。
(四)路由表计算
1、增加路由表规则:
rip_route_match_add(structvty*vty,structroute_map_index*index,constchar*command,constchar*arg)
2、删除路由表规则:
rip_route_match_delete(structvty*vty,structroute_map_index*index,constchar*command,constchar*arg)
3、更新路由表:
rip_route_map_update(constchar*notused)
4、匹配:
route_match_metric(void*rule,structprefix*prefix,
route_map_object_ttype,void*object)
5、匹配接口:
route_match_interface(void*rule,structprefix*prefix,route_map_object_ttype,void*object)
6、匹配IP下一跳:
route_match_ip_next_hop(void*rule,structprefix*prefix,
route_map_object_ttype,void*object)
7、匹配IP地址:
route_match_ip_address(void*rule,structprefix*prefix,
route_map_object_ttype,void*object)
8、匹配标识:
route_match_tag(void*rule,structprefix*prefix,
route_map_object_ttype,void*object)
五.心得体会
经过这次实验,学习了用quagga路由的整体流程。
我觉得这次实验,让我对原有的知识从了解表面到深入本质,从个体学习到整体把握的跳跃,对新知识的汲取,更是让我们把课本的知识应用到实际中,让我们了解了我们的学习有什么用,能够解决什么样的问题,增加我们的自信和学习的动力。
而且在这次实验中,我不仅将自己的代码不断完善,而且还在同学的帮助下学习了实验报告的标准格式和语言规范。
虽然我已经写过很多实验报告,但是能做到每一个字、每一幅图都如此的斟酌,这次是唯一,从中我也领会了一个道理:
细致、踏实、严谨是成功的必备素质。
总之,通过这次的实验,我受益匪浅。