路由技术的发展是与整个因特网的发展密切相关的。随着因特网规模和负载的增长,产生了地址空间不足及路由器存储和交换的信息量急剧增加等一系列问题,使得IPv6得以长足发展,并将最终取代IPv4。同时现有的基于IPv4的路由协议也必须加以改造,使之符合未来因特网的发展要求。
众所周知,路由协议有基于距离矢量和链路状态两种。使用最广泛的一种基于距离矢量的路由协议是选路信息协议RIP(Routing Information Protocol)。RIP产生较早,经过多年的应用,已经产生成熟的标准和产品。RIP最大的优点是其比较简单,在规模不大、拓扑结构比较简单的网络上易于操作和维护。但对于规模较大的网络,由于其存在选路环路及无限计数等问题,选路性能不如基于链路状态的协议(如OSPF),因而较少采用。
RIP作为一种成熟的路由标准,在因特网中有着广泛的应用,特别是在一些中小型网络中。正是基于这种现状,同时考虑到RIP与IPv6的兼容性问题,IETF对现有技术进行改造,制定了IPv6下的RIP标准,即RIPng(RIP next generation)。下面的各节中将分别对RIPng的消息格式、工作原理、与RIPv1及RIPv2的主要差别、协议的缺点及改进方向、发展趋势等方面做简单的介绍。
2 RIPng的报文格式
RIPng是基于UDP的协议,并且使用端口号521发送和接收数据报。RIPng报文大致可分为两类:选路信息报文和用于请求信息的报文。它们都使用相同的格式,由固定的首部和路由表项RTE(Route Table Entry)组成,其中路由表项可以有多个。
首部包括命令字段和版本号字段。同RIP一样,命令字段用来区分报文要实现的各种操作。其中命令号1表示请求部分或全部选路信息,命令号2表示响应,其中包含一个或多个RTE。
路由器或主机可以通过发送请求命令向另一个路由器请求选路信息。路由器使用响应命令回答。版本号字段包含了协议的版本号(目前的版本号值为1),接收方会检测该字段,以确定对方运行的RIPng协议本地是否能进行正确的解释。
报文的剩余部分是一个RTE序列,其中每一个RTE由目的IPv6前缀、路由标记、前缀的有效长度以及到目的网络的花费等4部分组成。
IPv6的地址为128bit,因此在RTE中占用16字节。
路由标记字段是从RIP中保留下来的,其最主要的用途是用来对外部路由做标志,以区分内部路由和外部路由,供外部网关路由协议(如EGP或BGP)使用。该字段也可用于其他目的,只要网络内所有运行RIPng的路由器对其解释是一致的。
前缀长度字段指明了前缀中有效位的长度,IPv6中使用了前缀长度的概念代替了IPv4中的子网掩码。由于IPv6地址的意义很明确,因此RIPng中不再区分网络路由、子网路由或主机路由。
路由花费字段指明到目的网络的花费,由于RIPng的最大工作直径为15跳,因此该字段可以为1和15之间的任意值,16即意味着目的地不可达。RIPng中仍然使用固定的度量方式,即该字段的含义只能是跳数,路由器不能对其进行其他的解释。
RIPng并没有限制报文的大小,RIPng报文所能携带的最大RTE的数目是由物理介质的MTU所决定的,计算公式如下:
报文长度 = RTE数目×20 + 4
其中RTE数目的计算公式如下:
RTE数目=INT[(MTU - IPv6首部长度 - UDP首部长度 - RIPng首部长度) / RTE长度]
与RIPv2不同的是,RIPng的下一跳字段是由一个单独的RTE指定的。RIPng使用单独的RTE表示下一跳的原因是IPv6的地址多达128bit,若将下一跳字段与目的网络地址放在同一个RTE中,则RTE的大小几乎将会增加一倍,因此RIPng中采取目的网络地址和下一跳分开的方法来减小RTE的长度。在表示下一跳的RTE中,路由标记和前缀长度字段必须为零,而度量字段为0xFF。
3 RIPng的工作原理
RIPng把参与通信的机器分为主动和被动两种方式。主动路由器向其他路由器通告路由,而被动路由器接收通告并更新其路由,被动路由器自己并不通告路由。只有路由器以主动方式使用RIPng,主机只能使用被动方式,因为主机并不了解路由信息。
运行RIPng的路由器维持一个到所有可能目的网络的路由表,路由器周期性地(RFC推荐为30s)向邻居节点发送该路由器的路由表,接收方通过接收邻居路由器的周期性通告更新自己的路由表。这种周期性的路由信息的交换使得每个路由器形成对网络拓扑结构的局部的认识。RIPng使用到达目的站点所经过的链路数,即跳数来度量路由花费,同时RFC规定RIPng的工作范围为15跳,数值16表示无穷大,即意味着路由不可达。
路由器通常不会主动发出请求报文来进行路由请求,路由请求通常只是在路由器刚启动或是路由器正在寻找路由信息时才会发出请求报文以获得响应。
路由器在查询响应、周期更新、触发更新三种情况下会收到响应报文。路由器根据响应报文判断是否对本地路由表进行更新。由于响应报文可能对本地路由表进行改动,因此对报文的来源必须进行严格的检查,以确认报文的合法性。
众所周知,基于距离矢量算法的路由协议会产生慢收敛和无限计数问题,这样就引发了路由的不一致。RIPng使用水平分割技术、毒性逆转技术、触发更新技术来解决这些问题,但是这些技术的引入,同时又带来了另一些问题,如采用触发更新技术后,如果不对产生的报文进行合理的控制,很容易产生广播风暴。
路由器周期性的报文广播和触发更新给网络造成很多额外的负载,为减少路由信息的数量,RIPng可以采用多播技术发送更新报文,同时利用一个小的随机时延对触发更新报文进行抑制。
介绍RIPng的工作原理就不能不提到定时器,定时器在RIPng中起着非常重要的作用,RIPng使用定时器来实现路由表的更新、报文的发送。周期性的报文广播是由定时器实现的,另外为防止路由表长时间未更新而失效,每个路由表项有两个定时器与之相联系,超时的路由表项最终将会被删除,以防止路由器广播和使用已经失效的路由。RIPng中使用的定时器主要有以下三个:
(1)启动周期性广播的定时器。此定时器被设置成25s到35s之间的任一随机数。这样设置的目的是为了避免网络上所有路由器以相同的定时发送更新报文,利用随机间隔可以均衡通信量,从而减少路由器之间发生冲突的可能性。
(2)期满定时器。路由器只要收到通往特定信宿路由,就对通往该信宿的期满定时器初始化。期满定时器被设定为180s,如果一条路由在期满定时器超时前未得到相关报文的更新,则该条路由不再有效,但仍保留在路由表中,以便通知其他路由器这条路由已经失效。
(3)垃圾收集定时器。路由器对无效路由打上尺度为无穷大的无效标记并将垃圾收集定时器初始化。此时,定时器被设置为120s,在这段时间内这些路由仍然会被路由器周期性地广播,这样相邻路由器就能迅速从路由表中删除该路由。
4 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)安全性考虑。RIPv1报文中并不包含验证信息,因此也是不安全的,任何通过UDP的520端口发送分组的主机,都会被邻机当作一个路由器,从而很容易造成路由器欺骗。RIPv2设计了验证报文来增强安全性,进行路由交换的路由器之间必须通过验证才能接收彼此的路由信息,但是RIPv2的安全性还是很不充分的。IPv6包含有很好的安全性策略,因此RIPng中不再单独设计安全性验证报文,而是使用IPv6的安全性策略。
(7)报文的发送方式。RIPv1使用广播来发送路由信息,不仅路由器会接收到分组,同一局域网内的所有主机也会接收到分组,这样做是不必要的,也是不安全的。因此RIPv2和RIPng既可以使用广播也可以使用多播发送报文,这样在支持多播的网络中就可以使用多播来发送报文,大大降低了网络中传播的路由信息的数量。
5 存在的问题及改进方向
由于RIPng是从RIP改造而来,因此RIPng中仍然存在很多问题,所以RIPng的实现程序必须仔细地设计,以减少对网络效率带来的影响。RIPng存在的问题主要有:
(1)协议的最大工作直径为15跳,因此限制了网络的规模。
(2)存在无限计数及慢收敛问题,可能产生路由环路,降低网络效率。
(3)使用固定的跳数作为路由花费的度量方式。由于跳数仅是对网络的响应能力和容量的粗略估计,因此使用跳数有时并不能选出具有最小延迟或是最高带宽的路由。
(4)路由器之间的同步问题导致网络的周期性拥塞。
针对上述存在的这些问题,可以考虑从以下两个方面加以解决:
(1)根据网络的实际情况仔细设计无限值的大小。无限值设计得太大,则当存在路由环路时,路由稳定的时间会增大,网络的效率也会降低。但是无限值也不能设计得太小,如果设计得太小,则协议在实际应用中就会变得毫无用处。因此RIPng比较适合于中等规模的网络,而且也比较适合于网络拓扑结构经常发生变化的网络,这是因为路由表的更新是增量进行的,而且选路不需要进行复杂的运算。
(2)增大报文广播定时器周期的随机性。RIPng中定时器的随机时间太短,一组路由器经过多次报文交换后,它们的周期会逐渐相同,从而导致了这组路由器之间的同步。解决这个问题的关键在于增加更新周期定时器中的随机部分,扩大不同路由器之间周期的差别,从而预防或中止路由器之间的同步现象。
对于RIPng中存在的其他一些问题,也有很多解决方案,但是这些方案实现起来很困难,并且是以牺牲RIPng协议的简单性为代价的,因此实践中应做适当的权衡。另外这些改进措施目前并不是标准协议的一部分,因此并不是所有的路由器都会支持这些功能。
6 RIPng的发展趋势
RIPng是随着IPv6的产生而产生的,因此RIPng的使用和推广也取决于IPv6的应用时间。由于市场的影响以及超网编址、CIDR技术的产生,大大推迟了IP地址耗尽的时间,因此IPv6迄今为止尚未得到广泛的应用。但是随着未来因特网的进一步发展,网络业务量的不断增加,IPv6的使用是不可避免的。因此包括RIPng在内的下一代路由器的实现就已经被提到议事日程了。尽管新的IGP如OSPF,要比RIP优越得多,但是RIP在IPv4网络仍然被广泛使用,这是因为RIP有其他IGP所不具备的优点。在一个中等规模的网络中,RIP非常容易配置,而且需要使用的带宽要比OSPF少得多,网络的维护和管理也相对简单。因此可以预见,未来的IPv6网络中RIPng还将被广泛使用。IETF已经为RIPng制定了相关的标准,随着IPv6试验网的展开,RIPng也将在实践中逐步完善。由于RIPng协议与RIP相比改动不大,因此只要对现有设备进行适当改造就可以支持RIPng。目前国外已经出现商用的支持RIPng路由器产品,距离IPv6路由器的大规模产业化只是一个时间问题。
参 考 文 献
[1] Malkin G . RIPng for IPv6, RFC 2080. http://www.ietf.org/rfc/rfc2080.txt,2003,03
[2] Malkin G . RIPng Protocol Applicability Statement,RFC 2081. http://www.ietf.org/rfc/rfc2081.txt,2003,03
[3] Huitema C . 陶文星译 . 因特网路由技术. 北京: 清华大学出版社, 1998,48-74
曲 军,硕士研究生,主要研究方向为第三代移动通信。
李 彤,教授,博士,主要研究方向为信息处理和通信网络。