Jeff Doyle 的大名不用多说了,就凭借着Routing TCP/IP Vol I就可以毫无疑问的可以成为大师级的人物。下面介绍的这个问题就是Jeff最喜欢在面试的时候问的一个问题,当然还有相应的官方解答,希望对那些相应的面试官或者面试者有一定的参考借鉴。

Why does OSPF require all traffic between non-backbone areas to pass through a backbone area (area 0)?
为什么在OSPF中非骨干区域之间的互访流量必须通过骨干区域传递?

下面通过比较三个即使OSPF初学者也知道的链路状态路由协议的基本概念,来探究该问题的答案。

第一个基本概念是:
运行链路状态协议的路由器都会向其他路由器泛洪自身的,链路的和邻居信息。通过这些泛洪的信息,各个路由器都能够建立起一致的链路状态数据库。然后各个路由器再各自独立的运行最近路径优先算法来获得一个最短路径树,这棵树就类似一个描绘到达其他路由器路径 的地图。
链路状态协议的一个优点就是通过提供一个整个网络的地图来避免出现路由回环。相对应的距离矢量协议的路由信息是在网络中逐跳的进行传递的,然后逐跳的根据本地的信息进行各自的路由计算。.在进行正确的路由计算和计算结果信息正确传递之前,这些路由器之间都 是独立的。当一个路由器宣告它所学到的网络前缀给邻居时,它就宣告说它知道如何到达这些目的地,而由于运行距离矢量协议的路由器也只能通过邻居的宣告来获得网络信息,除了邻居之外没有整个网络的地图,因此很容易产生路由回环。

第二个基本概念是:
随着链路状态域的增大,相应的泛洪和产生的链路状态数据库就会产生一个扩展性的问题。解决这个问题的方法是把一个路由域分成多个区域。这样第一个基本概念就要修正为路由信息的泛洪就限于在区域内,相应的链路状态数据库也只是包含本区域内所有路由器的信息。 也就是说每个路由器所计算出来的最短路径树也只是到达本区域内路由器最短路径的汇总而已。

第三个基本概念是:
OSPF的区域是通过一个或者多个的区域边界路由器相连(对于其他的链路状态路由协议ISIS稍微有所不同),这些边界路由器针对不同的区域维护不同的链路状态数据库,生成各自独立的最短路径树。区域边界路由器是两个或者多个区域的成员。通过泛洪一种类型 3的LSA来宣告它从一个区域所学到的前缀到另外一个区域:“我知道如何到达这些目的地”
说到这里你会发现最后这个概念描述的好像不是链路状态而是距离矢量。一个区域内的路由器不能看到边界路由器以外的网络,它只有依赖边界路由器来正确告知哪些前缀可以到达。最短路径算法通过把那些前缀作为和边界路由器相连的子网,附加相应的代价值进行计算来 获得最短路径树。

这样就最终引出了问题的答案:
由于区域间的OSPF是距离矢量的,是容易产生路由回环的。为了避免回环,所以区域间的流量必须经由骨干区域来传递。

如果你在以后的面试中遇到同样的问题,希望不会难倒你,无论最后是否获得了offer,都请记住Jeff.
 


转载于:https://blog.51cto.com/tangbz/435842