OSPF的路径选择
在大多数情形下,OSPF根据SPF算法来选择开销最小的路径,这也是OSPF命名的由来。不过,实际上,OSPF在有些情形下却不是按开销来决定最佳路径的,这需要引起我们足够注意。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

选择路径的最佳类型
OSPF中,有些路由是区域内的,有些是跨区域的,还有一些是外部路由(E1E2)。在选择最佳路径的过程中,路由器需要考虑所选择路由的类型,RFC 2328列出了选择的优先级:
1)区域内路由
2)区域间路由
3E1
4E2
注意这里类型的选择会优于开销,例如:如果找到一条内部区域的路由1和一条区域间的路由2,即使路由2的开销小于路由1,路由器还是会先选择路由1

 

ABR环路预防的副效应
使用一些OSPF的环路预防特性可能会产生副效应,从而影响到OSPF最佳路径的选择。在区域内部,OSPF严格地使用链路状态作为metric,但是如果跨区域,OSPF的行为却有点类似于距离向量。例如,将3类型LSA由一个区域向另一个区域广播时就会隐藏掉源区域的拓扑,而仅仅考虑目的子网、metric以及可达ABR,这些都是距离向量的概念。
虽然OSPF不使用传统距离向量环路避免的所有特性,但有些底层概念,如分割范围,它一样也会用到。在OSPF中,分割范围用于某些类型的LSA,这样LSA就不会广播到一个非骨干区域又再广播回骨干区域。具体可以看看下面这个例子:
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
图中ABR1ABR2都会广播3类型LSA到区域1,但是随后它们会选择不再将3类型LSA转发回区域0
更一般性地说,ABR在非骨干区域会学习到来自其它ABR的汇总LSA,但该ABR不会再广播另一条LSA到区域0
为了预防环路的发生,ABR对于所接收的来自非骨干区域的其他ABRLSA,在计算最小开销路径时,会直接忽略掉。这可以阻止ABR选择一条这样的路径:先经过某ABR进入非骨干区域,然后又经由其他ABR返回骨干区域。为进一步理解,请看下面这个例子:
如果没有上面的规则,ABR2会计算一条到子网1开销为3的路径1ABR2ABR1ABR3,除此之外,ABR还会计算一条到子网1开销为101的路径2ABR2ABR3,这两条路径比较,如果按最小开销的原则,显然应该选择路径1。但是如果考虑到环路预防的规则,则路径1会直接忽略掉,最终ABR2会选择路径2
环路预防对区域内部路由器又会产生什么影响呢?再来看下面这个例子:
R2计算到子网1的路由时,它发现ABR1发来的3类型LSA中所列开销为2,再加上它到ABR1的开销2,此条路径总开销为4R2ABR2ABR1ABR3)。类似地,当它学习ABR2发来的3类型LSA时,得出路径总开销为102R2ABR2ABR3)。两相比较,R2选择通过ABR1的路径为最优路径。当确定这条路由之后,R2将包转发到下一条路由器ABR2,但是由于环路预防的规则影响,ABR2选择的到子网1的路径是ABR2ABR3,最后你会发现一件有趣的事情:R2本来确定对了最佳路由R2ABR2ABR1ABR3,但实际走的路径却是R2ABR2ABR3,结果导致不对称次优路由的出现。