参考链接:http://blog.sina.com.cn/s/blog_68268661010166j5.html
SPF计算发生在OSPF LSDB到路由表的过程中;OSPF通过接收LSA形成LSDB信息,然后通过SPF计算得出最终的路由表。
SPF计算用到path列表和tentative列表。
以上图中的A为例,描述A的LSDB到路由表的计算过程:
首先,A先把到达A自己的地址,开销,下一跳放到path表中
PATH |
TENT |
{A,0,0} |
{empty} |
注:{A,0,A}分别代表目的地址,开销,下一跳。
然后,把到达A所有邻居的地址,开销,下一跳(邻居自己本身)放到TENTative表中。
PATH |
TENT |
{A,0,0} |
{B,6,B} |
{C,3,C} |
|
{D,2,D} |
然后,找出到所有邻居中开销最小的邻居放到path表中,可以看出,D开销为2,会被放到path列表中
PATH |
TENT |
{A,0,0} {D,2,D} |
{B,6,B} |
{C,3,C} |
然后,找出list表中D的所有邻居,从图中可以看出除了A之外还有C,路径A - D - C的开销为2+5=7,路径A-C的开销为3。所以把{C,3,C}放到path表中。
PATH |
TENT |
{A,0,0} {D,2,D} {C,3,C} |
{B,6,B} |
然后,找出list表中的C的所有邻居,从图中可以看出除了A之外还有B,路径A-C-B的开销为3+2,路径A-B的开销为6。所以把{B,6,B}从tentaive表中删除,添加{B,5,C}。
PATH |
TENT |
{A,0,0} {D,2,D} {C,3,C} |
|
{B,5,C} |
最后,将tentative表中的{B,5,C}放入到path表中,tent表为空,停止计算。
PATH |
TENT |
{A,0,0} {D,2,D} {C,3,C} {B,5,C} |
|
这时的path表项就成了路由表项。
结点 |
代价 |
下一跳 |
A |
0 |
Self |
B |
5 |
C |
C |
3 |
Connected |
D |
2 |
Connected |