RIPng
缩略语 |
英文全名 |
中文解释 |
CIDR |
Classless Interdomain Routing |
无类域间路由选择RIPng |
IGP |
Interior Gateway Protocol |
内部网关协议 |
RIP |
Routing Information Protocol |
路由选择信息协议 |
RIPng |
RIP next generation |
下一代RIP协议 |
RTE |
Route Table Entry |
路由表项 |
VLSM |
Variable Length Subnet Mask |
可变长度子网掩码 |
(该表格来自华三技术文档
http://www.h3c.com/cn/d_200804/603580_30003_0.htm#_Toc195584826)
先来看RIP的两代版本的工作机制与差异:
- RIP通过UDP报文进行路由信息的交换,使用的端口号是520
- RIP路由器使用跳数来衡量到达目标网段的距离,发出的路由条目每经过一台 路由器则跳数+1,以此类推,为了限制收敛时间,RIP规定最大跳数为16,如 果大于或等于16条会被认为是无穷大,则认为该路由不可达
RIP的启动与运行过程如下:
- 路由器启动RIP后,会向邻居路由器发送请求报文,随后,路由器将不断侦听 来自其他路由器的RIP请求信息或相应信息
- 当发出请求的路由器收到了来自其他路由器的更新报文之后,会对自身的路由 表进行更新并,发送向邻居路由器发送触发式更新
- 邻居路由器收到路由更新后,又向其他邻居路由器泛洪触发式更新报文,在一 连串的触发式更新后,全网路由器同步并保持最新的路由信息
以下是RIPv2启动与运行的图解:
1.在T1时刻,R4已经将RIP启动完成,并将Loopback口宣告至RIP,R5开启RIP进程并将两个直连网段宣告进RIP
图中可以看到,RIP使用UDP协议,且端口号为520,箭头所指出的地方,Request报文大多数只在进程刚启动时发送,以向邻居请求路由条目以填充自己的路由表,第一个发送的Request中,包含一条空的且开销为16的路由,这表示该路由器向邻居路由器请求所有路由条目,不是指定单独一条路由
2.在T2时刻R5发送出的Request报文被R4所接受,R4以response回应,数据包如下:
RIP的response包,会在收到Request请求后发送,也会周期性发送,时间为30s,但实际现象是25s-30s发出一个,并不是绝对的周期,会存在一个抖动值,RIP的response包的路由信息包含了,前缀,掩码,下一跳,路由标签,开销,其中address family表示地址类型,IP为2(基本上找不到其他的了),response包最多只能包含25条路由条目,如果你开启了认证,那么只能包含24条条目,还有一点需要注意的是,RIP的所有包,TTL只有一跳,路由器并不是将RIP数据包转发,而是重新生成一个再泛洪
如果你掌握了RIPv2那么RIPng并不难,因为原理都一样,接下来是RIPng的对比:
- 报文中的下一跳长度不同,因IPv4与IPv6地址长度不同所以RIPng是128位
- RIP对报文的长度有限制,最大只能携带25个路由条目,而RIPng的报文长度,携带路由条目数目不作规定,报文长度与发送接口设置IPv6的MTU值有关
- 报文格式不同,与RIPv2一样,报文由头部和多个路由表项组成
RIPv2报文(上),RIPng报文(下)
与RIPv2不同的是,RIPng有两种路由条目:
1.Nexthop RTE
位于具有同一组下一跳的路由条目之前
2.IPv6前缀RTE
位于某个“下一跳 RTE”之后,同一个“下一跳 RTE”后 面可以跟很多个不同的“IPv6前缀RTE”,它描述了RIPng表中的,IPv6 地址,前缀长度,Router-tag以及开销值
下图为Nexthop RTE的格式:
下图为IPv6前缀RTE的格式:
- IPv6 prefix :目标IPv6地址的前缀
- route tag : 路由标签
- prefix len : 地址前缀长度
- Metric : 路径开销
3.报文发送方式不同
RIPv2通过用户配置可以实现组播或广播的方式来周期性的发送路由信息,而RIPng只能使用组播的方式来发送路由更新,IPv4的组播地址为224.0.0.9,IPv6的组播地址为ff02::9/64
4.安全认证不同
RIPv1无法使用认证功能,RIPv2可以使用MD5或明文认证来确保路由条目的安全性,而RIPng则可以通过IPv6自身的安全性来确保路由条目的安全,所以认证功能在RIPng中被取消
5.与网络层协议的兼容性不同
RIP不仅能在IP网络中运行,还能在IPX网络中运行,而RIPng只能在IPv6网络中运行
以下是IPv6的实验,包含了配置,数据包分析,路由过滤,以及偏移列表,以下是实验拓扑:
RIPng的配置与RIP不一样,在v4的RIP中,是在进程中使用network命令宣告,但在RIPng中,是先创建一个RIPng的实例,然后进入端口,将端口划入实例
R1:
R1(config)#ipv6 router rip test ##现在全局下创建一个RIPng实例
R1(config-rtr)#exit
R1(config)#interface loopback1 ##进入接口
R1(config-if)#ipv6 rip test enable ##将接口划入RIPng实例
R1(config-if)#interface loopback2
R1(config-if)#ipv6 rip test enable
R1(config-if)#interface f0/0
R1(config-if)#ipv6 rip test enable
R2:
R2config)#ipv6 router rip test
R2(config-rtr)#exit
R2(config)#interface f0/0
R2(config-if)#ipv6 rip test enable
R2(config-if)#interfacef1/0
R2(config-if)#ipv6 rip test enable
R3:
R3(config)#ipv6 router rip test
R3(config-rtr)#exit
R3(config)#interface loopback1
R3(config-if)#ipv6 rip test enable
R3(config-if)#interface loopback2
R3(config-if)#ipv6 rip test enable
R3(config-if)#interface f0/0
R3(config-if)#ipv6 rip test enable
配置完成之后在R1上查看路由表,show ipv6 route
可以看到已经学到了R3的两个Loopback口路由,使用ping命令测试,ping命令没有变化:
那么完成了最基本的配置在开看看偏移列表的配置,RIPng的偏移列表与RIPv2中的完全不一样,来看一下对比:
- RIPv2可以匹配感兴趣条目,RIPng不行
- 在RIPv2中,如果你想将一个条目从2跳变为5跳,那么你只需要+3跳就 可以了,而在RIPng中,你需要加4跳,也就是说5-2+1跳,这一点将在 之后的实验中看到
- RIPv2中的偏移列表可以指定入方向或出方向,但RIPng只能是出方向, 因为不能匹配感兴趣条目,所以,你如果在一个接口上设置偏移,那么所 有从这个接口出去的条目,都会发生跳数偏移
拓扑图依然如下:
从上图R1的路由表可以看到,去往2013::/64的开销是3跳,那么如果你要将他变为5跳或10跳,那么你只能在R2的F0/0口上做偏移,因为只能是出方向,那么先来看看,偏移至5跳的配置方法,根据上面给出的方法,你设置的偏移值应该为,5-3+1:
R2
R2(config)#interface FastEthernet0/0
R2(config-if)#ipv6 rip test metric-offset 3
配置完成之后去R1上看效果,发现变成了5跳,至于为什么我也不知道,这个是算法的问题了,同样的如果你想改变至10跳,那么你就应该10-3+1=8,也就是将偏移值设为8:
那么解决了偏移列表的问题,接下来就是路由操纵了,在上图可以看到R1中有两个R3的Loopback口路由,分别是2012::/64,2013::/64,那么如果你只希望R1收到R3的2012::/64路由,不希望收到2013::/64的路由条目,那么就可以在R2上配置分发列表,但是这里需要注意的是,当你在RIPng配置分发列表时,一定要指定出接口,否则是不生效了,而且,你只能放行条目,不能拒绝某条条目,也就是说,如果你有10条路由,需要放行9条,那么你就需要用前缀列表去匹配9条路由,而不是匹配1条路由然后做拒绝
以下是配置:
R2:
R2(config)#ipv6 prefix-list a seq 5 permit 2012::/64 ##用的是ipv6的前缀列表
R2(config)#ipv6 router rip test ##在进程中配置
R2(config-rtr)#distribute-list prefix-list a out f0/0 ##配置f0/0口出方向过滤
配置完成后在R1查看路由表,发现2013::/64被过滤
最后再来看一下RIPng的两中数据包,Request与response
(上图为Request包,下图为Response包,两个数据包格式一样,所以放在一起解释了)
进行逐一解释:
Command(命令字):如果为1则代表Request,2则为Response,1字节长
version(版本号):目前只有1,1字节长
Reserved(保留字段):必须为全0,2字节长
Route Table Entry(路由条目):不论RIPng或RIPv1,v2,在启动完成后,都会先发送一个全0的路由条目,这表示了向邻居请求所有的路由条目,该条目包含了,路由前缀,前缀长度,开销,路由标记,全长20字节,其中IPv6 Prefix长度为16字节,因为ipv6地址是128位,Route tag长度为2字节,Prefix Length长度为1字节,Metric长度为1字节