链路状态LS (Link Status)算法,也称为最短路径优先SPF(Shortest Path First)算法。
算法要求每个路由器都有网络全部的拓扑结构信息,并依据这个信息以Dijkstra最短路径算法来求得该路由器到其他路由器的最短路径。因此,参与SPF算法的路由器不需要向外传输路由表的报文,而是完成两项工作:
■ 它必须负责监测所有相邻路由器的状态。如果两个路由器连接到同一个网络,则称为相邻;
■ 它要周期性的向其他所有的路由器广播链路状态的信息,例如连接或断开。
下图所示为某网络拓扑的最短路径示例:
那么,两个路由器的链路状态是如何得到的呢?
为了监测与之直接连接的相邻路由器的状态,路由器周期性地发送短报文,询问相邻路由器是否可以到达并处于活动状态。如果相邻路由器做出回答,说明两者之间的链接正常,否则认为链路故障。
为了避免在正常状态和故障状态之间来回抖动,需要采取n中取k原则,即占显著比例的检测报文得不到回答的情况下,链路状态才由正常转为故障,而且直到占显著比例的检测报文得到回答的情况下才又转为正常。
SPF算法具有以下优点:
■ 每个路由器使用相同的原始状态数据,不依赖中间结点的计算,可以独立计算出路由,确保了路由算法的收敛性;
■ 每个链路状态报文仅包含单一路由器与相邻路由器的链接信息,报文长度与网络的规模无关,因此,算法适用于大型的互联网。
现在的路由器上常用的一个路由协议OSPF就采用了链路状态算法。
链路状态路由进行路由寻找的过程:
(1)当一个链路状态路由器进入链路状态互连网络时,它发送一个呼叫数据包,以了解其邻居。
(2)邻居用关于它们所连接的链路以及相关的代价度的信息进行应答。
(3)起始的路由器用这个信息来建立它的路由选择表。
(4)然后,作为定期更新的一部分。路由器向它的邻居发送链路状态数据包。这个LSP包括了那个路由器的链路及相关代价。
(5)每个邻居赋值数据包,并且将LSP传递到下一个邻居。这个过程称为泛洪。
(6)因为路由器并没有在向前泛洪LSP之前重新计算路由选择数据库,聚合时间减少了。