计算机网络-RIP协议
1 前言
- 路由信息协议 RIP (Routing Information Protocol) 是内部网关协议 IGP 中最先得到广泛使用的协议
- 在一个自治系统内,RIP 是一种分布式的、基于距离向量的路由选择协议
自治系统:
- 计算机网络中的自治系统是指能够自主决定在本系统中应采取某种路由协议的单位
- RIP 协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录
距离:
- 从一个路由器到直接连接的网络的距离定义为 1
- 从一个路由器到非直接连接的网络的距离定义为所经过的路由器数加 1
- RIP 协议中的“距离”也称为“跳数”(hop count),因为每经过一个路由器,跳数就加 1
- 这里的“距离”实际上指的是“最短距离”,RIP 认为一个好的路由就是它通过的路由器的数目少,即“距离短”
- RIP 允许一条路径最多只能包含 15 个路由器,“距离”的最大值为 16 时即相当于不可达。可见 RIP 只适用于小型互联网
- RIP 不能在两个网络之间同时使用多条路由。RIP 选择一个具有最少路由器的路由(即最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由
如上图:R1距离网1和网2的距离都是1,而R1距离网3的距离是2,距离网4的距离是3
2 RIP协议的三个要点
RIP协议归根结底就是要更新路由器中的路由表,它采用的更新方式就是通过与其他路由器交换信息来获取最新的路由信息
- 与谁交换:仅和相邻的路由器交换信息
- 交换什么:交换的信息是本路由器当前所知道的全部信息,即自己的路由表
- 何时交换:定时交换路由信息,例如,每隔30秒
3 路由表的建立
- 路由器在刚刚开始工作时,只知道到直接连接的网络的距离(此距离定义为 1)。它的路由表是空的
- 以后,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息
- 经过若干次更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址
- RIP 协议的收敛 (convergence) 过程较快。“收敛”就是在自治系统中所有的结点都得到正确的路由选择信息的过程,也就是很快就能达到“最优状态”
3.1 距离向量算法
距离向量算法就是路由器收到相邻路由器发来的RIP报文时,他所处理的一个过程,如收到相邻路由器(其地址为 X)的一个 RIP 报文:
- 先修改此 RIP 报文中的所有项目:把“下一跳”字段中的地址都改为 X,并把所有的“距离”字段的值加 1,(因为只要 X 发过来的路由项我们可以使用,那么它的下一跳必然要经过 X )
- 对修改后的 RIP 报文中的每一个项目,重复以下步骤:若项目中的目的网络不在路由表中,则把该项目加到路由表中(因为通过 X 发过来的RIP报文中表示目的网络是可以到达的,而原来的路由表中是没有这一项的,所以现在该目的网络就变得可以到达了),否则若下一跳字段给出的路由器地址是同样的,则把收到的项目替换原路由表中的项目(因为路由表是要更新的,即使路由地址相同,那么由于给的最新地址是表示当前网络的一个最新状态的,所以要替换),否则若收到项目中的距离小于路由表中的距离,则进行更新(因为原本经过本路由器可以到达目的网络,现在经过 X 后到达目的网络距离变短了,所以就更新成下一跳经过 X 到达目的网络的更短的路径),否则什么也不做
- 若 3 分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达路由器,即将距离置为16(距离为16表示不可达)
- 返回
距离向量算法的基础就是 Bellman-Ford 算法(或 Ford-Fulkerson 算法),这个算法的关键点如下:
- 设X是结点 A 到 B 的最短路径上的一个结点
- 若把路径 A→B 拆成两段路径 A→X 和 X→B,则每一段路径 A→X 和 X→B 也都分别是结点 A 到 X 和结点 X 到 B 的最短路径
- 简单来说就是最短路径上的某两个节点的路径,必然是这两个节点的最短路径
路由器之间交换信息与路由表更新:
- RIP 协议让互联网中的所有路由器都和自己的相邻路由器不断交换路由信息,并不断更新其路由表,使得从每一个路由器到每一个目的网络的路由都是最短的(即跳数最少)
- 虽然所有的路由器最终都拥有了整个自治系统的全局路由信息,但由于每一个路由器的位置不同,它们的路由表当然也应当是不同的
3.2 路由表更新过程举例
- 首先把R4发来的路由表修改一下,把每一个目的网络的距离都+1,这是因为我们在路由器R6想经过路由器R4到达目的网络的话,距离必然+1,接下来把下一跳路由器都改成R4,因为要利用R4转发的话,下一跳必然要经过R4,修改后的表为
表4-9(c)
- 把R6的路由表,和修改后的R4路由表综合起来更新R6的路由表
- 在R4的路由表中有
Net1 4 R4
这一项,它的意思是要向到达Net1
,下一跳到R4,经过距离4就可以到达,而R6的路由表中没有到达Net1
的路由表项,则直接将该项添加到R6的路由表中 - 在R6的路由表中,到达
Net2
的距离是3且经过的正好是R4,而R4路由表中到达Net2
的距离是5,而每次更新路由表,都反映着整个网络的最新状态,则R6要修改Net2
的距离,修改为5 - 对于
Net3
,在修改后的路由表R4中是Net3 2 R4
,而R6的路由表中是Net3 4 R5
,说明在原R6路由表中到达Net3
的距离是4,不如新更新的路径短,所以把路由项更新为最短的项