距离向量算法
此算法的基础是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中所有路由器都和自己相邻路由器定期交换路由信息,并不断更新路由表,使得每个路由器到每个目的网络的路由都是最短的(跳数最少)。