下图显示了矢量路由协议的路由信息是如何传播的。在时间t0,四个路由器的路由表里只有它们各自直连的网络,跳数为0,路由器之间还没有交换路由信息。
2.1.1 矢量协议的收敛_休闲
        在时间t1,路由器收第一个更新,处理后得到的结果放到路由表中。到了时间t3,四张路由表里填满了到达所有子网的路由信息,此时我们说到达所有子网的路由收敛了。
        处理更新消息涉及到两个步骤。首先,跳数增加1,如果路由器B告诉A目的网络离它有两跳,路由器A就增加为三跳,表示自己到达目的网络的距离。
第二步,把收到的路由连同新计算出来的跳数与路由表中的条目比较。如果没有到达这个目的地的路由条目,这个路由就会放到路由表里,成为一个路由条目。如果已经有了一个路由条目,就要比较跳数。如果大于或等于现存条目的跳数,条目不变。如果小于,就用新的条目替换。通过这种方式,路由表里维护着到达各个目的的最短路径。
 

2.1.1.2 矢量协议的特点

  从上面的例子可以看出矢量协议的三个重要特点:
  • 沿途上的每台路由器都参与路由的计算;
  • 每个路由器直到完成了自己的路由计算以后,才可以把更新发给邻居;
  • 如果目的网络不是自己直连的,那么路由器对这个目的网络的所有了解都来自它直连的邻居。
  每个特点都值得推敲,因为每个特点都可能成为矢量协议的缺点。
  沿途上的每台路由器都参与路由的计算。 看上图的路由器D上的子网条目 10.1.1.0,3跳,下一跳是路由器 C (10.1.4.1)。这是因为在t0时路由器A宣告个这网络为0跳,在t1时路由器B宣告这个网络为1跳,接着路由器C在t2时宣告这个网络为2跳。因此,从路由器D到达网络10.1.1.0的路由是分布式计算的,多个路由器参与了这条路由的产生。如果任何一个路由器出了错, 接下来的就都跟着错了。
  每个路由器直到完成了自己的路由计算以后,才可以把更新发给邻居。这要引起注意,因为每个路由都要在路由计算上花时间,如果到达目的网络有很多路由器,收敛时间就可能太长了。
  如果目的网络不是自己直连的,那么路由器对这个目的网络的所有了解都来自它直连的邻居。我们都有过问路的经历。在矢量协议里,邻居路由器就相当于指路的人:“朝这个方向往前走八步,肯定能到。”(我很担心别人说肯定能到,因为往往到不了)你没有其它信息来源,你只能相信这个邻居,相信它提供的信息是准确的。但是邻居可能犯错误,甚至可能故意提供错误信息。
  而第一和第三个特点的共同作用会使问题变得更严重。很多人玩过传话的游戏。十几个人,一句话从第一个人传到最后一个,中间往往会出错,而且越错越离谱。
  矢量协议工作起来与传话的游戏类似,但导致的结果就没那么有意思了。