如果说距离矢量路由协议提供的是路标,那么链路状态路由协议提供的就是地图。每个链路状态路由器上都有一张完整的网络图。链路状态协议不同于距离矢量协议“依照传闻”进行路由选择的工作方式。每台链路状态路由器从对等路由器那里获取的都是“第一手”的信息。每台路由器都会将一些关于自己,关于本地直连链路以及这些链路的状态和关于所有直连邻居的信息传送给另一台路由器,接受到信息的路由器都会将该类信息做一个拷贝,但绝不修改信息。最终的目的是每台路由器都有一个相同的有关网络的信息。并且每台路由器都可以独立的计算各自的最优路径。
链路状态协议有时也叫最短路径优先协议或叫分布式数据库协议,该类协议是围绕一个著名的算法——E.W.Dijkstra的最短路径算法设计的。
常见的链路状态协议有
OSPF:开放式最短路径优先协议
IS-IS:中间系统到中间系统协议
链路状态协议的工作过程:
第一步:每台路由器都与自己的邻居建立邻接关系。
第二步:每台路由器都向自己的邻居发送链路状态通告(LSA)的数据单元。路由器对自己的每条链路都会生成一条链路状态通告,用于标记该条链路及链路状态,指示路由器接口到链路的代价度量值及链路所连接的所有邻居。每个邻居收到链路状态通告后将向它的邻居洪泛这些通告。
第三步:每台路由器都会将自己收到的LSA拷贝并存入到本地的链路状态数据库(LSDB)中。若每台路由都正常工作,那么所有路由器的链路状态数据库中的网络信息都会是相同的。
第四步:基于本地的链路状态数据库网路信息,使用最短路径优先算法计算出到每台路由器的最短路径。接着链路状态协议会通过查询链路状态数据,找到每台路由器所连接的子网,并把这些信息输入到路由表中。
邻居
邻居发现是建立链路状态环境并运行的第一步。使用Hello协议完成邻居发现。Hello协议定义了一个Hello数据的格式和交换数据包并处理数据包信息的过程。
Hello数据包中至少包含路由ID(router ID)和发送数据包的网络地址。路由器ID是用来将路由在网络中唯一的标识。
当两台路由器之间确认为邻居关系时,它们之间就要进行数据同步即交换和确定数据库信息直到数据库相同为止。为了执行数据库同步,邻居之间必须建立邻接关系。即它们必须就某些参数达成一致。通过Hello数据包建立邻接关系,链路状态就可以在受控的方式下交换信息。与距离矢量协议相比,链路状态协议仅在配置了路由选择协议的接口上广播更新信息。
除了发现邻居建立邻接关系的作用外,Hello数据包还可以作为监视邻接关系的握手信息。如果没有在特定的时间内从邻接路由器接收到Hello数据包,就认为邻居不可达。随即邻接关系解除。
链路状态洪泛扩散
在建立邻接关系后路由器发送LSA。LSA被洪泛给每台路由器,路由器保存收到的LSA,并继续向自己的邻居洪泛(除接收接口外的其他所有配置接口)。这个过程就体现出链路状态协议的优秀之处,因为LSA是立刻被转发的,而在距离矢量协议中所有路由器在接收到更新信息后都必须先将自己路由表更新才会向邻居转发更新信息,触发更新也是如此。因此,当网络拓扑发生变化时,链路状态协议收敛的速度会远远快于距离矢量协议。