标题：RIPng
定义
IETF在1997年为了解决RIP协议与IPv6的兼容性问题RIP协议进行了改进，制定了基于IPv6的RIPng(RIP next generation)标准，定义在RFC2080中[1]。
RIPng的主要思想
(1)度量方法RIPng的度量是基于跳数(hops count)的，每经过一台路由器，路径的跳数加l。如此一来，跳数越多，路径就越长，路由算法会优先选择跳数少的路径。RIPng支持的最大跳数是15，跳数为16的网络被认为不可达[1]。
  图1 RIPng网络拓扑[1](2)路由更新RIPng中路由的更新是通过定时广播实现每个路由表有一个更新计时器(Update Timer)，缺省情况下，路由器每隔30秒向与它相连的网络广播自己的路由表，接到广播的路由器将收到的信息添加至自身的路由表中。每个路由器都如此广播，最终网络上所有的路由器都会得知全部的路由信息。正常情况下，每30秒路由器就可以收到一次路由信息确认，如果经过180秒，即6个更新周期，1个路由项都没有得到确认，路由器就认为它已失效了。如果再经过120秒，路由项仍没有得到确认，它就被从路由表中删除。上面的30秒、180秒和120秒的延时都是由计时器控制的，它们分别是更新计时器(UpdateTimer)、暂时超时计时器(Timeout)和垃圾收集计时器(Garbage—collection Timer)[1]。(3)报文格式RIPng报文用UDP数据报进行传输，使用端口号521发送和接收数据报。RIPng报文分为两类：选路信息报文和用于请求信息的报文。它们都使用相同格式，由固定的首部和路由表项I盯E(Route Table Entry)组成，其中路由表项可以有多个，如图2所示。首部包括命令字段和版本号字段。同RIP一样，命令字段用来区分报文要实现的各种操作。其中命令号1表示请求部分或全部选路信息，命令号2表示响应[1]。
  图2 RiPng报文格式[1]
RIPng：路由选择信息协议下一代（应用于IPv6） 
（RIPng：RIP for IPv6） 
下一代路由选择信息协议（RIPng，应用于 IPv6）是一种基于 IPv6 网络协议和算法的协议。在国际性网络中，如因特网，拥有很多应用于整个网络的路由选择协议。形成网络的每一个自治系统（AS），都有属于自己的路由选择技术，不同的自治系统，路由选择技术也不同。自治系统内部的路由选择协议称为内部网关协议（IGP）。外部网关协议（EGP）是一种用于在自治系统之间传输路由选择信息的协议。 RIPng 在中等规模的 AS 中被用作 IGP 协议。对于较复杂的网络环境， RIPng 不适用。 
RIPng 是一种距离向量（Distance Vector）算法。此协议所用的算法早在 1969 年， ARPANET 就用其来计算路由。然而该协议最初属于 XEROX 网络协议。 PUP 协议通过网关信息协议交换路由选择信息，而 XNS 则采用该协议的更新版本，命名为路由选择信息协议（RIP）实现路由选择信息交换。 Berkeley 的路由协议很大程度上与 RIP 相同，即能够处理 IPV4 及其它地址类型的通用地址格式取代了 XNS 地址，同时路由选择每隔 30 秒更新一次。正是因为这种相似性， RIP 既适用于 XNS 协议，也适用于路由类协议。
关于 IPV4 网络，路由选择信息协议即指 RIP / RIP2，具体内容可参照相关说明。本文主要阐述 RIPng 。
关于 IPV6 网络，路由选择信息协议即指 RIPng
RIPng报文格式 
RIPng是基于UDP的协议，并且使用端口号521发送和接收数据报。RIPng报文大致可分为两类：选路
信息报文和用于请求信息的报文。它们都使用相同的格式，由固定的首部和路由表项RTE（Route Table 
Entry）组成，其中路由表项可以有多个。
RIPng工作原理 
路由器通常不会主动发出请求报文来进行路由请求，路由请求通常只是在路由器刚启动或是路由器正在寻找路由信息时才会发出请求报文以获得响应。路由器在查询响应、周期更新、触发更新三种情况下会收到响应报文。路由器根据响应报文判断是否对本地路由表进行更新。由于响应报文可能对本地路由表进行改动，因此对报文的来源必须进行严格的检查，以确认报文的合法性。 
众所周知，基于距离矢量算法的路由协议会产生慢收敛和无限计数问题，这样就引发了路由的不一致。RIPng使用水平分割技术、毒性逆转技术、触发更新技术来解决这些问题，但是这些技术的引入，同时又带来了另一些问题，如采用触发更新技术后，如果不对产生的报文进行合理的控制，很容易产生广播风暴。 
路由器周期性的报文广播和触发更新给网络造成很多额外的负载，为减少路由信息的数量，RIPng可以采用多播技术发送更新报文，同时利用一个小的随机时延对触发更新报文进行抑制。 
介绍RIPng的工作原理就不能不提到定时器，定时器在RIPng中起着非常重要的作用，RIPng使用定时器来实现路由表的更新、报文的发送。周期性的报文广播是由定时器实现的，另外为防止路由表长时间未更新而失效，每个路由表项有两个定时器与之相联系，超时的路由表项最终将会被删除，以防止路由器广播和使用已经失效的路由。RIPng中使用的定时器主要有以下三个： 启动周期性广播的定时器。此定时器被设置成25s到35s之间的任一随机数。这样设置的目的是为了避免网络上所有路由器以相同的定时发送更新报文，利用随机间隔可以均衡通信量，从而减少路由器之间发生冲突的可能性。 
期满定时器。路由器只要收到通往特定信宿路由，就对通往该信宿的期满定时器初始化。期满定时器被设定为180s，如果一条路由在期满定时器超时前未得到相关报文的更新，则该条路由不再有效，但仍保留在路由表中，以便通知其他路由器这条路由已经失效。 
垃圾收集定时器。路由器对无效路由打上尺度为无穷大的无效标记并将垃圾收集定时器初始化。此时，定时器被设置为120s，在这段时间内这些路由仍然会被路由器周期性地广播，这样相邻路由器就能迅速从路由表中删除该路由。 
RIPv1 RIPv2和RIPng的比较 
根据上面的介绍，我们应该看到RIPng的目标并不是创造一个全新的协议，而是对RIP进行必要的改造以使其适应IPv6下的选路要求，因此RIPng的基本工作原理同RIP是一样的，其主要的变化在地址和报文格式方面。下面列举了一些RIPv1、RIPv2与RIPng之间的主要区别： 
1. 地址版本。RIPv1、RIPv2是基于IPv4的，地址域只有32bit，而RIPng基于IPv6，使用的所有地址均为128bit。 
2. 子网掩码和前缀长度。RIPv1被设计成用于无子网的网络，因此没有子网掩码的概念，这就决定了RIPv1不能用于传播变长的子网地址或用于CIDR的无类型地址。RIPv2增加了对子网选路的支持，因此使用子网掩码区分网络路由和子网路由。IPv6的地址前缀有明确的含义，因此RIPng中不再有子网掩码的概念，取而代之的是前缀长度。同样也是由于使用了IPv6地址，RIPng中也没有必要再区分网络路由、子网路由和主机路由。 
3. 协议的使用范围。RIPv1、RIPv2的使用范围被设计成不只局限于TCP/IP协议簇，还能适应其他网络协议簇的规定，因此报文的路由表项中包含有网络协议簇字段，但实际的实现程序很少被用于其他非IP的网络，因此RIPng中去掉了对这一功能的支持。 
4. 对下一跳的表示。RIPv1中没有下一跳的信息，接收端路由器把报文的源IP地址作为到目的网络路由的下一跳。RIPv2中明确包含了下一跳信息，便于选择最优路由和防止出现选路环路及慢收敛。与RIPv2不同，为防止RTE过长，同时也是为了提高路由信息的传输效率，RIPng中的下一跳字段是作为一个单独的RTE存在的。 
5. 报文长度。RIPv1、RIPv2中对报文的长度均有限制，规定每个报文最多只能携带25个RTE。而RIPng对报文长度、RTE的数目都不作规定，报文的长度是由介质的MTU决定的。RIPng对报文长度的处理，提高了网络对路由信息的传输效率。 
6. RIPng使用FF02::9这个地址进行组播更新。