本文摘自笔者编著的《网管员必读――网络基础》(第2版)一书。
9.11.1 RIP路由协议及工作原理
RIP
(
Routing information Protocol
,
路由信息协议
)是应用较早、使用较普遍的内部网关协议(
Interior Gateway Protocol
,
IGP
),适用于小型同类网络的一个自治系统(
AS
)内的路由信息的传递。
RIP
协议是基于距离矢量算法(
Distance Vector Algorithms
,
DVA
)的。它使用
“
跳数
”
,即
metric
来衡量到达目标地址的路由距离。
文档见
RFC1058
、
RFC1723
。它
是一个用于路由器和主机间交换路由信息的距离向量协议,目前最新的版本为
v4
,也就是
RIPv4
。
至于上面所说到的
“
内部网关协议
”
,我们可以这样理解。由于历史的原因,当前的
INTERNET
网被组成一系列的自治系统,各自治系统通过一个核心路由器连到主干网上。而一个自治系统往往对应一个组织实体(比如一个公司或大学)内部的网络与路由器集合。每个自治系统都有自己的路由技术,对不同的自治系统路由技术是不相同的。用于自治系统间接口上的路由协议称为
“
外部网关协议
”
,简称
EGP
(
Exterior Gateway Protocol
);而用于自治系统内部的路由协议称为
“
内部网关协议
”
,简称
IGP
。内部网关与外部网关协议不同,外部路由协议只有一个,而内部路由器协议则是一族。各内部路由器协议的区别在于距离制式(
distance metric,
即距离度量标准)不同,和路由刷新算法不同。
RIP
协议是最广泛使用的
IGP
类协议之一,著名的路径刷新程序
Routed
便是根据
RIP
实现的。
RIP
协议被设计用于使用同种技术的中型网络,因此适应于大多数的校园网和使用速率变化不是很大的连续线的地区性网络。对于更复杂的环境,一般不使用
RIP
协议。
1. RIP工作原理
RIP
协议
是基于
Bellham-Ford
(距离向量)算法,此算法
1969
年被用于计算机路由选择,正式协议首先是由
Xerox
于
1970
年开发的,当时是作为
Xerox
的
“Networking Services
(
NXS
)
”
协议族的一部分。
由于
RIP
实现简单,迅速成为使用范围最广泛的路由协议。
路由器的关键作用是用于网络的互连,每个路由器与两个以上的实际网络相连,负责在这些网络之间转发数据报。在讨论
IP
进行选路和对报文进行转发时,我们总是假设路由器包含了正确的路由,而且路由器可以利用
ICMP
重定向机制来要求与之相连的主机更改路由。但在实际情况下,
IP
进行选路之前必须先通过某种方法获取正确的路由表。在小型的、变化缓慢的互连网络中,管理者可以用手工方式来建立和更改路由表。而在大型的、迅速变化的环境下,人工更新的办法慢得不能接受。这就需要自动更新路由表的方法,即所谓的动态路由协议,
RIP
协议是其中最简单的一种。
在路由实现时,
RIP
作为一个系统长驻进程(
daemon
)而存在于路由器中,负责从网络系统的其它路由器接收路由信息,从而对本地
IP
层路由表作动态的维护,保证
IP
层发送报文时选择正确的路由。同时负责广播本路由器的路由信息,通知相邻路由器作相应的修改。
RIP
协议处于
UDP
协议的上层,
RIP
所接收的路由信息都封装在
UDP
协议的数据报中,
RIP
在
520
号
UDP
端口上接收来自远程路由器的路由修改信息,并对本地的路由表做相应的修改,同时通知其它路由器。通过这种方式,达到全局路由的有效。
RIP
路由协议用
“
更新(
UNPDATES
)
”
和
“
请求(
REQUESTS
)
”
这两种分组来传输信息的。每个具有
RIP
协议功能的路由器每隔
30
秒用
UDP520
端口给与之直接相连的机器广播更新信息。更新信息反映了该路由器所有的路由选择信息数据库。路由选择信息数据库的每个条目由
“
局域网上能达到的
IP
地址
”
和
“
与该网络的距离
”
两部分组成。请求信息用于寻找网络上能发出
RIP
报文的其他设备。
RIP
用
“
路程段数
”
(即
“
跳数
”
)作为网络距离的尺度。每个路由器在给相邻路由器发出路由信息时,都会给每个路径加上内部距离。在如图
9-31
中,路由器
3
直接和网络
C
相连。当它向路由器
2
通告网络
142.10.0.0
的路径时,它把跳数增加
1
。与之相似,路由器
2
把跳数增加到
“ 2”
,且通告路径给路由器
1
,则路由器
2
和
路由器
1
与路由器
3
所在网络
142.10.0.0
的距离分别是
1
跳、
2
跳。
图
9-31 RIP
工作原理示例
然而在实际的网络路由选择上并不总是由跳数决定的,还要结合实际的路径连接性能综合考虑。在如
9-32
所示网络中,从路由器
1
到网络
3
,
RIP
协议将更倾向于跳数为
2
的路由器
1->
路由器
2->
路由器
3
的
1.5Mbps
链路,而不是选择跳数为
1
的
56Kbps
,直接的路由器
1->
路由器
3
路径,因为跳数为
1
的
56K
bps
串行链路比跳数为
2
的
1.5Mbps
串行链路慢得多。
图
9-32
路由选择不仅限于
“
跳数
”
考虑的示例
2. 路由器的收敛机制
任何距离向量路由选择协议(如
RIP
)都有一个问题,路由器不知道网络的全局情况,路由器必须依靠相邻路由器来获取网络的可达信息。由于路由选择更新信息在网络上传播慢,距离向量路由选择算法有一个慢收敛问题,这个问题将导致不一致性产生。
RIP
协议使用以下机制减少因网络上的不一致带来的路由选择环路的可能性。
l
记数到无穷大机制
RIP
协议允许最大跳数为
15
。大于
15
的目的地被认为是不可达。这个数字在限制了网络大小的同时也防止了一个叫做
“
记数到无穷大
”
的问题。
记数到无穷大
机制
的工作原理如下(如图
9-33
所示):
图
9-33
路由器收敛机制示例
(
1
)现假设路由器
1
断开了与网络
A
相连,则路由器
1
丢失了与网络
A
相连的以太网接口后产生一个触发更新送往路由器
2
和路由器
3
。这个更新信息同时告诉路由器
2
和路由器
3
,路由器
1
不再有到达网络
A
的路径。假设这个更新信息传输到路由器
2
被推迟了(
CPU
忙、链路拥塞等),但到达了路由器
3
,所以路由器
3
会立即从路由表中去掉到网络
A
的路径。
(
2
)路由器
2
由于未收到路由器
1
的触发更新信息,并发出它的常规路由选择更新信息,通告网络
A
以
2
跳的距离可达。路由器
3
收到这个更新信息,认为出现了一条通过路由器
2
的到达网络
A
的新路径。于是路由器
3
告诉路由器
1
,它能以
3
跳的距离到达网络
A
。
(
3
)在收到路由器
3
的更新新后,就把这个信息加上一跳后向路由器
2
和路由器
3
同时发出更新信息,告诉他们路由器
1
可以以
3
跳的距离到达网络
A
。
(
4
)路由器
2
在收到路由器
1
的消息后,比较发现与原来到达网络
A
的路径不符,更新成可以以
4
,跳的距离到达网络
A
。这个消息再次会发往路由器
3
,以此循环,直到跳数达到超过
RIP
协议允许的最大值(在
RIP
中定义为
16
)。一旦一个路由器达到这个值,它将声明这条路径不可用,并从路由表中删除此路径。
由于记数到无穷大问题,路由选择信息将从一个路由器传到另一个路由器,每次段数加
1
。路由选择环路问题将无限制地进行下去,除非达到某个限制。这个限制就是
RIP
的最大跳数。当路径的跳数超过
15
,这条路径才从路由表中删除。
l
水平分割法
水平分割规则如下:路由器不向路径到来的方向回传此路径。当打开路由器接口后,路由器记录路径是从哪个接口来的,并且不向此接口回传此路径。
Cisco
可以对每个接口关闭水平分割功能。这个特点在
“non broadcast mutilple access”
(
NBMA
,非广播多路访问)环境下十分有用。在如图
9-34
所示网络
中,路由器
2
通过帧中继连接路由器
1
和路由器
3
,两个
PVC
都在路由器
2
的同一个物理接口(
S0
)中止。如果在路由器
2
的水平分割功能未被关闭,那么路由器
3
将收不到路由器
1
的路由选择信息(反之亦然)。用
“no ip split-horizon”
接口子命令可关闭水平分割功能。
图
9-34
水平分割法原理示例
l
破坏逆转的水平分割法
水平分割是路由器用来防止把一个接口得来的路径又从此接口传回导致的问题的方案。水平分割方案忽略在更新过程中从一个路由器获取的路径又传回该路由器。有破坏逆转的水平分割方法是在更新信息中包括这些回传路径,但这种处理方法会把这些回传路径的跳数设为
16
(无穷)。通过把跳数设为无穷,并把这条路径告诉源路由器,有可能立刻解决路由选择环路。否则,不正确的路径将在路由表中驻留到超时为止。破坏逆转的缺点是它增加了路由更新的的数据大小。
l
保持定时器法
保持定时器法可防止路由器在路径从路由表中删除后一定的时间内(通常为
180
秒)接受新的路由信息。它的思想是保证每个路由器都收到了路径不可达信息,而且没有路由器发出无效路径信息。例如在图
6-32
所示网络
中,由于路由更新信息被延迟,路由器
2
向路由器
3
发出错误信息。但使用保持计数器法后,这种情况将不会发生,因为路由器
3
将在
180
秒内不接受通向网络
A
的新的路径信息,到那时路由器
2
将存储正确的路由信息。
l
触发更新法
有破坏逆转的水平分割将任何两个路由器构成的环路打破,但三个或更多个路由器构成的环路仍会发生,直到无穷(
16
)时为止。触发式更新法可加速收敛时间,它的工作原理是当某个路径的跳数改变了,路由器立即发出更新信息,不管路由器是否到达常规信息更新时间都发出更新信息。
3. RIP报文格式
如图
9-35
所示为
RIP
信息格式。各字段解释如下:
Command
:命令字段,
8
位,用来指定数据报用途。命令有五种:
Request
(请求)、
Response
(响应)、
Traceon
(启用跟踪标记,自
v2
版本后已经淘汰)、
Traceoff
(关闭跟踪标记,自
v2
版本后已经淘汰)和
Reserved
(保留)。
Version
:
RIP
版本号字段,
16
位。
Address Family Identifier
:地址族标识符字段,
24
位。它指出该入口的协议地址类型。由于
RIP2
版本可能使用几种不同协议传送路由选择信息,所以要使用到该字段。
IP
协议地址的
Address Family Identifier
为
2
。
图
9-35 RIP
协议信息格式
Route Tag
:路由标记字段,
32
位,仅在
v2
版本以上需要,第一版本不用,为
0
。用于路由器指定属性,必须通过路由器保存和重新广告。路由标志是分离内部和外部
RIP
路由线路的一种常用方法(路由选择域内的网络传送线路),该方法在
EGP
或
IGP
都有应用。
IP Address
:目标
IP
地址字段,
IPv4
地址为
32
位。
Subnet Mask
:子网掩码字段,
IPv4
子网掩码地址为
32
位。它应用于
IP
地址,生成非主机地址部分。如果为
0
,说明该入口不包括子网掩码。也仅在
v2
版本以上需要,在
RIPv1
中不需要,为
0
。
Next Hop
:下一跳字段。指出下一跳
IP
地址,由路由入口指定的通向目的地的数据包需要转发到该地址。
Metric
:跳数字段。表示从主机到目的地获得数据报过程中的整个成本。