文章内容概述内部网关路由协议RIP协议距离向量(DV)算法在介绍RIP协议之前,先了解一下DV算法,因为协议它通过DV算法实现。该算法在图中的每个节点上运行,使用两个向量Di和SiDi来描述当前节点到其他节点的距离。Si描述了从当前节点到其他节点的下一个节点。对于算法,它是如何工作的?每个节点与相邻节点交换向量Di和Si的信息。每个节点根据交换的信息更新自己的节点信息。Di1代表节点i到节点1的距离,Si1代表节点i到节点1的下一个节点,n代表节点的个数。对于DV算法来说,其实就是距离的最小值来计算D。比如Dij的最小值等于:min(Dix+Dxj)。通过一个例子来理解DV算法的图,有A、B、C、D、E、F这六个顶点和几条边。对于这六个节点,右边有Di和Si的距离向量信息。对于Di,它有六个元素,分别是Dia、Dib……到Dif,代表节点i到A、B、C、D、E、F这六个节点的距离。对于Si,它也有六个元素,即Sia,Sib...到Sif,表示从节点i到A,B,C,D,E,F这六个节点的下一个节点是什么下面以节点A为例展示DV算法的工作原理,即找到两个向量Da和Sa。假设A的距离向量信息(Da)如下,表示A到各个节点的距离为右列的值。上面介绍DV算法时,提到算法会与相邻节点交换Da和Sa信息。假设A已经接收到来自四个相邻节点B、C、D、F的信息,并且在接收到距离向量信息时,知道A到每个相邻节点的直线距离。为了更方便的理??解DV将A的距离向量信息和A到其他四个相邻节点的向量信息结合起来的过程。图中每一列代表某个节点到A、B、C、D、E、F节点的距离。它是什么?你可能会对表格中的数据产生疑问,为什么A到B的距离是11,而B到A的距离却是9,这是因为里面的距离向量信息不是最新的。比如A到B的距离可以通过A->C->B得到,那么这里A到B的距离可能是11。B到A的距离可以通过B->C->D->A得到,所以这里A到B的距离向量信息可以和B到A的距离向量信息不同。列出A的S向量,默认初始化为空,S向量表示从A到其他几个节点的下一个节点是什么。假设此时A正在与节点B交换信息,A会获取节点B的信息,即获取B到节点的信息,获取到信息后,首先计算各个节点的距离A.因为A和B直接通信,所以A知道A到B的距离是多少。那么从B得到的B到其他节点的距离会用来计算A到其他节点的距离A->B=6A->B->C=6+11=17A->B->D=6+7=13A->B->E=6+17=23A->B->F=6+11=17以上就是A拿到B的数据后的操作,然后他会把拿到的数据和自己的数据结合起来自己和距离向量相比,如果小于自己到其他节点的距离,那么就会填充到自己的距离向量中。于是我得到了B的数据,经过计算,我发现A到B的距离是6,比我原来的11小了,所以我把我原来的11换成了6;然后发现原来A到F的距离是17,经过计算,A到F的距离17相等,那么A也会被替换掉。替换完成后,A会将对应的下一个节点设置为B。以上就是A获取到B的信息后的整个过程,如下图所示,A随后收到节点C的信息,其中包括到C的距离给A、B、C、D、E、F。A收到C的信息后,会进行和之前一样的操作A->B->C=9+9=18A->C=9A->C->D=9+8=17A->C->E=9+11=20A->C->F=9+10=19计算完后,也会和它已有的距离向量进行比较。比如A->C的距离为9,小于A到C的距离为12,所以原来的12会换成9,对应的S补C。一样背后的原因,如图:A、D、F之间交换信息的过程和上面的完全一样。A与各个相邻节点交换信息后,得到如下结果。以上就是DV算法的全过程。回顾一下前面介绍的DV算法,再理解它的定义,就会更容易理解每??个节点使用两个向量。Di和SiDi描述了当前节点到其他节点的距离,Si描述了当前节点到其他节点的下一个节点。每个节点与相邻节点交换向量Di和Si的信息。每个节点根据交换的信息交换信息,更新自己的节点信息的过程,距离越远)RIP协议每30s交换一次路由信息(这里的路由信息??包括Di和Si)。RIP协议认为跳数>15的路由是不可达路由。使用RIP协议的路由器。路由器将初始化路由信息。(两个向量Di和Si)根据相邻路由器X发来的信息,修改信息的内容(下一跳地址设为X,所有距离加1,表示通过X,可以到达X发送的信息。对于信息的每个节点,只需要在距离上加1)修改后,先检索本地路由,将信息中的新路由插入到路由表中(因为可能有本地路由表中的一些目的地。)检索本地路由,对于下一跳是X,更新修改后的信息以检索本地路由,比较相同目的地的距离,如果新信息的距离更小,则更新本地路由表如果3分钟内没有收到相邻路由信息,则将相邻路由设置为不可达(即设置为16跳)通过例子理解上面的描述。假设路由中初始化的信息如下:最左边部分:Step1:检索本地路由,将信息中的新路由插入路由表,并初始化路由表中的信息,表示距离到D的route为2,下一个跳转地址为A。假设此时收到路由器X的报文。信息到达A的距离为4,下一跳地址为C。到B的距离为2,下一跳地址为C。路由器收到这条信息后,会修改自己的信息,加1到所有距离,并将下一跳地址设置为X。接下来,将检索本地路由,发现A和B不在原始路由中,因此将A和B的信息插入到路由中桌子。获取更新后的路由表步骤2:获取本地路由。对于X的下一跳,更新修改后的信息。假设初始路由信息如下:最左边部分:当初始路由器收到中间路由信息时,首先修改路由信息。修改后,会根据收到的路由信息??修改自己。因为这是最新的信息,原来的会被覆盖。第三步:检索本地路由,比较同理如果新信息的距离更小,更新本地路由表的步骤其实就是前面介绍的DV算法过程。当初始路由收到另一个路由信息时,先更新其他路由信息,然后与初始路由相比,如果新信息的距离更小,则更新本地路由表。以上就是RIP协议的完整过程。RIP协议的缺点让我们通过一个例子来了解RIP协议的缺点。假设有三个节点A、B、C,并且它们是线性连接的。B和C到A的距离分别是1和2。B直接到达A,C通过B到达A。假设某时刻,路由器A宕机,即A不可达。这时,B发现A不可达后,会询问C,询问C后,发现A可以通过C到达,于是将下一跳设置为C,距离加一(即3).C也发现A在某个时刻不可达,那么C也会询问B,发现B经过3跳后可以到达A,所以它也会更新自己的路由信息??,将到A的距离设置为4,下载如果firsthop设置为B,会一直循环下去,直到距离为16(上面说到最大16跳,目标会被认为不可达),才发现不可达。那么RIP协议最致命的缺点就是:为什么RIP有这个特点是因为故障信息传递慢?随便相信“邻家老王”(不管是B还是C,如果B拿到C的路由信息??,就会无条件相信C。同样,如果是C,他也会无条件相信B,所以会导致一个循环,直到跳数为16,才发现不可达)“没想到”,“视野不够”(对于RIP协议,每个路由器只看到信息相邻路由,无法查看更多信息),因为在网络中经常发生故障。如果每一个故障都经过这么多跳,那么整个网络就非常不可控了。这是RIP协议的致命缺点。在瞬息万变的技术中寻找相同点,是技术人竞争力的核心。知行合一,理论与实践相结合
