概述
- 路由选择协议的核心就是路由算法,即需要何种算法来获得路由表中的各项目。
- 从路由算法能否随网络的通信量或拓扑自适应地进行调整变化来划分,则只有两大类,即静态路由选择策略与动态路由选择策略。
- 静态路由选择也叫做非自适应路由选择,其特点是简单和开销较小,但不能及时适应网络状态的变化。对于很简单的小网络,完全可以采用静态路由选择,用人工配置每一条路由。
- 动态路由选择也叫做自适应路由选择,其特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大。因此,动态路由选择适用于较复杂的大网络
- 互联网采用的路由选择协议主要是
自适应的(即动态的)
、分布式路由选择协议
自治系统
-
整个互联网划分为许多较小的
自治系统(autonomous system)
,一般都记为AS
。自治系统AS是在单一技术管理下的一组路由器,而这些路由器使用一种自治系统内部的路由选择协议和共同的度量 -
在目前的互联网中,一个大的ISP就是一个自治系统。
-
自治系统之间的路由选择也叫做
域间路由选择(interdomain routing)
,而在自治系统内部的路由选择叫做域内路由选择(intradomain routing)
。每个自治系统都有一个或多个路由器除运行本系统的内部路由选择协议外,还要运行自治系统间的路由选择协议 -
使用分层次的路由选择方法,可将互联网的路由选择协议划分为:
- 内部网关协议
IGP(Interior Gateway Protocol)
:具体的协议有多种,如RIP和OSPF等。 - 外部网关协议
EGP(External Gateway Protocol)
:目前使用的协议就是BGP
- 内部网关协议
-
下图是两个自治系统互连在一起的示意图:
-
对于比较大的自治系统,还可将所有的网络再进行一次划分。例如,可以构筑一个链路速率较高的主干网和许多速率较低的区域网。每个区域网通过路由器连接到主干网。当在一个区域内找不到目的站时,就通过路由器经过主干网到达另一个区域网,或者通过外部路由器到别的自治系统中去查
RIP协议
- 英文:Routing Information Protocol
- 是内部网关协议IGP中最先得到广泛使用的协议[RFC 1058],它的中文名称叫做路由信息协议
- RIP是一种分布式的基于距离向量的路由选择协议,是互联网的标准协议,其最大优点就是简单
- RIP协议将“距离”定义如下:从一路由器到直接连接的网络的距离定义为1,也称为“跳数”(hop count)。RIP允许一条路径最多只能包含15个路由器。因此“距离”等于16时即相当于不可达。可见RIP只适用于小型互联网。
- 需要注意的是,到直接连接的网络的距离也可定义为0(采用这种定义的理由是:路由器在和直接连接在该网络上的主机通信时,不需要经过另外的路由器。既然每经过一个路由器要将距离加1,那么不再经过路由器的距离就应当为0)。但两种不同的定义对实现RIP协议并无影响,因为重要的是要找出最短距离
- RIP不能在两个网络之间同时使用多条路由。RIP选择一条具有最少路由器的路由(即最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由。
- 本节讨论的RIP协议和下一节要讨论的OSPF协议,都是分布式路由选择协议。它们的共同特点就是每一个路由器都要不断地和其他一些路由器交换路由信息
RIP协议的特点
- 仅和相邻路由器交换信息
- 交换的信息是当前本路由器所知道的全部信息,即自己现在的路由表
- 按固定的时间间隔交换路由信息
注意:
- 路由器在刚刚开始工作时,它的路由表是空的。然后路由器就得出到直接相连的几个网络的距离(这些距离定义为1)。接着,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。但经过若干次的更新后,所有的路由器最终都会知道到达本自治系统中
任何一个网络
的最短距离和下一跳路由器的地址。 - 在一般情况下,RIP协议可以
收敛
,并且过程也较快。“收敛”就是在自治系统中所有的结点都得到正确的路由选择信息的过程 - 路由表中最主要的信息就是:到某个网络的距离(即最短距离),以及应经过的下一跳地址。路由表更新的原则是找出到每个目的网络的最短距离。这种更新算法又称为
距离向量
算法 - 虽然所有的路由器最终都拥有了整个自治系统的全局路由信息,但由于每一个路由器的位置不同,它们的路由表当然也应当是不同的。
距离向量算法
对每一个相邻路由器发送过来的RIP报文,进行以下步骤:
- 对地址为X的相邻路由器发来的RIP报文,先修改此报文中的所有项目:把“下一跳”字段中的地址都改为X,并把所有的“距离”字段的值加1(解释1)。每一个项目都有三个关键数据,即:到目的网络N,距离是d,下一跳路由器是X
- 对修改后的RIP报文中的每一个项目,进行以下步骤:
- 若原来的路由表中没有目的网络N,则把该项目添加到路由表中(见解释2)
- 否则(即在路由表中有目的网络N,这时就再查看下一跳路由器地址)
- 若下一跳路由器地址是X,则把收到的项目替换原路由表中的项目(见解释3)
- 否则,若收到的项目中的距离d小于路由表中的距离,则进行更新(见解释4),否则什么也不做(见解释5)
- 若
3
分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达
的路由器,即把距离置为16
上面给出的距离向量算法的基础就是Bellman-Ford
算法(或Ford-Fulkerson
算法)。这种算法的要点是这样的:
- 设X是结点A到B的最短路径上的一个结点。若把路径A→B拆成两段路径A→X和X→B,则每一段路径A→X和X→B也都分别是结点A到X和结点X到B的最短路径。
解释:
- 这样做是为了便于进行本路由表的更新。假设从位于地址X的相邻路由器发来的RIP报文的某一个项目是:“Net2,3,Y”,意思是“我经过路由器Y到网络Net2的距离是3”,那么本路由器就可推断出:“我经过X到网络Net2的距离应为3+1=4”。于是,本路由器就把收到的RIP报文的这一个项目修改为“Net2,4,X”,作为下一步和路由表中原有项目进行比较时使用(只有比较后才能知道是否需要更新)
- 表明这是新的目的网络,应当加入到路由表中。例如,本路由表中没有到目的网络Net2的路由,那么在路由表中就要加入新的项目“Net2,4,X”
- 为什么要替换呢?因为这是最新的消息,要以最新的消息为准。到目的网络的距离有可能增大或减小,但也可能没有改变。例如,不管原来路由表中的项目是“Net2,3,X”还是“Net2,5,X”,都要更新为现在的“Net2,4,X”
- 例如,若路由表中已有项目“Net2,5,P”,就要更新为“Net2,4,X”。因为到网络Net2的距离原来是5,现在减到4,更短了
- 若距离更大了,显然不应更新。若距离不变,更新后得不到好处,因此也不更新
例题
已知路由器R6有表1所示的路由表。现在收到相邻路由器R4发来的路由更新信息,如表2所示。试更新路由器R6的路由表
表1:路由器R6的路由表
目的网络 | 距离 | 下一跳路由器 |
---|---|---|
Net2 | 3 | R4 |
Net3 | 4 | R5 |
… | … | … |
表2:R4发来的路由更新信息
目的网络 | 距离 | 下一跳路由器 |
---|---|---|
Net1 | 3 | R1 |
Net2 | 4 | R2 |
Net3 | 1 | 直接交付 |
解析:
先把表2中的距离都加1,并把下一跳路由器都改为R4。得出表3:
目的网络 | 距离 | 下一跳路由器 |
---|---|---|
Net1 | 4 | R4 |
Net2 | 5 | R4 |
Net3 | 2 | R4 |
把这个表的每一行和表1进行比较:
- 第一行在表1中没有,因此要把这一行添加到表1中。
- 第二行的Net2在表1中有,且下一跳路由器也是R4。因此要更新(距离增大了)。
- 第三行的Net3在表1中有,但下一跳路由器不同。于是就要比较距离。新的路由信息的距离是2,小于原来表中的4,因此要更新。
这样,得出更新后的R6的路由表如表4所示:
目的网络 | 距离 | 下一跳路由器 |
---|---|---|
Net1 | 4 | R4 |
Net2 | 5 | R4 |
Net3 | 2 | R4 |
… | … | … |
RIP协议的报文格式
- RIP协议使用运输层的用户数据报UDP进行传送(使用UDP的端口520)
- RIP报文由首部和路由部分组成
- 首部占4个字节,其中的命令字段指出报文的意义。例如,1表示请求路由信息,2表示对请求路由信息的响应或未被请求而发出的路由更新报文。首部后面的“必为0”是为了4字节字的对齐
- RIP2报文中的路由部分由若干个路由信息组成。每个路由信息需要用20个字节
- 一个RIP报文最多可包括25个路由,因而RIP报文的最大长度是4+20×25=504字节。如超过,必须再用一个RIP报文来传送
RIP协议的缺点
- “坏消息传播得慢”,使更新过程的收敛时间过长。为了使坏消息传播得更快些,可以采取多种措施。例如,让路由器记录收到某特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送
- RIP限制了网络的规模,它能使用的最大距离为15(16表示不可达)
- 路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加
因此,对于规模较大的网络就应当使用下一节所述的OSPF协议。然而目前在规模较小的网络中,使用RIP协议的仍占多数。