ospf是个链路状态路由协议,首先描绘拓扑,之后再以这个拓扑为基础生成以自己为根的最短路径树,但是今天做了实验发现ospf最短路径树开销的计算并不是完全按照这个拓扑进行的,最起码没有我想象的那么完全一致
拓扑很简单,两台路由器中间用串行线互连,接口ip分别是12.1.1.1 和 21.1.1.2 (不在同一网段),串行线默认开销48,手动将R2接口开销改为100,运行ospf并且宣告互连网段之后ospf学习到了路由,在R1上查看路由表发现目标网段21.1.1.0/24的cost为148(48+100)。
如下图
![](http://imgsrc.baidu.com/forum/w%3D580/sign=418f4d799dcad1c8d0bbfc2f4f3f67c4/51b0a61ea8d3fd1f30f5ff6c384e251f94ca5fa7.jpg)
简单分析一下,按照ospf的计算过程,是先计算自己到达始发路由器(adv rtr)的开销(48),再加上始发路由器到达目标网段的开销(100)作为自己到达目标网段的开销(148), 最终得出结果
然而ospf明显能通过lsa构建如上图一样的真实拓扑,但是从最终的计算结果显示来看却又仅仅是按照lsa里的adv rtr字段和stubnet类型的link-id字段(21.1.1.0–metric 100)就计算出了最终开销。这样看来,在这个过程中并没有考虑p2p类型(link type:p-2-p)的那部分link-id字段。所以说ospf的开销计算并不是和lsa所描绘的拓扑完全保持一致,或者说他们的契合程度并没有想象的那么高。
写到这里我就开始怀疑ospf拓扑计算的作用了,既然对于目标网段只是按照lsa部分字段进行开销的计算,那么构建拓扑又是为了什么?想了想应该是为了计算最短路径树(特别是下一跳)。
写到这里我突然明白了,ospf对于lsa的计算应该分为三部分:拓扑计算、开销计算 和 最短路径树计算。其中拓扑计算和开销计算分别利用不同的字段(所以得到的结果可能不完全相符),最短路径树则是利用前两者的结果相结合得出计算(计算出最优下一跳)。
拓扑很简单,两台路由器中间用串行线互连,接口ip分别是12.1.1.1 和 21.1.1.2 (不在同一网段),串行线默认开销48,手动将R2接口开销改为100,运行ospf并且宣告互连网段之后ospf学习到了路由,在R1上查看路由表发现目标网段21.1.1.0/24的cost为148(48+100)。
如下图
![](http://imgsrc.baidu.com/forum/w%3D580/sign=418f4d799dcad1c8d0bbfc2f4f3f67c4/51b0a61ea8d3fd1f30f5ff6c384e251f94ca5fa7.jpg)
简单分析一下,按照ospf的计算过程,是先计算自己到达始发路由器(adv rtr)的开销(48),再加上始发路由器到达目标网段的开销(100)作为自己到达目标网段的开销(148), 最终得出结果
然而ospf明显能通过lsa构建如上图一样的真实拓扑,但是从最终的计算结果显示来看却又仅仅是按照lsa里的adv rtr字段和stubnet类型的link-id字段(21.1.1.0–metric 100)就计算出了最终开销。这样看来,在这个过程中并没有考虑p2p类型(link type:p-2-p)的那部分link-id字段。所以说ospf的开销计算并不是和lsa所描绘的拓扑完全保持一致,或者说他们的契合程度并没有想象的那么高。
写到这里我就开始怀疑ospf拓扑计算的作用了,既然对于目标网段只是按照lsa部分字段进行开销的计算,那么构建拓扑又是为了什么?想了想应该是为了计算最短路径树(特别是下一跳)。
写到这里我突然明白了,ospf对于lsa的计算应该分为三部分:拓扑计算、开销计算 和 最短路径树计算。其中拓扑计算和开销计算分别利用不同的字段(所以得到的结果可能不完全相符),最短路径树则是利用前两者的结果相结合得出计算(计算出最优下一跳)。