1、网络实验资源库实验报告实验编号:NE 6实验名称:RIP 路由报文结构分析所属课程:网络工程知识类别:协议分析难度系数:1 级【容易】实验来源:锐捷公司关键词:RIP 路由协议 RIPv1 协议 RIPv2 协议所属 TCP/IP 层次:网络层实验目的:1. 掌握动态路由协议 RIP 的报文结构,工作原理及工作过程;2. 掌握 RIP 路由协议两个版本的区别。背景描述:3 台路由器运行RIP 路由协议,使用协议分析仪采集数据包,对采集到的数据进行分析。预备知识:RIP 协议的报文格式,RIP 协议的工作原理,RIP1 和RIP2 的区别,RIP 协议的缺陷。实验设备:3 台路由器,1 台交换机
2、,1 台协议分析仪。实验拓扑:、设备连接如下图:实验原理:RIP 协议简介RIP 路由协议有RIPv1 和RIPv2 两个版本,RIPv1 是有类路由协议,其不支持VLSM,不支持验证,路由更新采用的广播的方式;而RIPv2 是无类路由协议,支持VLSM,支持验证,路由更新采用组播的方式。RIPv2 首先在RFC1388“携带额外信息的RIP 版本2”中定义,发布于1993 年1 月。该RFC 在1732 中做了修订,最终在 1998 年11 月发布的RFC2453“RIP 版本2 ”中定稿。为确保 RIP 今后可以和TCP/IP 一起使用,有必要定义一种能和 IPv6 一起使用的版本,199
3、7 年 RFC2080 发布了标题为“用于IPv6 的 RIPng”文档。RIP 路由协议进行路由信息交换是通过发送两种不同类型RIP 报文实现的:RIP 请求和响应,这些报文作为常规TCP/IP 报文,使用UDP 传输,使用UDP 端口520。该端口按照如下方式使用:1.RIP 请求报文发送到UDP 目的端口520,这些报文可以使用520 作为源端口,也可以使用一个短暂端口号。2. 为回答RIP 请求面发送的响应报文使用源端口520,其目的端口等于RIP 请求报文使用的端口。3.未经请求的 RIP 响应报文发送时使用的源端口和目的端口均为 520。RIP 报文格式RIP 报文包含在 UDP
4、数据报中,如下图所示:图 1封装在UDP 数据报的RIP 报文下图所示为 RIP 的报文格式:图 2 RIP 消息格式1.命令:命令字段为1 表示请求,2 表示应答。还有两个舍弃不用的命令(3 和4),两个非正式的命令:轮询(5)和轮询表项(6)。请求表示要求其他系统发送其全部或部分路由表。应答则包含发送者全部或部分路由表。2. 版本:版本字段通常为1,而第2 版RIP 将此字段设置为2。3.地址族标识:紧跟在后面的20 字节指定地址系列(address family)(对于IP 地址来说,其值是2)、IP 地址以及相应的度量。采用这种 20 字节格式的RIP 报文可以通告多达25 条路由。上
5、限25 条是用来保证RIP 报文的总长度为 2025+4=504,小于512 字节。由于每个报文最多携带25 个路由,因此为了发送整个路由表,经常需要多个报文。RIP 报文类型RIP 使用两种报文类型:请求和响应1、请求报文:当路由器刚刚接入到网络上,或路由器有一些超时的项目,它就发送请求报文,请求报文可以询问整个路由表的信息或某个具体的路由信息,如下图所示:图 3 对于特定的路由表信息的请求图 4 对于所有的路由表信息的请求如下图是使用 RG-PATS 网络协议分析仪采集到的 RIP 请求报文:2、响应报文响应可以是询问的或非询问的,询问的响应仅在回答请求时才发送出来。它包含了在对应的请求中
6、指明的终点的信息,而非询问的响应则是定期发送,如每隔30s 或当路由表中有变化时,这种响应有时叫做更新分组,如下图所示:图 5 响应报文如下图是使用 RG-PATS 网络协议分析仪采集到的 RIP 响应报文:RIPv2 报文格式设计 RIPv2 版本是为了克服RIPv1 版本的某些缺点, RIPv2 的设计者没有增大每一个项目的报文长度,他们只是把RIPv1 中的对TCP/IP 协议填入0 的那些字段改为一些新的字段。对其基础上增加了一些扩展特性,以适用于现代网络的路由选择环境,这些扩展我包括:无类别路由协议:RIPv2 的每一个路由条目都携带子网掩码,因此RIPv2 支VLSM。多播方式路由
7、更新:RIPv1 使用广播方式把RIP 报文发送给每一个邻居,RIPv2 使用多播的方式向其他使用RIPv2 的路由器发出更新报文,使用的多播地址是224.0.0.9,采用多播方式的好处在于,本地网络上和RIP 路由选择无关的设备不需要花费时间解析路由器广播的更新报文。与 RIPv1 一样,RIPv2 操作使用的端口号为UDP520 ,并且数据报文最大不超过512字节。图 6 RIPv2 报文格式1.命令(Command )只取值1 或2,1 表示该消息是请求消息,2 表示该消息是响应消息。其他的取值都不被使用或保留用作私有用途。2.版本号(Version) 对于RIPv2 ,该字段的值设为
8、2,如果设置为0 或者虽设置为1 但消息是无效的RIPv1 格式,那么这个消息将被丢弃。 RIPv2 处理无效的RIPv1 消息。3. 地址族标识(Address Family Identifier,AFI)-对于IP 该项设置为2。只有一个例外的情况,该消息是路由器(或主机)整个路由选择表的请求。4. 路由标记(Route Tag)提供这个字段用来标记外部外部路由或重分配到RIPv2协议中的路由。默认的情况是使用这个16 位的字段来携带从外部路由选择协议注入到RIP 中的路由的自治系统号。虽然RIP 协议自己并不使用这个字段,但是再多个地点和某个RIP 域相连的外部路由,可能需要使用这个路由
9、标记字段通过RIP域来交换路由信息。这个字段也可以用来把外部路由编成“组”,以便在RIP 域中更容易的控制这些路由。5.IP 地址(IP Address)路由的目的地址。这一项可以是主网络地址,子网地址或者主机路由地址。6.子网掩码(Subnet Mask)是一个确认IP 地址的网络和子网部分的32 位的掩码。7. 下一跳(Next Hop)如果存在的话,它标识一个比通告路由器的地址更好的下一跳地址。换句话说,它指出的下一跳地址,其度量值比在同一个子网上的通告路由器更靠近目的地。如果这个字段设置位全0(0.0.0.0),说明通告路由器的地址是最好的下一跳地址。8. 度量(Metric) Met
10、ric 在RIP 里面指的就是跳数。该字段的取值范围是116之间。RIP 协议工作原理每一个路由器定期(每隔30s)向邻居路由器广播自己的路由表,邻居路由器就是指与其直接相连的所有路由器,如下图所示:路由器R1 邻居为路由器R2 和R4,路由器R2 的邻居为路由器R1 和R3,而路由器R1 和R3 不是邻居。RIP 让网络中所有的路由器与其邻居路由器不断交换距离信息,并不断更新路由表。图 7 运行 RIP 协议的网络拓扑实验步骤:步骤一:设定RIPv1 路由协议实验环境1、配置端口映射S3750#S3750#configure terminalS3750(config)#monitor ses
11、sion 1 destination interface FastEthernet 0/24S3750(config)#monitor session 1 source interface FastEthernet 0/1 10 both2、在路由器上配置RIPv1 路由协议RA#configure terminalRA(config)# interface FastEthernet 0/0RA(config-if)#ip address 192.168.1.1 255.255.255.0RA(config)# interface Loopback 0RA(config-if)#ip addr
12、ess 192.168.10.1 255.255.255.0RA#configure terminalRA(config)#router ripRA(config-router)#network 192.168.1.0RA(config-router)#network 192.168.10.0RB#configure terminalRB(config)# interface FastEthernet 0/0RB(config-if)#ip address 192.168.1.2 255.255.255.0RB(config)# interface Loopback 0RB(config-if
13、)#ip address 192.168.20.1 255.255.255.0RB#configure terminalRB(config)# interface FastEthernet 0/1RB(config-if)#ip address 192.168.2.1 255.255.255.0RB#configure terminal RB(config)#router ripRB(config-router)#network 192.168.1.0RB(config-router)#network 192.168.2.0RB(config-router)#network 192.168.2
14、0.0RC#configure terminalRC(config)# interface FastEthernet 0/0RC(config-if)#ip address 192.168.2.2 255.255.255.0RC(config)# interface Loopback 0RC(config-if)#ip address 192.168.30.1 255.255.255.0RC#configure terminalRC(config)#router ripRC(config-router)#network 192.168.2.0RC(config-router)#network
15、192.168.30.0交换机、3台路由器配置结果如下:步骤二:使用RG-PATS 网络协议分析仪采集RIPv1 数据包当拓扑中的所有路由器启动了RIP 路由进程,这时所有路由器都会以广播的方式通过其接口发送一个请求信息,请求其邻居所有的路由表信息,如下图所示,因为在此拓扑中,路由器RA 和路由器RB 是通过192.168.1.0 网段相连,路由器B 与路由器C 是通过192.168.2.0 网络相连,所以其向外发送请求时是通过 192.168.1.1 、192.168.1.2 、192.168.2.1 、192.168.2.2 接口发送出去的。其使用的 UDP 协议的520 端口与邻居进行交
16、换信息的;在RIPv1 数据包中其使用的命令为 1,说明其是一个请求报文;版本信息为1,这说明其运行的RIPv1;目标地址全为0,这是路由器请求邻居的所有路由表信息;其它字段全为0;当路由器收到请求信息后,路由器会将其路由表发送给其邻居,如下图所示:图 8 RG-PATS 网络协议分析仪采集RIPv1 报文步骤三:使用RG-PATS 协议数据发生器发送RIPv1 数据包(因RG-PATS网络协议分析仪版本限制,部分操作无法完成。RIPv2同。)把路由器 RA 关掉,把RG-PATS 协议仪连接到网络中,使用 RG-PATS 协议仪的协议数据发生器编辑一个数据包,模拟路由器A 发送路由更新信息。
17、1、在 RG-PATS 协议仪上打开数据包发生器,编辑一个RIPv1 数据包。首先点击菜单栏“添加”。2、添加一个 RIPv1 协议模板,点击确认添加。3、修改协议模板的每个值:Ethernet II 封装: 目标物理地址设置为广播地址FF-FF-FF-FF-FF-FF 原物理地址设置为路由器RA 的fa0/0 接口MAC 地址 类型:0800IP 封装: 版本信息:4 IP 头长度: 5服务类型:C0 总长度:52 标识:0 标志:2 生存时间:64 协议类型:17 发送 IP 地址:192.168.1.1 目标 IP 地址:255.255.255.255UDP 封装: 源端口号:520 目
18、标端口号:520 UDP 长度:32RIPv1 封装: 命令:2版本信息:1 地址系列:2 目标网络:192.168.10.0度量值:14、编辑完成数据包后,需要点击菜单栏的校验和,进行数据检验。下图是编辑完成并经过校验的数据包:5、数据包编辑完成之后,首先在路由器RB 使用show ip route 命令查看路由器RA 没有关闭前的路由表:6、然后关闭路由器RA,等一会之后,再用show ip route 命令查看路由器RB 的路由表,这时去住192.168.10.0 网络的路由信息不存在了。7、在路由器RB 上使用debug ip rip packet 命令,找开 debug 信息测试,再
19、使用RG-PATS 协议仪的协议数据发生器发送刚编辑好的数据包,点击协议数据发器的菜单栏的“发送”键,如下图所示:8、在路由器 RB 上使用命令 show ip route 查看是否学习到 192.168.10.0 网络的路由。编辑完成后,点击发送,在路由器 RB 上使用 show ip route 命令查看,学习到关于去往 192.168.50.0 网络的路由信息。步骤四:设定RIPv2 路由协议实验环境RA#configure terminalRA(config)# interface FastEthernet 0/0RA(config-if)#ip address 192.168.1.1
20、 255.255.255.0RA(config)# interface Loopback 0RA(config-if)#ip address 192.168.10.1 255.255.255.0RA#configure terminalRA(config)#router ripRA(config-router)#network 192.168.1.0RA(config-router)#network 192.168.10.0RA(config-router)#version 2RA(config-router)#no auto-summaryRB#configure terminalRB(co
21、nfig)# interface FastEthernet 0/0RB(config-if)#ip address 192.168.1.2 255.255.255.0RB(config)# interface Loopback 0RB(config-if)#ip address 192.168.20.1 255.255.255.0RB#configure terminalRB(config)# interface FastEthernet 0/1RB(config-if)#ip address 192.168.2.1 255.255.255.0RB#configure terminalRB(c
22、onfig)#router ripRB(config-router)#network 192.168.1.0RB(config-router)#network 192.168.2.0RB(config-router)#network 192.168.20.0RB(config-router)#version 2RB(config-router)#no auto-summaryRC#configure terminalRC(config)# interface FastEthernet 0/0RC(config-if)#ip address 192.168.2.2 255.255.255.0RC
23、(config)# interface Loopback 0RC(config-if)#ip address 192.168.30.1 255.255.255.0RC#configure terminalRC(config)#router ripRC(config-router)#network 192.168.2.0RC(config-router)#network 192.168.30.0RC(config-router)#version 2RC(config-router)#no auto-summary步骤五、使用RG-PATS 网络协议分析仪采集RIPv2 数据包当拓扑中的所有路由器
24、启动了RIPv2 路由进程,这时所有路由器都会以组播的方式通过其接口发送路由更新信息,采用的组播地址为224.0.0.9 ,其使用的UDP 协议的520 端口与邻居进行交换信息的;在RIPv2 数据包中其使用的命令为2,说明其是一个响应报文;版本信息为2,这说明其运行的RIPv2;报文中还有关于目标网络、子网信息、下一跳、度量值等信息;因为RIPv2 是无类的路由协议,支持VLSM,所以在其发送路由信息的时候需求携带子网信息的。路由器RB 发送路由信息给路由器RA,其报文中包含去往目标网络192.168.2.0、 192.168.20.0、192.168.30.0 三个网络的路由信息,并且去往
25、目标度量值分别为1、1、2 跳。在路由器 RA 上使用show ip route 命令查看一下路由表信息。步骤六、使用RG-PATS 协议数据发生器发送RIPv2 数据包把路由器 RA 关掉,把RG-PATS 协议仪连接到网络中,使用 RG-PATS 协议仪的协议数据发生器编辑一个数据包,模拟路由器A 发送路由更新信息。1、在 RG-PATS 协议仪上打开数据包发生器,编辑一个RIPv2 数据包。首先点击菜单栏“添加”。2、添加一个 RIPv1 协议模板,点击确认添加。3、修改协议模板的每个值:Ethernet II 封装:目标物理地址设置为224.0.0.4 组播MAC 地址01-00-5E
26、-00-00-09 原物理地址设置为路由器RA 的fa0/0 接口MAC 地址 类型:0800IP 封装:版本信息:4 IP 头长度: 5 服务类型:C0 总长度:52 标识:00B2 标志:0 生存时间:1 协议类型:17 发送 IP 地址:192.168.1.1 目标 IP 地址:224.0.0.9UDP 封装: 源端口号:520 目标端口号:520 UDP 长度:32RIPv1 封装: 命令:2 版本信息:2 地址系列:2 目标网络:192.168.10.0 子网掩码:255.255.255.0 下一跳:0.0.0.0 度量值:14、编辑完成数据包后,需要点击菜单栏的校验和,进行数据检验
27、。5、数据包编辑完成之后,首先在路由器RB 使用show ip route 命令查看路由器RA 没有关闭前的路由表。6、然后关闭路由器RA,等一会之后,再用show ip route 命令查看路由器RB 的路由表,这时去住192.168.10.0 网络的路由信息不存在了。7、在路由器RB 上使用debug ip rip packet 命令,找开 debug 信息测试,再使用RG-PATS 协议仪的协议数据发生器发送刚编辑好的数据包,点击协议数据发器的菜单栏的“发送”键。参考文献:计算机网络协议原理实验教程编写时间:2015 年 1 月 7 日201211010231 朱建春 2012 级计算机科学与技术 2 班