链路状态协议,核心要点包括3个方面。
(1)链路状态信息生成。链路状态信息不只描述路由器信息,更重要的是描述链路信息。一个端点是不能定义链路的,链路是由两个端点定义的。因此,链路状态信息的生成与OSPF邻居密切相关。路由器需要在运行OSPF的接口主动探测,发现直连邻居,生成链路状态信息。
(2)网络拓扑信息。OSPF协议要维护一张OSPF域的拓扑图,才能进行最短路径计算。该拓扑图由链路状态信息描绘,链路状态信息则由网络的每个路由器生成。链路状态信息包含该路由器的标识、接口信息(包括类型、带宽、状态、IP地址、掩码等)以及与它相邻的路由器信息。简而言之就是节点、边以及边的权重3个要素。运行OSPF的每个路由器都生成自己的链路状态信息,并按照协议规定的链路状态通告报文格式封装后在全域洪泛,于是OSPF域的每一台路由器都将收到域内其他路由器的链路状态信息,也就形成了链路状态数据库(Link State Database,LSDB)。
(3)最短路径计算。在拥有网络拓扑信息的基础上,OSPF基于Dijkstra算法(又称最短路径优先算法)计算最短路径。每个OSPF路由器将自己作为树根,以其他节点为目的,计算到其他节点的最短路径,并将最短路径映射到直连的邻居节点,从而生成与路由相关的下一跳和出/接口信息。
基于上述3个要点,OSPF协议机制可以描述如下:路由器在运行OSPF协议的接口上主动探测发现邻居,生成链路状态通告(Link State Advertisement,LSA);该链路状态通告在整个OSPF域内洪泛,域内的每个路由器会收到其他路由器的链路状态信息,将这些链路状态信息汇总后形成链路状态数据库;最后OSPF协议基于链路状态数据库,使用Dijkstra算法计算到达其他节点的最短路径,并生成最终的OSPF路由信息。