一个单一的IP路由协议是管理网络中IP路由的首选方案。
Cisco IOS能执行多个路由协议,每一个路由协议和该路由协议所服务的网络属于同一个自治系统。
Cisco IOS使用路由重分发特性以交换由不同协议创建的路由信息。
一台路由器上运行多种路由协议并不意味着重分发就会自动进行,重分发必须被配置以后才能进行。
路由重分发通常在那些负责从一个AS学习路由,然后向另一个AS广播的路由器上进行配置。例如,一台路由器既运行OSPF又运行RIP,如果OSPF进程被配置为通告由RIP学习到的路由到OSPF AS中,那么这种做法就可以称为“重分发RIP”。
现实网络中的情况是存在多种路由协议的,并且这些网络要互联互通,那就必须至少有一台路由器运行多种路由协议来实现不同网络中的通信。因此,路由重分发的问题不可避免。
进行路由重分发时,不管是有类地址还是无类地址,都需要考虑每种路由协议的能力及特性,最常考虑的两个因素是度量值和管理距离。
1、度量值:代表距离,他们用来在寻找路由时确定最优路由。每一种理由算法在产生路由表时都会为每一条通过网络的路径产生一个数值(度量值),最小的值表示最优路径值。度量值的计算可以只考虑路径的一个特性,但更复杂的度量值是综合了路径的多个特性产生的。
一些常用的度量值有跳数、成本、带宽、时延、负载、可靠性、最大传输单元(MTU)等。
OSPF路由协议的度量值为成本,而RIP的度量值为跳数。
2、管理距离:管理距离是指一种路由协议的路由可信度。每一种路由协议按可靠性从高到低依次分配一个信任等级,这个信任等级就是管理距离。对于两种不同的路由协议到一个目的地的路由信息,路由器首先根据管理距离决定相信那个协议。
下图为Cisco IOS使用的默认管理距离(这个管理距离也可以理解为优先级,优先级低的优先选择)
OSPF路由协议之“路由重分发”及“NSSA区域”_第1张图片
重分发到OSPF AS中路由的路径类型分为两种:
类型1(E1)的外部路径和类型2(E2)的外部路径。它们两种类型的区别是,计算开销值的方法不一样,类型1计算开销值是这条路由的外部开销(ASBR指定)加上路由器到达ASBR路由器的路径开销之和。类型2的计算方法是值需要考虑外部路由在OSPF外部的开销,而忽略到达ASBR路由器的内部开销。
配置路由重分发需要注意以下几个方面:
1、决定在哪里添加新的协议
2、确定ASBR
3、决定那个协议在核心,那个协议在边界
4、决定进行路由重分发的方向
下面的配置就是在RIP和OSPF之间进行重分发的命令实例:
R1(config)#router rip
R1(config-router)#redistribute ospf 1 metric 10
R1(config)#router ospf 1
R1(config-router)#redistribute rip subnets
在这里,metric:是一个可选的参数,用来指明路由重分发的度量值,在RIP协议中重分发OSPF协议时需要指定metric值,否则在RIP中无法学习到重分发的路由条目。
subnets:表示连其子网一块宣告。
在以上实例中,由OSPF派生的路由被充分发到了RIP路由中,并且度量值跳数为10.由RIP派生的路由被重分发到OSPF之中,作为类型2的外部路由,并给OSPF定一个开销为200(如果不指定metric,则默认开销为20)。
重分发静态路由时,只需要在OSPF中发布即可:
R1(config)#router ospf 1
R1(config-router)#redistribute static 10 subnets metric-type 2
如果要重分发直连路由,只需要将上方代码中的“static”改为“connected” 即可。
如果重分发默认路由的话,需要使用“default-information originate”命令,通知OSPF路由器使它成为一个ASBR:
R1(config)#router ospf 1
R1(config-router)#default-information originate

由于OSPF网络中末梢区域不允许存在ASBR,所以在一台属于末梢区域的路由器上配置重分发路由到OSPF区域是无法实现的。
当重分发路由时,如果路由器所属区域的类型是末梢区域,会有相应的提示出现,所以在配置的时候一定要注意观察,以免出现类似的问题。提示如下:
OSPF路由协议之“路由重分发”及“NSSA区域”
那么该如何解决呢:
一是将末梢区域中的路由器都使用命令“no area 1 stub”将末梢区域更改为标准区域,但是,在这个区域中的路由器性能比较差,如果改为标准区域,那么可能会导致路由器的内存、CPU等资源占用率较高,从而导致转发缓慢或出现网络故障。
二则是将该区域配置为非纯末梢区域(NSSA)。

非末梢区域允许外部路由通告到OSPF AS外部,而同时保留AS其余部分的末梢区域特征,为了做到这一点,在NSSA区域内的ASBR用始发类型7的LSA来通告那些外部的目的网络。这些NSSA区域外部的LSA将在整个NSSA区域中进行泛洪,但是会在ABR路由器的地方被阻塞。
NSSA外部LSA通告几乎和外部LSA通告是相同的。只是不像AS外部LSA通告那样在整个OSPF AS中进行泛洪,NSSA外部LSA通告仅仅在始发这个NSSA外部LSA通告的非纯末梢区域内部进行泛洪,NSSA区域中的ABR路由器可以将LSA7通告转换为LSA5,并且将LSA泛洪到其他区域中去。
OSPF路由协议之“路由重分发”及“NSSA区域”_第2张图片
如图所示:
NSSA区域是OSPF RFC的补遗:

  • 定义了特殊的LSA7类型
  • 提供类似stub area 和 totally stubby area 的优点
  • 主要它还可以包含ASBR
    NSSA重分发到OSPF中的路由器也是两种类型,在NSSA区域的路由表中显示为N1和N2,当其经过ABR转换成为LSA5通告后,N1转换为E1,N2转换为E2。
    在NSSA区域的路由器上查看路由表,重分发的条目如下:
    OSPF路由协议之“路由重分发”及“NSSA区域”
    经过ABR转换后,在其他区域显示到的重分发路由条目如下:
    OSPF路由协议之“路由重分发”及“NSSA区域”
    NSSA的配置很简单,在需要配置的区域内的路由器上进入OSPF,执行area area-id nssa即可配置为NSSA区域,但是NSSA区域与其他区域重分发路由的通信还是有问题,需要进一步配置,才可正常通信。
    因为当使用area 区域号 nssa命令后,ABR并不通告一条指向ABR的类型3的LSA默认路由,而NSSA区域中又无法泛洪LSA4和LSA5通告,导致NSSA区域中的路由器无法获得从其他区域重分发的路由条目,最终导致NSSA区域与其他区域不能通信,这时可以使用以下命令生成LSA3的默认路由:
    area area-id default-information-originate
    area area-id nssa no-summary(因为 RIP v2在网络边界进行汇总,所以需要关闭自动汇总)