RIP及距离向量算法
>>>预备知识
网络层提供两种服务:
- 虚电路服务
- 数据报服务
对比的方面 | 虚电路服务 | 数据报服务 |
思路 | 可靠通信由网络保证 | 可靠通信由终系统保证 |
连接的建立 | 必须有 | 不需要 |
终点地址 | 仅在连接建立阶段使用,每个分组使用短的虚电路号 | 每个分组都有终点的完整地址 |
分组的转发 | 属于同一条虚电路的分组均按照同一路由进行转发 | 每个分组独立选择路由进行转发 |
当结点出故障 | 所有通过出故障的结点的虚电路均不能工作 | 出故障的结点可能会丢失分组,一些路由可能发生变化 |
分组的顺序 | 按发送顺序 | 不按发送顺序 |
端到端的差错处理和流量控制 | 可由网络负责,也可由终系统负责 | 由终系统负责 |
因数据报服务在分组转发时,每个分组独立选择路由进行转发,从而引出路由选择协议。
路由选择协议的核心是路由算法。
理想路由算法特点:
- 算法必须是正确的和完整的
- 算法在计算上应简单
- 算法应能适应通信量和网络拓扑结的变化,要有自适应性
- 算法应具有稳定性
- 算法应是公平的
- 算法应是最佳的
路由算法依据自适应性来划分为:
- 静态路由选择策略(非自适应路由选择)
- 动态路由选择策略(自适应路由选择)
由于互联网的规模非常大,以及各单位的保密需求,互联网采用分层次的路由选择协议。为此,将互联网分为许多较小的自治系统(AS),AS是在单一技术管理下的一组路由器。一个AS对其他AS表现出的是一个单一的和一致的路由选择策略。
路由选择协议分类:
一)内部网关协议IGP
- RIP
- OSPF
自治系统内部的路由选择叫做域内路由选择
二)外部网关协议EGP
- BGP-4(BGP)
自治系统之间的路由选择叫做域间路由选择
RIP
中文名:路由信息协议
RIP是一种分布式的基于距离向量的路由选择协议
距离的定义:也称“跳数(hop count)”,从一路由器到直接连接的网络的距离定义为 1。从一路由器到非直接连接的路由器的距离定义为所经过的路由器数加 1。
RIP允许一条路径最多包含 15 个路由器,即“距离”等于 16 时不可达。
RIP选择一条具有最少路由器的路由(最短路由),哪怕还存在另一条高速但路由器较多的路由。
特点:每一个路由器都要不断地和其他路由器交换路由信息。
- 仅和相邻路由器交换信息
- 路由器交换的信息是当前本路由器所知道的所有信息,即当前的路由表
- 按固定时间间隔交换路由信息
路由器刚开始工作时,路由表是空的,但经过若干次的更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。以上过程,叫 “收敛”,收敛是在AS中所有结点都得到正确的路由选择信息的过程。
路由表中最主要的信息:到某个网络的距离(最短距离),经过的下一跳地址。
为了找出最短距离,由此引出 距离向量算法——
距离向量算法
此算法的基础是Bellman-Ford算法,这种算法的要点是:
设 X 是结点 A 到 B 的最短路径上的一个结点。若把路径 A到B 拆成两段路径 A到X 和 X到B,则每段路径 A到X 和 X到B 也都分别是结点 A到X 和结点 X到B 的最短路径。
对每一个相邻路由器发送过来的RIP报文,进行以下步骤:
1)对地址为 X 的相邻路由器发来的RIP报文,先修改此报文的所有项目:把“下一跳”字段中的地址都改为 X ,并把所有的“距离”字段值加 1 #假设从位于 X 的相邻路由器发来RIP报文的某一项目是:“Net2,3,Y”,意思是“我经过路由器Y到网络Net2的距离是3”,那么本路由器可推断出“我经过路由器X到网络Net2的距离是3+1=4”,于是将收到的RIP报文的这一项目修改为:“Net2,4,X”,作为下一步和路由表中原有项目进行比较时使用(比较后确定是否更新),每一个项目都有三个关键数据,即:到目的的网络 N ,距离 d ,下一跳路由器 X 。
2)对修改后的RIP报文中的每个项目,执行以下步骤:
if (原来的路由表中没有目的网络N):
把该项目添加到路由表中 #本路由表中没有到目的网络Net2的路由,那么路由表中就要加入新的项目“Net2,4,X”
在路由表中有目的网络N,查看下一跳路由器地址:elif(下一跳路由器地址是 X):
把收到的项目替换原路由表中的项目 #不管原来路由表中项目时“Net2,3,X”还是“Net2,5,X”,都要更新为“Net2,4,X”
在路由表中有目的网络N,但下一跳路由器不是X,比较距离d与路由表中的距离:elif(收到的项目中的距离 d 小于路由表中的距离):
更新 #若路由表中已有项目“Net2,5,P”,就更新为“Net2,4,X”
else:
无动作 #若距离更大了,显然不应更新;若距离不变,也不更新
3)若三分钟还没收到相邻路由器的更新路由表,则把此相邻路由器记为不可到达的路由器,即“距离”为 16。
4)return
【例】:
已知路由器R6有表a所示的路由表。现收到相邻路由器R4发来的路由更新信息,如表b所示。试更新路由器R6的路由表。
目的网络 | 距离 | 下一跳路由器 |
Net2 | 3 | R4 |
Net3 | 4 | R5 |
…… | …… | …… |
目的网络 | 距离 | 下一跳路由器 |
Net1 | 3 | R1 |
Net2 | 4 | R2 |
Net3 | 1 | 直接交付 |
解:先将收到的RIP报文改为表c:
目的网络 | 距离 | 下一跳路由 |
Net1 | 3+1=4 | R4 |
Net2 | 4+1=5 | R4 |
Net3 | 1+1=2 | R4 |
将表c与表a比较:
row1:没有Net1,添加到表a中
row2:有Net2,且下一跳路由器相同,更新
row3:有Net3,但下一跳路由器是不同,比较距离得到,新的距离小于路由表中距离,更新
综上所述:
更新后R6的路由表如表d 所示:
目的网络 | 距离 | 下一跳 |
Net1 | 4 | R4 |
Net2 | 5 | R4 |
Net3 | 2 | R4 |
…… | …… | …… |
RIP协议让AS中所有路由器都和自己相邻路由器定期交换路由信息,并不断更新路由表,使得每个路由器到每个目的网络的路由都是最短的(跳数最少)。