IPv6笔记和实验 RIPng
2.1.2 RIPng的工作机制
(1)路由器启动RIP后,便会向相邻的路由器发送请求报文。接着,路由器将不断侦听来自其它路由器的RIP请求消息或响应消息。
(2)当发出请求的路由器收到响应报文后,路由器将处理响应报文中的路由更新消息并对自己的路由表进行更新,同时向相邻路由器发送触发更新报文,通告路由更新信息。
(3)相邻路由器收到触发更新报文后,又向其各自的相邻路由器发送触发更新报文。在一连串的触发更新广播后,各路由器都能得到并保持最新的路由信息。
当路由收到网络中的一台路由器请求时,在回复更新时会采用单播的方式,主要是为节省网络资源。当收到了新加入路由器的路由条目后,会更新自己的路由表,并以触发更新的模式向路由器的其它接口进行组播其路由表。
RIPng把参与通信的机器分为主动和被动两种方式。主动路由器向其他路由器通告路由,而被动路由器接收通告并更新其路由,被动路由器自己并不通告路由。只有路由器以主动方式使用RIPng,主机只能使用被动方式,因为主机并不了解路由信息。
运行RIPng的路由器维持一个到所有可能目的网络的路由表,路由器周期性地(RFC推荐为30s)向邻居节点发送该路由器的路由表,接收方通过接收邻居路由器的周期性通告更新自己的路由表。这种周期性的路由信息的交换使得每个路由器形成对网络拓扑结构的局部的认识。RIPng使用到达目的站点所经过的链路数,即跳数来度量路由花费,同时RFC规定RIPng的工作范围为15跳,数值16表示无穷大,即意味着路由不可达。
路由器通常不会主动发出请求报文来进行路由请求,路由请求通常只是在路由器刚启动或是路由器正在寻找路由信息时才会发出请求报文以获得响应。
路由器在查询响应、周期更新、触发更新三种情况下会收到响应报文。路由器根据响应报文判断是否对本地路由表进行更新。由于响应报文可能对本地路由表进行改动,因此对报文的来源必须进行严格的检查,以确认报文的合法性。
基于距离矢量算法的路由协议会产生慢收敛和无限计数问题,这样就引发了路由的不一致。RIPng使用水平分割技术、毒性逆转技术、触发更新技术来解决这些问题,但是这些技术的引入,同时又带来了另一些问题,如采用触发更新技术后,如果不对产生的报文进行合理的控制,很容易产生广播风暴。
路由器周期性的报文广播和触发更新给网络造成很多额外的负载,为减少路由信息的数量,RIPng可以采用多播技术发送更新报文,同时利用一个小的随机时延对触发更新报文进行抑制。
定时器在RIPng中起着非常重要的作用,RIPng使用定时器来实现路由表的更新、报文的发送。周期性的报文广播是由定时器实现的,另外为防止路由表长时间未更新而失效,每个路由表项有两个定时器与之相联系,超时的路由表项最终将会被删除,以防止路由器广播和使用已经失效的路由。RIPng中使用的定时器主要有以下三个:
Ø牋更新定时器:此定时器被设置成25s到35s之间的任一随机数。这样设置的目的是为了避免网络上所有路由器以相同的定时发送更新报文,利用随机间隔可以均衡通信量,从而减少路由器之间发生冲突的可能性。
Ø牋期满定时器:路由器只要收到通往特定信宿路由,就对通往该信宿的期满定时器初始化。期满定时器被设定为180s,如果一条路由在期满定时器超时前未得到相关报文的更新,则该条路由不再有效,但仍保留在路由表中,以便通知其他路由器这条路由已经失效。
Ø牋垃圾收集定时器:路由器对无效路由打上尺度为无穷大的无效标记并将垃圾收集定时器初始化。此时,定时器被设置为120s,在这段时间内这些路由仍然会被路由器周期性地广播,这样相邻路由器就能迅速从路由表中删除该路由。
如下图所示:
RIPng与RIPv1、RIPv2区别
通过以上小节的学习,RIPng的目标并不是创造一个全新的协议,而是对RIP进行必要的改造以使其适应IPv6下的选路要求,因此RIPng的基本工作原理同RIP是一样的,但其与RIP也存在很区别,具体区别如下:
(1)报文结构不同
地址版本不同,RIPv1、RIPv2是基于IPv4的,地址域只有32bit,RIPng基于IPv6,使用的所有地址均为128bit。
子网掩码和前缀长度不同,RIPv1被设计成用于无子网的网络,因此没有子网掩码的概念,这就决定了RIPv1不能用于传播变长的子网地址或用于CIDR的无类型地址。RIPv2增加了对子网选路的支持,因此使用子网掩码区分网络路由和子网路由。IPv6的地址前缀有明确的含义,因此RIPng中不再有子网掩码的概念,取而代之的是前缀长度。同样也是由于使用了IPv6地址,RIPng中也没有必要再区分网络路由、子网路由和主机路由。
协议的使用范围不同,RIPv1、RIPv2的使用范围被设计成不只局限于TCP/IP协议簇,还能适应其他网络协议簇的规定,因此报文的路由表项中包含有网络协议簇字段,但实际的实现程序很少被用于其他非IP的网络,因此RIPng中去掉了对这一功能的支持。
对下一跳的表示不同,RIPv1中没有下一跳的信息,接收端路由器把报文的源IP地址作为到目的网络路由的下一跳。RIPv2中明确包含了下一跳信息,便于选择最优路由和防止出现选路环路及慢收敛。与RIPv2不同,为防止RTE过长,同时也是为了提高路由信息的传输效率,RIPng中的下一跳字段是作为一个单独的RTE存在的。
报文长度不同,RIPv1、RIPv2中对报文的长度均有限制,规定每个报文最多只能携带25个RTE。RIPng对报文长度、RTE的数目都不作规定,报文的长度是由介质的MTU决定的。RIPng对报文长度的处理,提高了网络对路由信息的传输效率。
报文的发送方式不同,RIPv1使用广播来发送路由信息,不仅路由器会接收到分组,同一局域网内的所有主机也会接收到分组,这样做是不必要的,也是不安全的。RIPv2既可以使用广播也可以使用多播发送报文,这样在支持多播的网络中就可以使用多播来发送报文,大大降低了网络中传播的路由信息的数量。RIPng使用组播方式周期性地发送路由信息。
(2)安全认证不同
RIPv1报文中并不包含验证信息,因此也是不安全的,任何通过UDP的520端口发送分组的主机,都会被邻机当作一个路由器,从而很容易造成路由器欺骗。
RIPv2设计了验证报文来增强安全性,进行路由交换的路由器之间必须通过验证才能接收彼此的路由信息,但是RIPv2的安全性还是很不充分的。
RIPng自身不提供认证功能,而是通过使用IPv6提供的安全机制来保证自身报文的合法性。
(3)与网络层协议的兼容性不同
RIP不仅能在IP网络中运行,也能在IPX网络中运行;
RIPng只能在IPv6网络中运行。
=============================================
Lab
实验拓扑:
配置R1:
ipv6 unicast-routing //启用ipv6单播路由协议
interface Ethernet0/0
ipv6 address 2001:1:1:1::1/64
ipv6 rip cisco enable //在接口启用RIPng
no keepalive
interface Serial1/0
ipv6 address 2001:A:A:A::1/64
ipv6 rip cisco enable //在接口启用RIPng
interface Serial1/1
ipv6 address 2001:B:B:B::1/64
ipv6 rip cisco enable //在接口启用RIPng
ipv6 router rip cisco //定义标识为cisco的的RIPng进程
配置R2:
ipv6 unicast-routing
interface Ethernet0/0
ipv6 address 2001:2:2:2::2/64
ipv6 rip cisco enable
no keepalive
interface Serial1/0
ipv6 address 2001:A:A:A::2/64
ipv6 rip cisco enable
ipv6 router rip cisco
配置R3
ipv6 unicast-routing //启用ipv6单播路由协议
interface Ethernet0/0
ipv6 address 2001:3:3:1::3/64
ipv6 address 2001:3:3:2::3/64
ipv6 address 2001:3:3:3::3/64
ipv6 address 2001:3:3:4::3/64
ipv6 address 2001:3:3:5::3/64
ipv6 address 2001:3:3:6::3/64
ipv6 rip cisco enable
no keepalive
!
interface Serial1/0
ipv6 address 2001:B:B:B::3/64
ipv6 rip cisco enable
ipv6 router rip cisco:
在R2验证配置:
r2#show ipv6 rip
RIP process "cisco", port 521, multicast-group FF02::9, pid 168
Administrative distance is 120. Maximum paths is 16
Updates every 30 seconds, expire after 180
Holddown lasts 0 seconds, garbage collect after 120
Split horizon is on; poison reverse is off
Default routes are not generated
Periodic updates 92, trigger updates 16
Interfaces:
Ethernet0/0
Serial1/0
Redistribution:
None
r2#show ipv6 route
IPv6 Routing Table - 14 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
U - Per-user Static route
I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
R 2001:1:1:1::/64 [120/2]
via FE80::CE00:3FF:FE68:0, Serial1/0
C 2001:2:2:2::/64 [0/0]
via ::, Ethernet0/0
L 2001:2:2:2::2/128 [0/0]
via ::, Ethernet0/0
R 2001:3:3:1::/64 [120/3]
via FE80::CE00:3FF:FE68:0, Serial1/0
R 2001:3:3:2::/64 [120/3]
via FE80::CE00:3FF:FE68:0, Serial1/0
R 2001:3:3:3::/64 [120/3]
via FE80::CE00:3FF:FE68:0, Serial1/0
R 2001:3:3:4::/64 [120/3]
via FE80::CE00:3FF:FE68:0, Serial1/0
R 2001:3:3:5::/64 [120/3]
via FE80::CE00:3FF:FE68:0, Serial1/0
R 2001:3:3:6::/64 [120/3]
via FE80::CE00:3FF:FE68:0, Serial1/0
C 2001:A:A:A::/64 [0/0]
via ::, Serial1/0
L 2001:A:A:A::2/128 [0/0]
via ::, Serial1/0
R 2001:B:B:B::/64 [120/2]
via FE80::CE00:3FF:FE68:0, Serial1/0
L FE80::/10 [0/0]
via ::, Null0
L FF00::/8 [0/0]
via ::, Null0
r2#show ipv6 route rip
IPv6 Routing Table - 14 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
U - Per-user Static route
I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
R 2001:1:1:1::/64 [120/2]
via FE80::CE00:3FF:FE68:0, Serial1/0
R 2001:3:3:1::/64 [120/3]
via FE80::CE00:3FF:FE68:0, Serial1/0
R 2001:3:3:2::/64 [120/3]
via FE80::CE00:3FF:FE68:0, Serial1/0
R 2001:3:3:3::/64 [120/3]
via FE80::CE00:3FF:FE68:0, Serial1/0
R 2001:3:3:4::/64 [120/3]
via FE80::CE00:3FF:FE68:0, Serial1/0
R 2001:3:3:5::/64 [120/3]
via FE80::CE00:3FF:FE68:0, Serial1/0
R 2001:3:3:6::/64 [120/3]
via FE80::CE00:3FF:FE68:0, Serial1/0
R 2001:B:B:B::/64 [120/2]
via FE80::CE00:3FF:FE68:0, Serial1/0
r2#show ipv6 rip database
RIP process "cisco", local RIB
2001:1:1:1::/64, metric 2, installed
Serial1/0/FE80::CE00:3FF:FE68:0, expires in 157 secs
2001:3:3:1::/64, metric 3, installed
Serial1/0/FE80::CE00:3FF:FE68:0, expires in 157 secs
2001:3:3:2::/64, metric 3, installed
Serial1/0/FE80::CE00:3FF:FE68:0, expires in 157 secs
2001:3:3:3::/64, metric 3, installed
Serial1/0/FE80::CE00:3FF:FE68:0, expires in 157 secs
2001:3:3:4::/64, metric 3, installed
Serial1/0/FE80::CE00:3FF:FE68:0, expires in 157 secs
2001:3:3:5::/64, metric 3, installed
Serial1/0/FE80::CE00:3FF:FE68:0, expires in 157 secs
2001:3:3:6::/64, metric 3, installed
Serial1/0/FE80::CE00:3FF:FE68:0, expires in 157 secs
2001:A:A:A::/64, metric 2
Serial1/0/FE80::CE00:3FF:FE68:0, expires in 157 secs
2001:B:B:B::/64, metric 2, installed
Serial1/0/FE80::CE00:3FF:FE68:0, expires in 157 secs
r2#show ipv6 rip next-hops
RIP process "cisco", Next Hops
FE80::CE00:3FF:FE68:0/Serial1/0 [9 paths]
r2#
在R3上实现聚合路由:
r3(config)#int s1/0
r3(config-if)#ipv6 rip cisco summary-address 2001:3:3::/48
在R2上查看路由表:(聚合后的路由)
r2#show ipv6 route rip
IPv6 Routing Table - 9 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
U - Per-user Static route
I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
R 2001:1:1:1::/64 [120/2]
via FE80::CE00:3FF:FE68:0, Serial1/0
R 2001:3:3::/48 [120/3]
via FE80::CE00:3FF:FE68:0, Serial1/0
R 2001:B:B:B::/64 [120/2]
via FE80::CE00:3FF:FE68:0, Serial1/0
在RIPng中分发默认路由:
r3(config)#int s1/0
r3(config-if)#ipv6 rip cisco default-information originate metric 5
在R1或R2上查看默认路由:
r2#show ipv6 route rip
IPv6 Routing Table - 10 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
U - Per-user Static route
I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
R ::/0 [120/7] //ipv6里默认路由表示
via FE80::CE00:3FF:FE68:0, Serial1/0
R 2001:1:1:1::/64 [120/2]
via FE80::CE00:3FF:FE68:0, Serial1/0
R 2001:3:3::/48 [120/3]
via FE80::CE00:3FF:FE68:0, Serial1/0
R 2001:B:B:B::/64 [120/2]
via FE80::CE00:3FF:FE68:0, Serial1/0
r2#