距离向量算法

距离向量算法

此算法的基础是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的路由表。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将表c与表a比较:

row1:没有Net1,添加到表a中

row2:有Net2,且下一跳路由器相同,更新

row3:有Net3,但下一跳路由器是不同,比较距离得到,新的距离小于路由表中距离,更新

综上所述:

更新后R6的路由表如表d 所示:

在这里插入图片描述
RIP协议让AS中所有路由器都和自己相邻路由器定期交换路由信息,并不断更新路由表,使得每个路由器到每个目的网络的路由都是最短的(跳数最少)。

猜你喜欢

转载自blog.csdn.net/weixin_44517301/article/details/94299692