写在前面的话:

    OSPF的 forward address是为了解决次优路径引入的概念。讲解FA特性时都分为两种情况,

而实际上情况可以完全概括为一种。这也方便记忆和理解。    


     总结: forwarding address不存在 NSSA相关FA,nssa无关FA。  

          可以解释为: 

          去往引入路由的最近的一个IP,此IP为域内域间的网段中。

 



  

   不能理解请看下面:


   1.1此图不存在NSSA区域,存在一个广播网段,此图来源锐捷PPT,这种情况下选择了没运行OSPF 的R3上的地址

   OSPF NSSA forwarding address 深度解析_第1张图片

  1.2此图存在NSSA区域,不存在广播网段,此图来源锐捷PPT,这种情况下选择了,ASBR的IP地址。优先选择选环回口,有多个选IP大的。

    OSPF NSSA forwarding address 深度解析_第2张图片

  1.3既有NSSA又有广播网段.如下图,当router7把 ip route-s 11.1.1.0 255.255.255.0  192.168.1.9 引入进OSPF。 那么这个FA地址是按照第一种情况填写AR的1.9呢?还是按照第二种情况填写NSSA区域ASBR R7上的地址呢? 


  OSPF NSSA forwarding address 深度解析_第3张图片

  解答:FA地址是192.168.1.9。


  那么有个几个疑问,

  问:

  既然NSSA区域存在的情况下可以为ASBR的下一跳地址,不存在也可以为ASBR的下一跳地址,那么两种情况直接都填ASBR的下一跳地址不就行了?为什么搞这么复杂?

  解答:本文第一句就说了,选择域内或者域间存在网段中的最近的路由器的IP。可以把1.2图中的ASBR(即R4)链接外部路由器的接口network进ospf域内,那么FA会选择ASBR引入路由的下一跳地址,而不是图中9.9.45.4或者ASBR上的任何地址。

 问:为什么一定是域内域间存在的?

 解答:FA本身就是用于转发到达外部网络的地址,如果用一个外部路由来迭代查找FA并进行路由计算,那么很可能会导致路由问题。

  如图(以下取自H3C网络大爬虫OSPF专题):

   OSPF NSSA forwarding address 深度解析_第4张图片

      先不考虑所有红色的拓扑部分。正常情况下ASBR-1RouterA获得了外部路由1.1.1.1/32并且将FA填写为2.2.2.2。在ABR处,实施了路由聚合策略,区域1的所有2网段路由被汇总了。RouterC是一个骨干区域内的路由器,它会获得3类汇总的LSA2.2.0.0/165LSA1.1.1.1/32并且计算出正确的路由,下一跳都会指向ABR。这个时候跟第一个例子基本上是完全相同的。

当考虑到红色的拓扑部分时,就有了一些变化。在OSPF区域外部RouterARouterD之间运行IGP并且将2.2.2.0/24传递给RouterD,然后ASBR-2做路由引入,将2.2.2.0/24这样一个5类的LSA泛洪进骨干区域。这个时候骨干区域内的路由器RouterCLSA会包括这样3条:

Ase: 1.1.1.1/32 FA=2.2.2.2

Ase: 2.2.2.0/24 Adv router=ASBR-2

Snet:2.2.0.0/16 Adv router=ABR

如果按照更精确的外部路由来迭代FA,那么路由计算的结果就是1.1.1.1/32的下一跳指向ASBR-2,接着ASBR-2会将数据报文送到RouterD,而RouterD可能没有到达1.1.1.1/32的路由,于是出现问题。

可见对于迭代FA的路由进行限制是必要的。


  1.4.问题。

  问:都知道OSPF引入外部路由时,由于5类LSA是在OSPF域内传播是不变的,收到这一条路由的路由器看到的下一跳是外部的,并不知道迭代到内部的哪一个路由器,所以ABR需要用4类LSA声明,去往ASBR走这个ABR。那么NSSA区域引入外部路由,7转5的ABR会生成4类LSA么?为什么?

 解答:不会,因为5类LSR的生成者是Area 0 的ABR,而Area 0 知道生成lsa 5 的 ABR在哪里,所以不需要,当转换后的5类LSA传输到其他区域,对应的ABR才会生成。同理,ASE引入当前区域的也不会生成4类。

 

 1.5问题 

  FA和外部路由强相关,那么这里引申一个问题。

  问:在多个ABR的情况下,OSPF的外部路由能否实现负载均衡?

  

  解答:5类可以,7类可以但是有点复杂。

 

  RFC对于这一块的规定,如果要实现ECMP,必须满足两个条件:

  1,涉及到的路由必须来自于同一区域;

  2,优先级和开销必须相等。

  按照这样说5类也不行,而且5类有RFC如下规定

      当有多条等值的外部路由存在并有多个区域是,优先选择关联的Area ID大的区域。

   但是多数厂商都是默认的负载均衡,没有执行RFC标准。

   

   然而7类LSA只有routerID大的ABR可以转换,无法通过多个ABR到达外部,那如何负载均衡呢,关键是FA地址,直接查找FA的路由,FA地址可以负载就能负载均衡。然而FA地址在ABR是可以抑制的。意味着收到的LSA里面FA为全0.全为0则查找ABR,ABR就一个转换了5类,那么就不能负载了。

    

    但是总有解决办法,华为有一条命令 nssa translator-always,可以让ABR会把7类转5类。注意!一旦有ABR配置了这条命令,只有配置了的ABR才会转,所以需要负载的ABR都需要配置。这样到ABR可以负载,ABR到ASBR又负载。完美解决。