当前的路由协议要么属于矢量路由协议,要么属于链路状态协议。RIP, RIPv2,RIPng,思科的IGRP和EIGRP,还有BGP都是矢量协议,而OSPF和IS-IS是链路状态协议。本章主要介绍链路状态的基本概念。首先对这些概念有个深入的理解,接下来的各章再详细介绍OSPF和IS-IS是如何以各自的方式实施这些概念的。
路由协议的目标就是在网络的上的各个路由器上创建一个数据库,保存可达的目的地信息,用于转发数据包。数据库中的每个目的地都关联了路由器出口和可能的下一跳路由器。这个数据库叫做路由信息数据库(RIB),或简称路由表。路由协议创建RIB必须定义两个机制:
  • 过程,路由器通过这个过程交流与目的地相关的信息;
  • 算法,利用路由器间共享的信息计算到达目的地的最短路径。
       链路状态协议和矢量协议之所以不同,就在于它们对这两个机制的实施是不同的,为了更好的理解链路状态协议,我们先来简单的了解一下矢量协议。
 

2.1 矢量协议基础

        矢量是既有大小又有方向的量。IP路由是矢量,它的方向就是指出口或者下一跳地址,它的大小因不同的协议而异,它可以是路由器跳数(RIP)、自治系统跳数(BGP)、或者接口的各个属性之和(IGRP和EIGRP),还可以是无单位的纯数值之和(OSPF 和 IS-IS)。但是,说路由是个矢量对区分矢量协议和链路状态协议是没用的,因为两种协议产生的路由都是矢量。
         我的朋友Paul Goyette 告诉我,在病毒学上,矢量是一些病原体的传播方式。事实上,矢量vector的拉丁词根vectus,就是“载体”“携带者”的意思。比如,蚊子就是一个传播疟疾的矢量(vector)。蚊子A把疟疾病毒从生物体X带给生物体Y,蚊子B再把病毒从生物体Y带到生物体Z。
        这个解释能让我们更好的理解矢量协议:更新消息A把路由数据从路由器A带到路由器B,更新消息B再把它从路由器Y带到路由器Z。
 
        回到蚊子的例子,蚊子B从生物体Y上带走的病毒与蚊子A带到生物体Y上的病毒是不同的,在被蚊子B带走之前,病毒已经增殖并且很可能已经变异。
        同样,从路由器Y上发出的更新消息B和发送到路由器Y上的更新消息A里边的路由数据也是不同的,尽管两个更新消息里的路由数据是关于同一个目的地的,但依照路由协议的算法,在路由器Y上要对这个数据做些修改,以反映这个目的地相对于路由器Y的位置。
        关于一个目的网络的信息肯定是由网络中某台或者某几台路由器首先产生的,而产生这个信息的路由器又是如何获得这个目的网络的呢?有三种可能:
  • 这个目的网络是路由器接口直连的网络。.
  • 通过手工配置,强制路由器产生的。
  • 是路由器通过另外的路由协议学习来的。
        矢量协议把目的网络传送给直连的邻居,收到路由信息后,每个邻居对这个信息做些修改,把到达这个网络的距离改成自己到达目的地的实际距离,就象RIP协议,把跳数加1。修改后的路由被放在路由表里,然后再传给直连的邻居,邻居再修改 ,如此重复下去。