复习的时候突然想到去年的一个面试题,虽然当时事后也找人认真讨论了,但是没有深入的研究,更别提结论了

要研究这个问题,先要明确链路状态协议的特点,
距离矢量协议的特点是,路由器学习到的路由是由邻居传递过来的,路由器本身不了解全网拓扑,只知道去往目的网段的跳数(“道听途说”)。
而链路状态协议的特点是,路由器彼此交互链路状态信息,每台路由器了解全网的邻接状态和链路状态,然后本地运行SPF算法计算得到最优路由。

而OSPF在同一区域内,确实符合链路状态协议的特点;但是在区域间并没有传递链路状态,只是传递了路由信息:网络号,掩码,metric。
根据以上得出,OSPF在区域内是纯链路状态协议,而在区域间更像是距离矢量行为

验证的办法有两种:
1,区域间选路的“逐跳”行为
2,一个区域的路有更新,传递到其他区域,其他区域的路由并不会运行SPF算法

使用这个拓扑进行验证,上面是area 0,下面是area 1,R1R4都有环回口宣告进各自区域

当路由收敛完毕后,查看R1的路由表,其中4.4.4.4/32这条显示的metric是31:

查看area 0内路由器的lsdb可以知道,R1从R2学习到的4.4.4.4/32的metric是11,从R3学习到的是101;而R1到达R2,R3的metric分别是10,20;
所以R1选择的路径是R1-R3-R2-R4.
但是,对数据包进行跟踪的话,实际的路径则是R1-R3-R4.

这是由于R3作为ABR,它从R4获得1类LSA,生成O表项的路由;从R2获得3类LSA,生成O IA表项的路由;优选O表项。不比较metric。

这种“逐条选路”的行为并不是链路状态协议的特点。

第二种方式的话,用一个命令就可以确认sh ip os statistics

在area 1的R4上添加一一个环回口,宣告进area 1,等路有更新完毕后,分别在R1R4上执行这条命令:

可以看到,只有area 1的路由器执行了一次SPF算法:

分析完了