RIP-2协议
一九九八年十二月
目录
第一章 RIP协议简介 3
第二章 V-D算法的介绍 4
1 路由表的建立 4
2 距离向量算法 5
第三章 协议中的特殊处理 8
1 对相同路由开销的的处理 8
2 对过时路由的处理 8
3 布局改变时的处理 9
第四章 RIP协议的实现 10
第五章 传统RIP协议 12
1 RIP协议的报文格式 12
2 协议处理 14
第六章 RIP-2的对拨号网的支持 16
1 对拨号网路由的处理 16
2 报文格式的扩展 17
第七章 RIP-2和其它路由协议的配合 18

第一章 RIP协议简介
路由器的关键作用是用于网络的互连,每个路由器与两个以上的实际网络相连,负责在这些网络之间转发数据报。在讨论IP进行选路和对报文进行转发时,我们总是假设路由器包含了正确的路由,而且路由器可以利用ICMP重定向机制来要求与之相连的主机更改路由(具体请看IP部分的相应章节)。但在实际情况下 ,IP进行选路之前必须先通过某种方法获取正确的路由表。在小型的、变化缓慢的互连网络中,管理者可以用手工方式来建立和更改路由表。而在大型的、迅速变化的环境下,人工更新的办法慢得不能接受。这就需要自动更新路由表的方法,即所谓的动态路由协议,RIP是其中最简单的一种。
RIP(route information protocol)协议是基于V-D算法(又称为Bellman-Ford算法)的内部动态路由协议。V-D是Vector-Distance的缩写,因此V-D算法又称为距离向量算法。这种算法在ARPARNET早期就用于计算机网络的路由的计算。RIP协议在目前已成为路由器、主机路由信息传递的标准之一,就因为这个原因,RIP协议被大多数IP路由器商业卖主广泛使用。
先大致解释一下什么是内部路由协议。由于历史的原因,当前的INTERNET网被组成一系列的自治系统,各自治系统通过一个核心路由器连到主干网上。而一个自治系统往往对应一个组织实体(比如一个公司或大学)内部的网络与路由器集合。每个自治系统都有自己的路由技术,对不同的自治系统路由技术是不相同的。用于自治系统间接口上的单独的协议称为外部路由器协议,简称EGP(Exterior Gateway Protocol)。用于自治系统内部的路由协议称为内部路由器协议,简称IGP(Interior Gateway Protocol)。 内部路由器与外部路由器协议EGP不同,外部路由协议只有一个,而内部路由器协议则是一族。各内部路由器协议的区别在于距离制式(distance metric, 即距离度量标准)不同,和路由刷新算法不同。RIP协议是最广泛使用的IGP之一,著名的路径刷新程序Routed便是根据RIP 实现的。RIP协议被设计用于使用同种技术的中型网络,因此适应于大多数的校园网和使用速率变化不是很大的连续线的地区性网络。对于更复杂的环境,一般不使用RIP协议。
在实现时,RIP作为一个系统长驻进程(daemon)而存在于路由器中,它负责从网络系统的其它路由器接收路由信息,从而对本地IP层路由表作动态的维护,保证IP层发送报文时选择正确的路由,同时广播本路由器的路由信息,通知相邻路由器作相应的修改。RIP协议处于UDP协议的上层(如图1.1),RIP所接收的路由信息都封装在UDP的数据报中,RIP 在520号端口上接收来自远程路由器的路由修改信息,并对本地的路由表做相应的修改,同时通知其它路由器。通过这种方式,达到全局路由的有效。

RIP协议分为传统RIP协议、需求RIP协议(Demand RIP)和触发RIP,而传统RIP协议又分为RIP-1,和RIP-2两个版本。需求RIP 协议和触发RIP协议与传统RIP协议的区别在于需求RIP协议和触发RIP协议支持对拨号网的路由的维护,增添了几种相应的报文命令,增加了报文发送确认方式。quidway2501上目前的RIP-2不是采取需求RIP协议和触发RIP的方式,但为了支持拨号网的路由的维护2,也汲取了这两种协议的一些处理方式。其中主要改进在于对拨号网的路由进行处理时,并不象对局域网的路由一样设置一定的生存周期,当然为此而付出的代价也是很大的。
第二章 V-D算法的介绍
路由表的建立
IP路由表需要一个建立过程,它的建立过程指的是它的初始化过程。任何路由器启动时,都必须首先获取一个初始路由表。不同的网络操作系统,获取初始路由表的方式不同,总的来说,有三种方式。第一种,路由器系统启动时,从外存读入一个完整的寻径表,长驻内存使用;系统关闭时再将当前路由表(可能经过刷新),写回外存,供下次使用。第二种,系统启动时,只提供一个空表,通过执行显式命令(比如批处理文件中的命令)来填充。第三种,系统启动时,从与本路由器直接相连的各网络地址中,推导出一组初始路由,当然通过初始路由只能访问相连网上的主机。显见,无论哪种情况,初始路由表总是不完善的,需要不断地运行过程中加以补充,这就是路由表的刷新。RIP正是用于路由表的维护和刷新,RIP协议中的路由刷新算法是距离向量算法,它采取的路由表的初始化方式是上述三种中的最后一种。
距离向量算法
距离向量算法的思想很简单:所有参加RIP协议的路由器周期性地向外广播路由刷新报文,主要内容是由很多路由项(entry)组成的路由刷新报文。对路由来说,最主要的内容是目的地址和下一跳地址(next hop)。对动态路由协议来说,为了找到本协议概念中的最佳路由,还必须注意路由的开销(metric)。所以路由项主要包括了目的地址、下一跳地址和路由开销。其他的如路由标记(tag)等内容在讲报文格式时,将具体讲到。
在设计时,每个路由器的另外RIP管理了一个路由数据库,该路由数据库为系统中所有可能的信宿包含一个路由项,并为每个信宿保留如下信息:
目的地址:在算法的IP实现中,这指的是主机或网络的IP 地址。
下一跳地址:到信宿的路由中的第一个路由器。
接口:用于到下一跳物理网络。
metric值:一个数,指明本路由器到信宿的开销。
定时器:路由项最后一次被修改的时间。
路由标记:区分路由为内部路由协议的路由还是外部路由协议的路由的标记。
数据库由与系统直接相连的实体的描述初始化,通过从相邻路由器受到的报文修改维护。
路由器间交换的最重要的信息是修改报文,参加路由维护计划的路由器发送当前存在于实体的描述路由数据库的路由修改报文。仅通过相邻路由器间交换路由信息是可以维护整个系统的最佳路由的,这在接下来的讨论中会逐步得到证明。
距离向量算法总是基于一个这样的事实:路由数据库中的路由已是目前通过报文交换而得到的最佳路由。同时,报文交换仅限于相邻的实体间,也就是说,实体共享同一个网络。当然,要定义路由是最佳的,就必须有衡量的办法,这就用到前面所说的“metric”。RIP简单的网络中,通常用可行路由所经的路由器数简单地计算metric值。在复杂的网络中,metric一般代表该路由传输数据报的延迟或其它发送开销。
令D(i,j)代表从实体i到实体j的最佳路由的metric值,d(i,j)代表从i直接到j的开销,因为开销是可加的,算法中最佳路由如此获取表示:
D(i,i)=0, 对所有的i
D(i,j)=MIN[d(i,j)+D(k,j), 当i不等于k时实体i从相邻路由器k收到k到j的开销的估计D(i,j),i将D(i,j)加上i到k的开销估计d(i,j),i比较从所有相邻路由器得到的数值,取得最小数,就得到了它到j的最佳路由。
具体地说,距离向量算法如下所述:
首先,路由器刚启动时,对距离向量路由表(V-D路由表)进行初始化,该初始化路由表包含所有去往与本路由器直接相连的网络的路径。由于去往直接相连的网络不经过中间路由器,所以初始化的V-D路由表中的各路由的距离均为0。图2.1初始V-D路由表的一个示例。

信宿网 距离 路径
10.0.0.0 0 直接
20.0.0.0 0 直接


(a)
(b)
图2.1
(a) 路由器G1的初始V-D路由表 (b)路由器G2附近的网络拓扑
图2.1的“信宿网”域含信宿网IP地址。
然后,各路由器周期性地向外广播其V-D路由表内容。与某路由器直接相连的(位于同一物理网络)的路由器收到该路由表报文后,根据此报文对本地路由表进行刷新。刷新时,路由器逐项检查来自相邻路由器的V-D报文,遇到下述表目之一,须修改本地路由表(假设路由器Gi收到路由器Gj的V-D报文):
Gj列出的某表目Gi路由表中没有。则Gi路由表中须增加相应表目,其“信宿”是Gj表目中的信宿,其“路径”为“Gj”(即下一路由器为Gj)。
Gj去往某信宿的距离值比Gi去往该信宿的距离减1还小。
这种情况说明,Gi去往某信宿若经过Gj,距离会更短。则Gi修改本表目,其中“信宿”域不变,“距离”为Gj表目中距离加1,“路径”为“Gj”。
Gi去往某信宿的路由经过Gj,而Gj去往该信宿的路由发生变化。
这里分两种情况:
Gj的V-D表不再包含去往某信宿的路由,则GI中相应路由须删除。
Gj的V-D表中去往某信宿的路由距离发生变化,则Gi中相应表目“距离”须修改,以Gj中的“距离”加1取代原来的距离。
图2.2中对以上描述给出直观的说明,其中Gi、Gj为相邻路由器。




图2.2
(a)路由器Gi原路由表;(b)路由器Gj广播的V-D报文;(c)路由器Gj刷新后的路由表
图2.2中,“ ,所指示为须刷新的表目,“ ”为引起刷新的表目,,”为刷新后的表目。
这里要特别强调的是,V-D算法的路由刷新发生在相邻路由器之间,所以V-D报文不一定以广播方式发送出去,一种比较优化的思想是路由器直接向相邻路由器发送V-D报文,不必采用广播方式。
第三章 协议中的特殊处理
对相同路由开销的的处理
当修改报文中的路由开销和路由数据库的路由开销相同时,不修改路由数据库中的路由。这种情况对应在实际网络中的问题,是指网络中出现了多条开销相同的路由时,路由如何选择的问题。在这种情况下,采用先入为主的原则,即采用以前的路由。这符合处理方式的简单性和实用性。
对过时路由的处理
根据V-D算法,一条路由只在出现一条更优路由时才被刷新,否则,将继续保留在路由数据库中。这就忽略了这样一种情况,即当某条路由突然崩溃,需要选择一条新的路由来代替现存路由。但这靠V-D中的刷新算法来是不能得到解决的。
针对这种情况,在实际应用中,RIP规定,所有机器对其路由数据库中的每一表目都设置一个时钟,每增加一个新表目,就相应设置一个新时钟。在收到V-D报文中假如有关于此路由的表目,则将时钟清零,重新记时。假如在规定时间内,一直未收到该路由的刷新信息,时钟期满,则将该路由从路由数据库中删除。
如果到指定的信宿有其它路由,则新的路由将从进一步收到的定时刷新报文中获得,否则去往原信宿的路由不存在。
布局改变时的处理
在上一章所述的V-D算法中,有一个严重的问题,即“慢收敛”(slow convergence)问题,又叫“计算到无穷”(count to infinity)。
如图3.1(a) 中所示正常网间网拓扑结构,从G1可直接到达网络Net1,从G2经G1(距离为1)可到达Net1.正常情况下,G2收到G1的V-D报文后,会建立一条路由(1,G1,1).
现在假设从G1到Net1的路由因故障而崩溃,但G1依然能正常工作.G1一旦检测到不可达,会立即将原来的路由废除(将距离改为16).然后会出现两种可能:
第一种,在收到来自G2的V-D报文之前,G1将修改后的路由信息广播出去,于是G2将修改其路由数据库,将原来去往Net1的路由(1,G1,1)删除.这是完全正常的.
第二种,在G1发送新的报文之前,G2广播自己的V-D报文.该报文中必然有一条路由(1,1)表目,说明从G2出发,经1个驿站可以到达Net1.G1收到该报文 
后,显然会根据此表目更改自己的路由表,产生关于Net1的新路由(1,G2,2).于是G1与G2间产生寻径环,如图3.1(b)所示.
上述路由环会通过G1和G2间的不断V-D报文交换而解除,但解除的过程是非常缓慢的:出现路由环后,在下一轮路由广播中,G1将向G2通告(1,2)表目,G2收到此表目修改本地路由数据库,将去往Net1的路由改为(1,G1,3).然后,G2向G1通告(1,3)表目,G1将去往Net1的表目改为(1,G2,4)...如此下去,直到路由长度变为16.也就是说,至少要经过7番来回(至少30*7秒),路由环才能解除.这就是所谓满收敛问题.
其实这只是一种非常简单的情况,路由环也可以建立在不相邻的路由器之间.对于这种情况,如果减小路由的最大长度,对解决慢收敛问题将有所帮助,但这会限制网点的规模,无疑是不行的.
对于这种问题,有很多种办法,在本协议的实现中,用的是水平分割(Split Horizon)和毒性逆转法(Poison Reverse),并在毒性逆转时采用触发刷新(Triggered Update).具体实现是这样的:
水平分割:当路由器从某个网络接口发送RIP路由刷新报文时,其中不包含从该接口获取的路由信息.
毒性逆转:某路径崩溃后,最早广播此路由的路由器将原路由继续保留在若干报文中,但指明该路由为无限长.
触发刷新:一旦检测到路由崩溃,立即广播路由刷新报文,而不等到下一刷新周期.
根据路由环产生的过程,可知通过水平分割法对解决两路由器之间形成的路由环是极为有效的方法.毒性逆转法可解决多路由器之间的路由环问题.使用触发刷新,显然可以加快新路由的有效刷新.
更有这样一个事实,从本接口发出的路由再从别的接口收到,对本地路由表是不会帮助的,正是基于这种考虑,水平分割是在RIP协议的实现中是必不可少的.对于这一点在后来的讨论中会更清楚地得到认识.
第四章 RIP协议的实现
RIP根据V-D算法的特点,将协议的参加者分为主动机和被动机两种。主动机主动向外广播路由刷新报文,被动机被动地接收路由刷新报文。一般情况下,主机作为被动机,路由器则既是主动机又是被动机,即在向外广播路由刷新报文的同时,接受来自其它主动机的V-D报文,并进行路由刷新。
RIP规定,路由器每30秒向外广播一个V-D报文,报文信息来自本地路由表。RIP的V-D报文中,其距离以驿站计:与信宿网络直接相连的路由器规定为一个驿站,相隔一个路由器则为两个驿站……以此类推。一条路由的距离为该路由(从信源机到信宿机)上的路由器数。为防止寻径环长期存在,RIP规定,长度为16的路由为无限长路由,即不存在的路由。所以一条有效的路由长度不得超过15。正是这一规定限制了RIP的使用范围,使RIP局限于中小型的网络网点中。
为了保证路由的及时有效性,RIP采用触发刷新技术和水平分割法。当本地路由表发生修改时,触发广播路由刷新报文,以迅速达到最新路由的广播和全局路由的有效。水平分割法是指当路由器从某个网络接口发送RIP 路由刷新报文时,其中不包含从该接口获取的路由信息。这是由于从某网络接口获取的路由信息对于该接口来说是无用信息,同时也解决了两路由器间的慢收敛问题。
对于局域网的路由,RIP规定了路由的超时处理。主要是考虑到这样一个情况,如果完全根据V-D算法,一条路由被刷新是因为出现一条路由开销更小的路由,否则路由会在路由表中一直保存下去,即使该路由崩溃。这势必造成一定的错误路由信息。为此,RIP规定,所有机器对其寻径表中的每一条路由都设置一个时钟,每增加一条新路由,相应设置一个新时钟。在收到的V-D报文中假如有关于此路由的表目,则将时钟清零,重新计时。假如在120秒内一直未收到该路由的刷新信息,则认为该路由崩溃,将其距离设为16,广播该路由信息。如果再过60后仍未收到该路由的刷新信息,则将它从路由表中删除。如果某路由在距离被设为16后,在被删除前路由被刷新,亦将时钟清零,重新计时,同时广播被刷新的路由信息。至于路由被删除后是否有新的路由来代替被删除路由,取决于去往原路由所指信宿有无其它路由。假如有,相应路由器会广播之。机器一旦收到其它路由的信息,自然会利用V-D算法建立一条新路由。否则,去往原信宿的路由不再存在。
RIP启动和运行的整个过程如下所描述:
某路由器刚启动RIP时,以广播的形式向相邻路由器发送请求报文,相邻路由器的RIP收到请求报文后,响应请求,回发包含本地路由表信息的响应报文。RIP收到响应报文后,修改本地路由表的信息,同时以触发修改的形式向相邻路由器广播本地路由修改信息。相邻路由器收到触发修改报文后,又向其各自的相邻路由器发送触发修改报文。在一连串的触发修改广播后,各路由器的路由都得到修改并保持最新信息。同时,RIP每30秒向相邻路由器广播本地路由表,各相邻路由器的RIP在收到路由报文后,对本地路由进行的维护,在众多路由中选择一条最佳路由,并向各自的相邻网广播路由修改信息,使路由达到全局的有效。同时RIP采取一种超时机制对过时的路由进行超时处理,以保证路由的实时性和有效性。RIP作为内部路由器协议,正是通过这种报文交换的方式,提供路由器了解本自治系统内部个网络路由信息的机制。
RIP-2支持版本1和版本2两种版本的报文格式。在版本2中,RIP还提供了对子网的支持和提供认证报文形式。版本2的报文提供子网掩码域,来提供对子网的支持;另外,当报文中的路由项地址域值为0xFFFF时,默认该路由项的剩余部分为认证。RIP2对拨号网的支持则是参考需求RIP和触发RIP的形式经修改而加入的新功能。这时,我们只是要求在拨号网拨通之后对路由进行30秒一次的广播,而在没拨通时并不作如是要求,这是根据具体情况变通的结果。
第五章 传统RIP协议
正如前几章所说,RIP协议是来允许路由器(或相关产品)通过基于IP网络交换有关计算路由信息的一种距离向量协议。RIP传送路由信息给信宿,信宿可以是路由器和主机,当信宿是主机时,主机必须有多个接口。
RIP作为一个系统常驻进程(daemon)存在,它负责从网络信筒中其它路由器接收路由更改信息,从而对本地IP层的路由进行动态地维护,保证IP层发送报文时选择正确的路由。RIP协议处于UDP协议的上层,RIP所接收的路由修改信息都封装在UDP的数据报中,RIP在520号端口上接收来自远程路由器的路由修改信息,并对本地的路由表做相应的修改,同时通知其它的路由器,通过这种方式,达到全局路由的的有效。
RIP协议的报文格式本协议在实现过程中支持RIP Version1和RIP Version2两种格式的报文。RIP数据报一共有五类,由Command 域确定数据报的类型,如图4.1所示。
类型 意义
路径信息请求路径信息响应过时过时留作Sun微系统公司内部使用
图4.1 RIP报文类型
其中第1、2类报文是最重要的一对,后者是从发送该报文的路由器的寻径表中取出的V-D报文。各种RIP报文的格式相同,包括一个固定的报头和一个可选的V-D表。其格式如图4.2和图4.3所示,图2是RIP Version 1的报文格式,图3是RIP Version 2的报文格式。
RIP Version1 的报文格式:
RIP Version2的格式:

其中:
(Metric:到下一路由器的权值。
(Address Family Identifier:指示路由项中的地址种类,这里应为2。
(Ip Address:地址域,包括网络类和IP 地址在内,RIP报文中对每一网络共有14个字节的地址空间。
RIP Version 2 报文的特有的一些属性:
(Route Tag:外部路由标记,是表示路由是保留还是重播的属性。它提供一种从外部路由中分离内部路由的方法,用于传播从外部路由器协议(EGP)获得的路由信息。
(Subnet mask:子网掩码,应用于IP地址产生非主机部分地址,为0时表示不包括子网掩码部分,使得RIP能够适应更多的环境。
(Next Hop:下一驿站,可以对使用多路由协议的网络环境下的路由进行优化。
(认证,确认合法的信息包,目前支持纯文本的口令形式。
认证是每一报文的功能,因为在报文头中只提供两字节的空间,而任一合理的认证表均要求多余两字节的空间,故RIP Version 2认证表使用一个完整的RIP路由项。如果在报文中最初路由项Address Family Identifier域的值是0xFFFF,路由项的剩余部分就是认证。包含认证RIP报文路由项采用如下格式:

(组播,为了降低那些没有监听RIP Version 2 报文的主机的不必要的开销,IP多目传送地址被用于定时广播。IP 多目地址是224.0.0.9。为了支持向后兼容,多目地址的使用是可配置的。如果能够多目传送,则它将被支持它所有接口使用。
(管理信息库,允许在路由软件内部对RIP操作进行监听和控制。
如果RIP-2路由器接收RIP-1的请求,它将以RIP-1的响应方式响应。如果路由器被配置成只发送RIP-2报文,它将不响应RIP-1的请求。
协议处理
RIP协议的运行过程就是路由器软件对消息输入和输出处理过程,其输入和输) 出处理大致如下所描述:
(一)输入处理:主要是指路由器协议软件对在520号UDP端口收到的数据报进行的处理。对于输入处理,首先必须先作一定格式检查,检查通过后,再分别对几种输入消息做相应的处理。
请求报文:路由器在开始运行时,为了从邻机处获取路由表的初始值,通常会发一个请求。报文的Command字段为(request)。对所有或部分路由表的请求,一般以广播形式从520号UDP端口发送。实际中,这种请求有两种格式:请求获取路由表的全部和请求获取路由表的某些特定路由项。
路由软件先逐个路由项地处理请求,如果没有任何路由项,也就没有响应;如果请求中恰好只有一个路由项,并且address family identifier为0,metric为16,则表示需要接收方发送所有路由表的请求;除此之外,则是要求部分路由,处理很简单,沿着请求路由项表一个一个看,对于每个路由项,在主机路由数据库中查找,如果找到,则将该路由的metric值填入数据报的metric字段,如果没有,则向其中填16。一旦所有路由项均已处理,将command字段设为响应(response),并将该数据报发回其来自的端口。注意,根据请求是否关于指定的一批目的地,还是关于整个路由表,处理有所不同。如果关于整个路由表,输出作普通的处理即可,包括水平分割和子网隐藏,因此来自路由表的某些路由项将被隐藏;如果是指定路由项,则将查找结果返回,不作水平分割,如果需要还要返回子网信息。
2.响应报文:因为指定查询、路由修改等原因而收到响应。
不论收到什么样的响应,RIP处理程序就开始更新它的路由表。路由表的每一项至少都要包括如下内容:
目的站点的地址;
通往目的站点的量度值;
“下一个路由器”的地址;
“最近更新过”的标志;
几个定时器。
因为处理响应可能修改主机路由表,所以必须作严格的有效性检查。对于
RIP Veon1数据报,对must be zero 域必须进行查零处理,对RIP Version2 数据报则可忽略。数据报验证有效后,还要对其路由项逐个进行验证。全部通过后,我们设置metric = MIN ( metric + cost,16 ),16代表无限长,然后检查是否已有路由到达该地址,如果没有,则加入路由表,但是如果metric是无限长,则不要将其加入路由表;如果现有路由不比新加的路由差,我们也不将其加入路由表。对此,需要执行以下动作:
根据收到的数据报设置目的地和metric
根据数据报的来源主机设置路由器
为该路由设置超时值,如果垃圾回收定时器正在运行,将其停止
设置路由改变标志,给输出进程发信号,触发一次修改如果现存一个路由,首先比较路由器,如果来自同一路由器,对超时值重新进行初始化,然后比较metric。如果数据报来自与现存路由同样的路由器且新的metric值与旧的不同,或者新的比旧的低,进行如下动作:
将新的metric填入,并将该路由器设置为数据报的来源
为此路由初始化超时值
设置路由改变标志,给输出进程发信号,触发一次修改
如果新metric是16,启动删除进程(只是在metric刚刚被设为16时启动)
如果新的metric值与旧的相等,除了重新初始化超时值外什么也不干
(二)输出处理:用于产生包含全部或部分路由表的响应信息的处理,可能由于输入进程发现请求或路由修改而触发。
先看后两种情况下如何选择目的地址。如果一个响应要发送给所有目的地,则响应信息发送给每个点到点连接的网络的对端,而且响应在支持广播的网络上进行广播。但是如果网络不支持广播,或者在沉默的路由器,就有必要指定一张实际的临近主机和路由器表,显式地向每一个发送数据报。触发的修改因为两个方面需要处理:
触发的修改在容量有限或有许多路由器的网络上可能导致格外大的负载,因此协议要求实现方在限制触发式修改出现的频率上采取一定的措施,触发式修改发送后,需要随机地将一个定时器设置成1到5秒,如果在定时器超时前发生其它修改,需要到定时器超时才触发其中之一,然后定时器再随机地设置成1到5秒,触发式修改可能被一般修改所禁止;
触发式修改可能不必包括整个路由表,原则上说,只有改变过的路由才需要包括,作为触发式修改一部分的信息至少包括设置了路由修改标志的路由,也可以包括附加路由和全部路由。如果完整的修改需要多个数据报,则发送全部路由极有可能被打断;而触发式修改处理时,需要产生每个直连网络的信息。产生触发式修改或一般修改时,都需要进行水平分割操作。
如果产生输出的同时也允许输入处理,则必须建立相应的互斥机制,产生触发式修改信息时,路由改变标志不得因处理输入而改变。触发式修改与其它修改的唯一不同之处在于:可能会忽略某些改变过的路由,今后推出的其它机制恐怕要适应触发式修改。
第六章 RIP-2的对拨号网的支持根据前面所说到的RIP协议我们不难看出,RIP进行报文刷新的基础是网络在刷新过程中一直保持连通,否则将有的路由器的报文一直不被收到,最终到达该路由器的路由将被其它路由器因超时而删除,而本路由器到其它路由器的路由亦将由于长期不被刷新而被删除。就这点来说,对于局域网和专线网来说,无疑是可行的;但对于拨号网络(例如X.25网和ISDN网)来说,网络在可以被拨通的情况下并非一直保持连接,自然亦不可能在不需要传送数据时因为要发送RIP报文而每30秒拨通一次网络。同时,路由信息亦可能因提供给拨号网上路由器的带宽不够而传输失败。种种情况表明,前面所描述的RIP协议已远远不够这种需求。
针对这种情况,我对RIP协议的实现作了进一步的改进和扩展,经过扩展和改进后,本文档中描述的RIP协议已不是传统意义上的RIP协议所能概括的了。
对拨号网路由的处理针对拨号网上路由的特点,我们不可能象在局域网和专线网一样在拨号网上对路由进行30秒的定时广播,从而也就决定了我们对拨号网上的路由不能象对局域网上的路由一样进行超时处理。
正是基于这种考虑,为了保证路由的及时性和可行性的考虑,我们规定拨号网上的路由修改报文的发送在如下几种情况下进行:
当收到路由修改的特定的请求时;
当路由数据库被从别的接口收到新路由报文改变时;
当得知某信宿从不可达变成可达时;
当某接口从电路DOWN到电路UP时。
这就存在这样一个问题,RIP报文是通过UDP的520号端口发送的,而UDP是不可靠的传送方式,这显然必须考虑报文传输失败的可能性。为此,我们在传送时采取了报文传送的重发和确认机制。在发送报文时,当发送完请求报文或修改报文后,如果在5秒钟仍未收到信宿回发过来的确认报文,重发请求报文或确认报文。如果在重发后5秒后仍未收到确认报文,则继续重发直到收到信宿的确认报文为止。如果在重发10次后,认为收到信宿的确认报文,则认为传输失败,将对应路由的Metric值设为16。在接收报文时,当收到信源发来的请求或修改报文后,要对收到的报文进行确认,并向原信源发送相应的确认报文。
如果从拨号网上下一驿站路由器收到路由修改报文,则修改报文中的路由项将一直认为是可达的直到某次发送路由报文失败。
拨号网与局域网和专线网对超时处理的不同也体现在路由数据库中。在路由数据库中,路由分为两种,一种是“临时性路由”,一种是“永久性路由”。“临时性路由”针对于局域网路由和广域网专线上的路由。这种路由每30秒广播一次,在一定时间内没有收到路由刷新报文后,进行超时处理。“永久性路由”指的是包括拨号网上的路由,在没有收到刷新报文仍不不进行超时处理,但当对某信宿发送报文失败时则将该路由改为“临时性路由”。另外还有一种情况需要将“永久性路由”改为“临时性路由”,这将在后面说到。
报文格式的扩展为了更好地处理拨号网上的路由刷新,参照RFC/1581/15822091/2092标准,对报文格式进行了的改进和扩充修改。对报文的修改主要是支持三种新的报文分组类型,在报文命令域数值标识:
9---------Update Request 修改请求
10------- Update Response 修改响应
11--------Update Acknowledge 修改确认
同时对各类型报文添加一个报文头:
Update Request (9)
+-----------------------------------------------------------------------------------------+
| Version (1) | must be zero(3) |
+-----------------------------------------------------------------------------------------+
Update Response (10) 和 Update Acknowledge (11)
+------------------------------------------------------------------------------------------+
| Version(1) | Flush (1) | Sequencenumber(2) |
+------------------------------------------------------------------------------------------+
其中Version域指的是各报文的版本号,而不是RIP的版本号,主要是基于向后兼容性考虑,这里必须为 1。
增添Flush域是对路由的及时性的一种考虑。如果对外发送响应报文是在收到请求后发送的,说明信宿有一个从不可达到可达的变化。如果该信宿中还保留有到其它路由器的路由信息,则这些路由信息很可能是过时的,从而需要进行更新。为了更快地更新路由器中的路由信息。在报文中增添一个Flush域,当路由器收到设置了Flush值的修改报文后,要将路由数据库中的原有路由设为“临时性路由”,进行超时处理。Flash域在设置时为 1,在不设置时为 0,取其他值则认为报文非法。
Sequence number是对报文的标记,用于识别各报文的确认报文,但只对发送方有用。对发送方来说,Sequence number不能有相同值,修改报文的Sequence number一般采取以65535为一个轮回的递增方式。而确认报文的Sequence number值取对应修改报文中的响应值。当路由器收到确认报文后,可根据Sequence number 值来确认对应的修改报文已被收到。
第七章 RIP-2和其它路由协议的配合
这里提到与其他路由协议的配合是因为在路由器上往往支持多路由协议,多路由协议的支持就有一个多种路由的选择和配合问题。为了解决这个问题,在路由的参数中引入了优先级(preference)的概念。
各路由协议一般来说都定一个固定的preference值,preference值越小,协议对应的路由的优先级越高。一般情况下路由优先级规定如下:
直接路由 0
OSPF 路由 10
IS-IS的level 1的路由 15
IS-IS的level 2的路由 18
NSFnet主干的SPF路由 19
缺声网关和EGP缺省 20
重定向路由 30
由route socket得到的路由 40
由网管加入的路由 50
路由器发现的路由 55
静态路由 60
Cisco IGRP的路由 80
DCN的hello的路由 90
Berkeley的RIP路由 100
点对点接口聚集的路由 110
down状态的接口路由 120
聚集的缺省路由优先级 130
OSPF的扩展路由 140
BGP的路由 170
EGP的路由 200
路由的优先级的概念是优先级高的新路由可替代优先级低同信宿的路由,反之,则不然。不过,在具体实现中,有可能将对其作一定的改变。如quidway2501下的RIP-2提供了一个改变RIP的路由优先级的命令。通过这个命令可改变RIP路由的优先级。quidway2501的配置静态路由时,也可指定路由的优先级,这是针对具体应用而作的处理。但是我们不鼓励修改优先级。
需要区别的是路由开销(metric)和路由优先级(preference)这两个概念。metric是针对同一种路由协议而言,对不同的协议,由于代表的含义不同,比较不同协议的metric是无意义的,所以要在两条不同协议的同信宿路由中作出选择,只能比较路由的优先级。相反,preference是针对不同协议而言,同协议的路由的优先级是一般情况下一样的,metric这时是在两条同信宿路由中作出选择的标准。