如前所述,使用距离-向量路由协议的路由器必须周期性地把路由表的内容发送给它的直接相邻路由器。路由表中含有路由器与所知目的地之间的距离信息。这些目的地可以是主机、打印机或其他的网络。
每个接收者给表加上一个距离向量,也就是,它自己的距离“值”,然后把改变了的表转发给它的直接相邻路由器。这个过程无方向地在相邻者之间进行。图3使用简单的R I P互联网络显示了直接相邻者概念。
图3中有4个路由器。网关路由器和其他每一台路由器互联。它必须和这些路
图3 每个Rip节点把它的路由表内容
路由器交换路由信息。路由器A、B和C只有一条连接至网关。因此,它们只能和网关直接交换信息。它们可以通过共享网关的信息来学习到其他主机的信息。表1显示了其他三台路由器中路由表的简略内容。这些信息与网关路由器共享。
表1 路由表内容
网关路由器使用此信息建造自己的路由表。路由表中的简略内容如表2所示。
表2 网关路由器路由表内容
表2中的路由信息通过路由信息更新报文和网络中的其他路由器共享。这些路由器使用这些信息来修正自己的路由表。表3列出了路由器A在和网关共享路由信息之后的路由表内容。
表3 路由器A的路由表内容
路由器A知道网关有一跳的距离。因此,就知道了1 9 2 . 1 6 8 . 1 2 5 . x和1 9 2 . 6 8 . 2 5 4 . x主机离网关也有一跳距离,把这两个数加起来,得到每台机器的距离是两跳。这个高度简化的一步步过程导致每个路由器向其他路由器学习到信息并得到关于网络的累积视图及源和目的设备之间的距离。
2.1 计算距离向量
距离-向量路由协议使用度量来记录路由器与所有知道的目的地之间的距离。这个距离信息使路由器能识别至网络中某个目的地的最有效下一跳。
在RFC 1058 RIP中,有一个单一的距离-向量度量:跳数。R I P中缺省的跳度量为1。因此,对于每一台接收和转发报文的路由器而言,R I P报文数量域中的跳数递增1。这些距离度量用于建造路由表。路由表指明了一个报文以最小耗费到达其目的地的下一跳。
早一些私有的类R I P路由协议使用1作为惟一支持的每一跳耗费。RFC 1058 RIP保留了这个习惯作为缺省的跳数值,但提供给路由器的治理者选择更大耗费值的能力。这些值对于区分不同性能的链路是有好处的。这些值可以是不同网络链路(比如区分5 K b p s线路和T 1私有线路)带宽或者甚至是新路由器与旧模型之间的性能差异。
典型情况下,耗费1分配给和其他网络相连的路由器端口。这一点显然来源于在RFC 1058 之前,每一跳的耗费缺省值为1且不能被改变时的情形。在相对小的由同构传输技术组成的网络中,设置所有的端口耗费为1是合情合理的。图4显示了这一点。
路由器治理员可以改变缺省的度量。比如,治理员可以增加到其他路由器的低速链路的度量。虽然这样可以更准确地表示到一个给定目的地的耗费和距离,但并不建议这样做。设置比1大的度量值使报文到达最大跳数1 6变得更轻易!图5显示了增大路由度量会使路由很快变为无效。
图5对图4中给出的广域网进行了一点改动。这个图为图4中的拓扑加入了低速冗余链路。网络治理员,为了保证可选路由保持其状态,把这些可选路由的度量值设为1 0。这些更高的耗费使得路由选择趋向于更高带宽的T 1传输线路。在其中一条T 1线路发生故障时,互联网络能继续保持工作正常,虽然由于5 6 K b p s备份线路的可用带宽更低而造成性能降低。图6给出了当网关与路由器之间的T 1线路发生故障时,互联网络如何反应的情况。
图4 具有相同耗费的同构网络
图5 改变跳数以区分基本路由和可选路由图6 跳数很快地加起来,但是网络仍保持工作
图6 跳数很快的地加起来,但是网络仍保持工作
可选的5 6 K b p s传输线路成为路由器A与其他网络部分进行通信的惟一路径。路由器A的路由表,在网络收敛于新的拓扑之后,其内容汇总在表4中。
表4 具有链路故障的路由器A的路由表内容
虽然更大的路由耗费能更准确地反映这些可选路由提供的低带宽,但它会引入不必要的路由问题。在图7中,两条T 1线路发生故障,因此,使得两条可选路由同时变为活跃。
由于两条可选链路具有耗费1 0,它们同时活跃导致一条路由耗费大于1 6。有效的R I P跳数范围是从0到1 6,1 6代表不可达路由。因此,假如一条路由的度量(或耗费)超过1 6,路由就被公布为无效,一个通知报文(触发更新)就会发送给所有直接相邻的路由器。
显然,这个问题可以让缺省耗费等于1来避免。假如绝对需要增加一个给定跳的耗费度量,就应该很小心地选择新的耗费值。网络中任何给定源和目的对之间的路由耗费总和不应超过1 5。表5显示了又一条链路故障对路由器A的路由表的影响。
图7 跳数会很快加到16
表5 具有两条链路故障的路由器A的路由表内容
从表5中很明显地看出,路由器A和C之间的路由耗费超过1 6,所有的表项声明为无效。路由器A仍能和路由器B通信,因为那条路由的总耗费仅为11。
2.2 更新路由表
R I P为每个目的地只记录一条路由的事实要求R I P积极地维护路由表的完整性。通过要求所有活跃的R I P路由器在固定时间间隔广播其路由表内容至相邻的R I P路由器来做到这一点,所有收到的更新自动代替已经存储在路由表中的信息。R I P依靠3个计时器来维护路由表:
? 更新计时器
? 路由超时计时器
? 路由刷新计时器更新计时器用于在节点一级初始化路由表更新。每个R I P节点只使用一个更新计时器。相反的,路由超时计时器和路由刷新计时器为每一个路由维护一个。
如此看来,不同的超时和路由刷新计时器可以在每个路由表项中结合在一起。这些计时器一起能使R I P节点维护路由的完整性并且通过基于时间的触发行为使网络从故障中得到恢复。
1. 初始化表更新R I P路由器每隔3 0秒触发一次表更新。更新计时器用于记录时间量。一旦时间到,R I P节点就会产生一系列包含自身全部路由表的报文。这些报文广播到每一个相邻节点。因此,每一个R I P路由器大约每隔3 0秒钟应收到从每个
相邻R I P节点发来的更新。注重在更大的基于R I P的自治系统中,这些周期性的更新会产生不能接受的流量。因此,一个节点一个节点地交错进行更新更理想一些。R I P自动完成更新,每一次更新计时器会被复位,一个小的、任意的时间值加到时钟上。
假如更新并没有如所希望的一样出现,说明互联网络中的某个地方发生了故障或错误。故障可能是简单的如把包含更新内容的报文丢掉了。故障也可能是严重的如路由器故障,或者是介于这两个极端之间的情况。显然,采取合适的措施会因不同的故障而有很大区别。由于更新报文丢失而作废一系列路由是不明智的(记住,R I P更新报文使用不可靠的传输协议以最小化开销)。因此,当一个更新丢失时,不采取更正行为是合理的。为了帮助区别故障和错误的重要程度,R I P使用多个计时器来标识无效路由。
2. 标识无效路由
有两种方式使路由变为无效:
? 路由终止。
? 路由器从其他路由器处学习到路由不可用。在任何一种情形下,R I P路由器需要改变路由表以反映给定路由已不可达。一个路由假如在一个给定时间之内没有收到更新就中止。比如,路由超时计时器通常设为1 8 0秒。当路由变为活跃或被更新时,这个时钟被初始化。
1 8 0秒是大致估计的时间,这个时间足以令一台路由器从它的相邻路由器处收到6个路由表更新报文(假设它们每隔3 0秒发送一次路由更新),假如1 8 0秒消逝之后,R I P路由器没收到关于那条路由的更新,R I P路由器就认为那个目的I P地址不再是可达的。因此,路由器就会把那条路由表项标记为无效。通过设置它的路由度量值为1 6来实现,并且要设置路由变化标志。这个信息可以通过周期性的路由表更新来与其相邻路由器交流。
注重对于R I P节点而言,1 6等于无穷。因此,简单的设置耗费度量值为1 6能作废一条
路由。
接到路由新的无效状态通知的相邻节点使用此信息来更新它们自己的路由表。这是路由变为无效的第二种方式。
无效项在路由表中存在很短时间,路由器决定是否应该删除它。即使表项保持在路由表中,报文也不能发送到那个表项的目的地址:R I P不能把报文转发至无效的目的地。
3. 删除无效路由
一旦路由器熟悉到路由已无效,它会初始化一个秒计时器:路由刷新计时器。因此,在最后一次超时计时器初始化后1 8 0秒,路由刷新计时器被初始化。这个计时器通常设为9 0秒。
假如路由更新在2 7 0秒之后仍未收到( 1 8 0秒超时加上9 0秒路由刷新时间),就从路由表中移去此路由(也就是刷新)。而为了路由刷新递减计数的计时器称为路由刷新计时器。这个计时器对于R I P从网络故障中恢复的能力绝对必要。
主动和被动站点
注重到为了使R I P互联网络正常工作,网络中的每一个网关必须参与进去这一点很重要。参与可以是主动参与也可以是被动参与,但所有的网关必须参与。主动节点是那些主动地进行共享路由信息的节点。它们从相邻者处接收更新,并且转发它们的路由表项拷贝至那些相邻节点。
被动站点从相邻者处接收更新,并且使用那些更新来维护它们的路由表。然而被动节点不主动地发布它们自己路由表项的拷贝。被动维护路由表的能力在硬件路由器出现之前的日子里是非凡有用的特性,那时路由是一个运行在U N I X处理器下的后台程序,这样会使U N I X主机上的路由开销达到最小。
2.3 寻址问题
I E T F确保R I P完全向后兼容于所有知道的R I P和路由变体。考虑到这些协议都是高度个体化的,所以开放式的标准R I P没有规定地址类型是必要的。R I P报文中的地址标识域可以包含:
? 主机地址。
? 子网号。
? 网络号。
? 0,指示缺省路由。
这个灵活性暗示了如下事实,R I P答应计算至单独主机的路由,也答应计算至包含大量主机的网络的路由。为了适应这一操作中的地址灵活性,R I P节点当转发报文时使用最非凡的可用信息。比如,当R I P路由器收到一个I P报文时,必须查看目的地址。它试图把这个地址与路由表中的目的地址作匹配。假如它不能找到那个目的地主机地址,就会检查目的地址是否能和一个已知的子网或网络号进行匹配。假如在这一级也不能进行匹配,R I P路由器会使用缺省路由来转发报文。
1. 路由至网关
到本章的这时为止,R I P路由表中的项一直假设为至个别主机的路由。这个简单的假设可以更好地描述路由原本的工作方式。现在,网络已变得太大,网络内有很多主机,记录到主机的路由是不现实的。基于主机的路由不必要地扩大了路由表,并且减慢了路由表中的路由速度。
在现实世界中,路由计算的是到网络的地址而非到主机的地址。比如,任一网络(子网)上的每一台主机可以通过相同的网关访问,路由表能简单地把网关定义为目的I P地址。所有寻址到那个网络或子网的报文可以转发至网关。之后网关承担把报文转发至最终目的地的责任。图8显示了这一点:它保留了前面一些图的拓扑结构,但使用了更常规的I P地址。
图8 RIP节点能把报文发送至网关
在图8中,主机1 7 2 . 3 1 . 2 5 4 . 5要传输一个I P报文至主机1 9 2 . 1 6 8 . 1 2 5 . 1 0。这个地址对路由器C 而言是不可知的。路由器检查子网掩码2 5 5 . 2 5 5 . 2 5 5 . 0 。通过子网掩码路由器得出1 9 2 . 1 6 8 . 1 2 5是一个子网号。更重要的是,路由器C知道一条到那个子网的路由。路由器C认为子网上的网关路由器知道如何到达那个主机。因此,路由器C把报文转发至网关。这种方法要求主机只被与其最近的路由器所知,而不需要使整个网络中的路由器都知道。图8中的虚线显示了I P报文行程的两部分:从路由器C到路由器A,再从路由器A到主机1 9 2 . 1 6 8 . 1 2 5 . 1 0。
注重RIP不支持可变长子网掩码(VLSM)。因此每个网络只能有一个掩码。一个网络包括多个子网是非常可能的,并且每个网络有自己的子网地址,这些子网地址使用相同长度的掩码。RIP也被称为“有类的”路由协议,因为它只支持基于有类的IPv4地址。
2. 网关之间的路由
在前一节所述的情况下,存在潜在的路由问题。假如路由器C不知道目的I P地址的子网掩码,并且地址的主机部分不为0,它就不能确定地址是子网地址还是主机地址,因此报文被认为不可转发而丢弃。
为了避免模糊性,至子网的路由不被广播到包括子网的网络之外。这个子网边界上的路由器作为网关;它把每个子网看作单独的网络。R I P更新在子网内彼此直接相邻的路由器之间进行,但是网络的网关只把网络地址广播给位于其他网络中的相邻网关。
这样做的实际含义是边界网关会向它的相邻者发送不同的信息。子网化网络内的相邻路由器会收到包含与发送者网关直接相连的子网列表的更新报文,路由项会列出每个子网的号。
网络之外的直接相邻者会收到只包含一个路由项的更新报文,那一项压缩包含了网络内所有子网的每一台主机。传输的度量耗费和到达网络的耗费相联系,而不包括网络内的跳数耗费。以这种方式,远端的R I P路由器会认为寻址到那个子网内任何主机的报文可以通过网络的边界网关路由器到达。
3. 缺省路由
I P地址0 . 0 . 0 . 0用于描述缺省路由。非常类似于子网可以汇聚为至网关路由的方式,缺省路由用于路由至多个没有明确定义和描述的网络。惟一的要求是在这些网络之间必须有一个网关知道如何处理这些产生的报文。
创建缺省路由,R I P需为地址0 . 0 . 0 . 0创建一项。这个非凡地址被看作任何其他的目的I P地址。下一跳应该为相邻网关路由器的I P地址,这个路由项的使用同其他项的使用一样,但有一个重要的例外:在报文的目的地址不能和路由表中任何其他项匹配时才使用缺省路由。
表6显示了带有缺省路由的路由器A中路由表的简略内容。在这个表中,只明确标识有一台主机。任何其他局部产生的传输请求被自动转发至网关路由器。
表6 带缺省路由的路由器A的路由表内容