@(计算机网络)
距离向量算法,实际中较少使用。
上面的是基础储备。
路由收敛很慢如何理解?
收敛过程的详细理解,是非常必要的。
直连跳数是1.
初始时R1到C网络的跳数是1,路由表中就记录着1,R2经过R1再到C共两跳,因此记录跳数是2.
现在:
R1
到C
的路径被剪断了,R1
可以感受到,于是在自己的路由表中更新为16
,表示"无穷大",不可达。
这是个坏消息,坏消息传得慢。现在看如何慢。
R1
准备在下一个30秒内告诉R2
这个坏消息,但是R2
先把自己的所有信息都告诉了R1
,R1
一看咦?R2
到C
的跳数是2,我到R2
就一跳,现在虽然我不能直接到C
了,那么绕道R2
不就可以了吗?说干就干,于是把自己到C
的跳数改为3
.好了,真相被谎言掩盖了。开始了二者之间的互捧臭脚时间。
R1
向R2
这个好基友坦白所有的信息,R2
看到R1
到C
的距离变为3了,R2
知道自己是经过R1
才到达的C
,于是毫不犹豫的改为4.下一次再把全部信息告诉R1
,R1
收到一看,咋回事啊,怎么又加一跳了呢!R2
那边发生了什么?但是还是得根据规则,毫不犹豫的修改到C的距离跳数。就这样不断增加,直到都为16,才恍然大悟,原来大家都到不了了啊。
就是这样的更新过程。理论掌握到这个程度就可以解绝大部分题了。
比如:
(2016.37)假设R1,R2,R3采用RIP协议交换路由信息,且均已收敛。若R3检测到网络201.1.2.0/25不可达,并向R2通告一次新的距离向量,则R2更新后,其到达该网络的距离是:B
A. 2
B.3
C. 16
D. 17
20161220 update :
需要更新的是这道题的详细解法。上面提到的坏消息传得慢和这里的情况并不完全对应。也即,上面设定的情景中,是一个路由器知道坏事发生了,但是还没来得及告诉邻居,于是开始不断的增长跳数,直到为16时才明白不可达。这里的题干说的是R3先向R2通告了自己的新的距离路由向量,所以R2知道通过R3这里不可达。但是不要忽视了R1,已经收敛的情况下,R1到该网络的距离是2。题干设定是R3告诉了R2,但是没说告诉了R1,那么当R2更新时,通过R1知道到达网络的距离向量是3.即R2到R1距离为1,R2到网络距离为2,那么综合为3.往后,当R3告诉R1后,才会开启新的一波距离向量增长的过程。这里牵涉到三个路由,需要特别注意。
20161221 update:
看评论。
忽视了一点是,路由更新是当收到相邻的路由消息的时候进行比较更新。那么关于这个问题,我发现自己更倾向于认为R3通告了R2时候,因为R2的路由表项中到目的网路下一跳就是R3,现在R3通告说自己不可达了,那么依据的是最新消息进行距离的更新。一般说坏消息传得慢,往往会说“可能在将坏消息传给邻居之前收到了其他邻居的路由信息”。这是我一直没能理解的,一方面宣称坏消息传得慢,另一方面说建立在可能,并不一定的基础上。所以,这里问题就很难办,我也不太能想通。如果有更好的思路,希望有人告知吧。
思考一个相对难点的题目:
考虑如图所示的子网。该子网采用距离向量路由算法,下面的向量刚刚到达路由器C,来自B的向量为(5,0,8,12,6,2);来自D的向量为(16,12,6,0,9,10);来自E的向量为(7,6,3,9,0,4)。经过测量,C到B,D,E的延迟分别是6,3,5.那么C到达所有结点的最短路径是(B)
A. (5,6,0,9,6,2)
B. (11,6,0,3,5,8)
C. (5,11,0,12,8,9)
D. (11,8,0,7,4,9)
分析:这个题目不必动手把数据都标到图上,没有必要。且全部标上,会让问题更加复杂。因此,我们直接推算即可。首先要明确的是C自己实际测算的结果就是最小的值,明确了这一点,直接选出B即可。
C到A:
C看B到A的距离是5,得到6+5=11;
C看E到A的距离是7,得到5+7=12;
C看D到A的距离是16,得到3+16 = 19;
选个最小的,于是为11;
C到B:实际测的是6,就是6。
C到D,实际测的是3,就为3.
C到E,实际测得是5,就为5;
C到F:
C看B到F距离是2,得到6+2 = 8;
C看D到F的距离是10,得到12+10 = 22;
C看E到F的距离是4,得到5+4 = 9;
取最小的8.
于是选择B为最终答案。