Technorati 标签: OSPF,CCIE,OE1,OE2,forward metric
从OSPF的ASBR重分发的外部路由,会生成OE1和OE2的两类路由在OSPF区域中进行传递。
cisco默认的外部路由的类型是OE2.默认的metric=20,不会根据链路的cost进行累加。
而OE1必须要经过手工指定以后才能在OSPF区域内进行传递。在该文档中会把OE1和OE2通过实验都详细验证一次,然后看看区别在哪里,最后还有一个关于OE2路由的问题是forward metric,这个知识点很少用到,但是需要了解。算是一个高级知识点吧。
好了,下面来看看OE1和OE2的区别。
下面是实验拓扑图:(实验配置就不提供了,这里主要阐述原理,在看这个文档之前至少需要了解清楚ospf的基本配置)
这个拓扑图中,首先介绍一下情况。R1在area 0骨干区域,R2是ABR,分别连接R1和R3,R3在Area 10中,R4是ASBR,后面的网络是EIGRP.
在这样的情况下,如果在R4上面的配置为:
注意黄色的配置,把无类的eigrp 100重分发到OSPF 1中,那么R4就会将以5类LSA扩散到OSPF的所有区域。最后R1上面也会收到相关的路由消息,最后把路由表同步过来,在R1上面show ip route就可以看到到172.16.0.0/16的路由。(关于1-5类的LSA实验详解请参考http://361531.blog.51cto.com/351531/687142)
最后在R1上面可以看到收到3条OE2的路由。
这里可以看到在R1上面,有3条OE2的路由,E2--OSPF external type 2.
我们可以看到每条路由的cost都是20.不会因为经过了3跳以后就累加进路由去。
也就是说,外部路由E2类型是cisco默认的类型,如果不手动指定,那么一直都会以2类的路由进行扩散。
再来看看OE1.需要在R4上面做手工指定的配置才能将默认的OE2转换成OE1:
下面看看R4的配置变更,需要用到命令metric-type 1.
这里特别手工指定了metric-type=1.那么一会就回更新路由类型到R1,R1再show ip route的时候,应该会发现到达172.16.0.0的所有三条路由的类型全部变成了OE1.
最后再仔细看看,OE1的时候,耗费一栏是23,也就是说,20+1+1+1=23,把三段链路的耗费做了一个总和最后加上20.
这里再补充一个知识点,如果想让耗费增加,是在学习路由的方向,也就是对应R1/R2/R3的入方向做ip cost xxx才能有效增加总耗费。
根据上面拓扑图的原理,这里来进行验证一下,首先在R3的F1/0修改cost为2
最后到R1上面看看相关的OE1的路由:
三条OE1的路由耗费全部都变成了24.
下面是关于OE2的一个高级点的知识点,forward metric的概念。看看下面的拓扑图:
在这个拓扑图中,请注意R6和R4的network的网段,完全一样。
让我们带到问题来验证这个问题:
两个ASBR分别都起了三个loopback接口,并且三个loopback接口完全一样,那么根据我们上面所提到的OE2的原则,外部重分布进OSPF的路由总是20,并不会累加ospf区域内的链路的cost,在这种极端的情况下,如果R6和R4都是用的cisco默认的OE2路由到R1的话,那么在R3上面是否会负载均衡呢?
让我们先用实验说话,再说明forward metric的作用。
把实验环境搭建好以后,在R6和R4用相同的充分发命令不带metric-type.两台ASBR通过OE2路由通告给area 0的R1.
那么根据OE2的原理,不会累加耗费,所以两个ASBR传递给R3的路由应该都是20才对,又根据ospf的原理,根据链路耗费来进行选录,如果耗费相同,那么R3上面应该show ip route 172.16.0.0的时候应该是负载均衡才对。
结果是这样的吗?
首先看R6和R4的配置:
R6:
hostname R6
!
interface Loopback0
ip address 60.60.60.60 255.255.255.255
!
interface Loopback1
ip address 172.16.1.1 255.255.255.0
!
interface Loopback2
ip address 172.16.2.1 255.255.255.0
!
interface Loopback3
ip address 172.16.3.1 255.255.255.0
!
interface FastEthernet0/0
ip address 6.1.1.2 255.255.255.0
duplex full
!
router eigrp 100
network 172.16.1.0 0.0.0.255
network 172.16.2.0 0.0.0.255
network 172.16.3.0 0.0.0.255
no auto-summary
!
router ospf 1
router-id 60.60.60.60
log-adjacency-changes
redistribute eigrp 100 subnets
network 6.1.1.0 0.0.0.255 area 10
network 60.60.60.60 0.0.0.0 area 10
!
R4:
hostname R4
interface Loopback0
ip address 40.40.40.40 255.255.255.255
!
interface Loopback1
ip address 172.16.1.1 255.255.255.0
!
interface Loopback2
ip address 172.16.2.1 255.255.255.0
!
interface Loopback3
ip address 172.16.3.1 255.255.255.0
!
interface FastEthernet1/0
ip address 3.1.1.2 255.255.255.0
duplex full
speed auto
!
router eigrp 100
network 172.16.1.0 0.0.0.255
network 172.16.2.0 0.0.0.255
network 172.16.3.0 0.0.0.255
no auto-summary
!
router ospf 1
router-id 40.40.40.40
log-adjacency-changes
redistribute eigrp 100 subnets
network 3.1.1.0 0.0.0.255 area 10
network 40.40.40.40 0.0.0.0 area 10
!
最后在R3上面看看两条耗费相同的路由通告过来,是否形成了负载均衡的局面:
通过实验证明并没有形成负载均衡,那么这里的172.16.0.0的路由最终到底是在R4上面还是在R6上面呢?
通过traceroute发现居然是R4:
这里你可以反复验证,绝对目的地是R4.而不可能是R6,除非R4的172.16.0.0的路由down了,不通告了,那么才能轮到R6.
为什么会这样呢?
这个是因为OE2的路由中,当碰到这样的极端问题的时候,还会有一个东西叫forward metric.
在这种极端情况下,R1/R2/R3还是会看哪里的耗费小,对于到目的地只有一条路径的时候,那么那个20始终是20的耗费,如果有多条路径可以同时到达对端,这时候OE2会看哪条链路的总耗费小。
对于R1来说,要到R4,总耗费为3(这里forward metric不需要加上20),而如果要到R6的话,总耗费需要4(这里forward metric不需要加上20).
所以最终只会选择R4走最短路径。这是ospf的一个原理的特征。
说了那么多,在哪里可以看forward metric这个东西呢?
现在在R1上面:
这里可以看到,管理距离110,耗费cost20,类型为2类external,最后一个就是forward metric.是3.
下面我还专门traceroute了一下。路径是R1->R2->R3->R4.
好,我再做一个实验。请参考拓扑图,我把R4的F1/0 shutdown.这个时候R1只能学到172.16.0.0网段通过R6学到,让我们看看R1的路由有什么变化。
当shutdown R4的F1/0后,在R1上面show ip route 的话,根本看不出和之前R4正常的时候有什么区别,
耗费还是20.都是通过下一跳R2走的。
但是如果细心的人会发现,show ip route 172.16.1.1这个时候在R1上面发生了细微的变化:
请和上面的show ip route 还有traceroute对比一下,对,就是forward metric从以前的3变成了4.
forward metric其实就是在计算OSPF区域内链路的cost耗费总和。
现在R4路由器没有了,所以traceroute到的目的就是R6了。而R6到R1的总链路耗费是4.
说到这里,大家应该都明白了,当有两条链路都可以到目的地的时候,OE2不是我们想象中的那样会坐负载均衡,而是会优先选路。
最后再来一个思考题:
如果在R3上面我们想看到最后show ip route 172.16.0.0的路由表称为负载均衡,我们应该如何设置呢?
答案:
在R3的F1/0设置为ip ospf cost=2.这样就可以负载均衡了。
在R3上面:
最后在R3上面看到的结果就是负载均衡了。
仅仅是一个实例,实际上我一直都有一个疑问,为什么OSPF默认为OE2?既然默认为OE2,耗费都是20,那么就应该在这种情况下默认为负载均衡,因为ospf比较的就是cost,如果在这种环境下,不负载均衡,那么默认为OE1就可以满足需求,而不需要引入forward metric这个概念。既然引入了OE2,最终不管采用任何手段达到的效果是OE1的默认效果。为什么会这样?
请教了一位CCIE同事,他得结论很经典,RFC就是这样规定的。
呵呵,真的感觉有点脱了裤子放屁----多此一举了.......
大家可以一起分享一下这个设计的看法.......