OSPF路由计算

版本声明:转载请注明出处。未经允许,禁止商业用途。

区域内路由计算

图论表示

OSPF将一个区域的拓扑抽象成一个向图。图的节点是路由器、转接网络和stub网络。节点之间使用边进行连接。路由器到transit network的cost值等于接口cost值,transit network到路由器的cost值等于0。路由器到stub网络有边。但是stub网络到路由器没有边。这意味着流量不能穿越stub网络。

LSA角度

路由器节点对应router-LSA。转接网络对应network-LSA

节点ID32位数字,它和节点类型(路由器或网络)唯一标识一个节点。对于路由器,节点ID是路由器的OSPF router ID。对于网络节点,它是网络中DRIP地址。

Dijkstra算法

Step1 进行路由计算的路由器把自己作为根节点加入最短路径树S,将根节点可直达的节点列为候选人(如果没有可直达节点,则计算结束)。程序实现方式为,distance[v0]=0; distance[u]=arcs[v0][u],其它节点的distance为无穷大。即程序中没有候选人列表,distance不是无穷大,就说明是候选人或者加入了最短路径树。

Step2 将候选人列表中到根节点cost值最小的节点加入最短路径树并且从候选人列表中删除。程序思路:加入S则打上标记。程序中这是一个循环。

Step3 把新加入的节点所能直达的节点列为候选人,同时更新原有候选人的路径。程序实现方式为:节点u加入S。有可能减少从v0出发,途径S中的节点,到达目前还不在S中的某节点w的路径长度。如果有这样的路径的话,这条路径一定经过u,所以应将原路径v0->w修改为v0->u->w。效果是从非候选人变成候选人(原本distance[w]为无穷大),也可能是变成更好的候选人(原本distance[w]不是无穷大)。程序中这是一个循环。

Step4 如果候选人列表为空,则计算结束,否则,返回Step2。程序中这是外层循环。

因为后加入最短路径树的节点的路径cost值大于先加入最短路径树的节点的路径cost值,所以一旦找到最短路径,不会出现到某个节点的最短路径需要修改的情况。

Dijkstra 算法的时间复杂度为O(n^2)。优化后为O(nlogn)

这里程序和自然语言描述最大的差异在于,自然语言描述的思路是层层向外推,直到包含了最远的节点,程序形式上看起来却是毫无差异的从编号为0的节点开始循环,形式上看起来并不是从v开始处理。

区域间路由的计算

对于每条区域内路由,ABR会将其转换成3类LSA,放入其它区域的LSDB,然后通告给那些邻居中的邻居。如果一个区域有多个ABR时,每个ABR都会生成和通告3类LSA。

骨干区域ABR要特殊一些,骨干区域的ABR会将学习到的对应于区域A的网络的3类LSA,它首先计算出区域间路由,路由的cost值为network summary-LSA中的cost+到生成该3类LSA的ABR的cost,然后重新生成新的3类LSA,然后放置到区域B的LSDB。

到同一网络,如果有多条3类LSA。则比较 network summary-LSA中的cost+到生成该3类LSA的ABR的cost ,选择值小的路由,最终下一跳指向该ABR的方向。

AS外部路由的计算

不像3类LSA的泛洪范围是一个区域,经过区域0时要重新生成,5类LSA的泛洪范围是整个AS,在整个AS传输时不会重新生成。但是对应于每个ASBR,其所在区域的ABR要生成4类LSA,和3类LSA类似,4类LSA的泛洪范围也只是一个区域。4类LSA经过区域0时要重新生成。到ASBR的路由本质上是一种区域间路由。

有多个ASBR时,一条external路由对应多个5类LSA。有多个ABR时,对于一个ASBR就会有多条4类LSA。到ABR x的cost值+ ABR x生成的4类LSA中的cost  = 到ASBR的cost值。至于选择哪一条5类LSA通告的路由,需要取决于5类LSA中的metric type和metric值。优选metric tyep为E1的路由。Metric type同为E2时,选择metric值小的路由,如果metric值相同,则选择ASBR近的路由。Metric type同为E1时,选择metric值+到ASBR的cost值 最小的路由。下一跳指向本区域中产生对应ASBR LSA的ABR。

可以看到,OSPF区域间路由和AS外部路由的计算,其实更像是距离矢量协议。距离矢量协议就要考虑放防环路的问题,OSPF区域间路由没有环路,是因为OSPF限制了区域间路由的传播途径,最长路径为非骨干区域A---区域0----非骨干区域B,这样就不会出现一个区域的路由又回到这个区域中的情况。

你可能感兴趣的:(计算机网络)