IPv6 RIPng 路由协议
 

2.1      IPv6 RIPng

下一代路由选择信息协议(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 协议,也适用于路由类协议。
 

2.1.1 RIPng报文格式

RIPng是基于UDP的协议,并且使用端口号521发送和接收数据报。其更新组播地址为FF02::9RIPng报文大致可分为两类:选路信息报文和用于请求信息的报文。它们都使用相同的格式,由固定的首部和路由表项RTERoute Table Entry)组成,其中路由表项可以有多个。
首部包括命令字段和版本号字段。同RIP一样,命令字段用来区分报文要实现的各种操作。其中命令号1表示请求部分或全部选路信息,命令号2表示响应,其中包含一个或多个RTE。如下图所示,报文的具体格式。
 
IPv6 RIPng 路由协议_第1张图片
其各个字段的含义:
Ø  Command:定义报文的类型。0x01表示Request报文,0x02表示Response报文。
Ø  VersionRIPng的版本,目前其值只能为0x01
Ø  RTERoute Table Entry):路由表项,每项的长度为20字节。
路由器或主机可以通过发送请求命令向另一个路由器请求选路信息。路由器使用响应命令回答。版本号字段包含了协议的版本号(目前的版本号值为1),接收方会检测该字段,以确定对方运行的RIPng协议本地是否能进行正确的解释。
报文的剩余部分是一个RTE序列,在RIPng里有两类RTE,分别是
Ø  下一跳RTE:位于一组具有相同下一跳的“IPv6前缀RTE”的前面,它定义了下一跳的IPv6地址。
Ø  IPv6前缀RTE:位于某个“下一跳RTE”的后面。同一个“下一跳RTE”的后面可以有多个不同的“IPv6前缀RTE”。它描述了RIPng路由表中的目的IPv6地址、路由标记、前缀长度以及度量值。
IPv6前缀RTE如下图所示。
IPv6 RIPng 路由协议_第2张图片
Ø  IPv6 prefix:目的IPv6地址的前缀。
Ø  route tag:路由标记。
Ø  prefix lenIPv6地址的前缀长度。
Ø  metric:路由的度量值。
IPv6的地址为128bit,因此在RTE中占用16字节。
路由标记字段是从RIP中保留下来的,其最主要的用途是用来对外部路由做标志,以区分内部路由和外部路由,供外部网关路由协议(如EGPBGP)使用。该字段也可用于其他目的,只要网络内所有运行RIPng的路由器对其解释是一致的。
前缀长度字段指明了前缀中有效位的长度,IPv6中使用了前缀长度的概念代替了IPv4中的子网掩码。由于IPv6地址的意义很明确,因此RIPng中不再区分网络路由、子网路由或主机路由。
路由开销字段指明到目的网络的开销,由于RIPng的最大工作直径为15跳,因此该字段可以为115之间的任意值,16即意味着目的地不可达。RIPng中仍然使用固定的度量方式,即该字段的含义只能是跳数,路由器不能对其进行其他的解释。
RIPng并没有限制报文的大小,RIPng报文所能携带的最大RTE的数目是由物理介质的MTU所决定的,计算公式如下:
报文长度 = RTE数目×20 + 4
其中RTE数目的计算公式如下:
RTE数目=INT[MTU - IPv6首部长度 - UDP首部长度 - RIPng首部长度) / RTE长度]
下一跳RTE格式,如下图所示其格式。
IPv6 next hop address表示下一跳的IPv6地址
RIPv2不同的是,RIPng的下一跳字段是由一个单独的RTE指定的。RIPng使用单独的RTE表示下一跳的原因是IPv6的地址多达128bit,若将下一跳字段与目的网络地址放在同一个RTE中,则RTE的大小几乎将会增加一倍,因此RIPng中采取目的网络地址和下一跳分开的方法来减小RTE的长度。在表示下一跳的RTE中,路由标记和前缀长度字段必须为零,而度量字段为0xFF
Request报文
RIPng路由器启动后或者需要更新部分路由表项时,便会发出Request报文,向邻居请求需要的路由信息。通常情况下以组播方式发送Request报文。
收到Request报文的RIPng路由器会对其中的RTE进行处理。如果Request报文中只有一项RTE,且IPv6前缀和前缀长度都为0,度量值为16,则表示请求邻居发送全部路由信息,被请求路由器收到后会把当前路由表中的全部路由信息,以Response报文形式发回给请求路由器。如果Request报文中有多项RTE,被请求路由器将对RTE逐项处理,更新每条路由的度量值,最后以Response报文形式返回给请求路由器。下图为采集到的报文。
如下图所示:
IPv6 RIPng 路由协议_第3张图片
 
Response报文
Response报文包含本地路由表的信息,一般在下列情况下产生:
Ø  对某个Request报文进行响应
Ø  作为更新报文周期性地发出
Ø  在路由发生变化时触发更新
收到Response报文的路由器会更新自己的RIPng路由表。为了保证路由的准确性,RIPng路由器会对收到的Response报文进行有效性检查,比如源IPv6地址是否是链路本地地址,端口号是否正确等,没有通过检查的报文会被忽略。下图为采集到的报文。
如下图所示:
IPv6 RIPng 路由协议_第4张图片