记得在两年以前,在客户那里,有个具牛B的CCIE,叫shivlu.当时他们几个IE正在优化现有的生产网。
然后我偶然学到了一个用loopback地址进行网络优化的办法。
这两天有同事提到了,我再进行复习一下。顺便写成工作笔记,以便以后查阅。
直接上图:
在这个拓扑图中,如果R1的路由表中想有R3的三个loopback的路由,那么一般的方法是,不管R2到R3之间用什么类型的路由协议,将路由重分发到R2的ospf area 0里面,然后R2作为ASBR发送5类LSA给R1,最后同步DD报文,将路由也同步给R1.
最终,R1会有三条OE2的路由,知道下一跳是R2,最终达到R1.
让我们用实验来进行验证一下先,先看看这样做的结果,然后对比一会用loopback在R2上进行巧妙的汇总的区别。
首先在R2上面,用默认的OE2进行重分发:
R2:
然后再在R1上查看路由表,应该有4条路由。一条直连,三条OE2.
这里在R1上面,show ip route summary,一共有4条路由。一条是直连的1.1.1.0/24,三条是对端R2这个ASBR送过来的外部重分发的OE2.
现在转入正题,用loopback0来优化一下网络。
先简单介绍一下环境:
R1和R2建立OSPF邻居。
R2与R3做静态路由,R3上面,直接指一条默认路由到R2.R2上面起三个静态路由到R3的3个环回口。
R3:
interface Loopback0
ip address 192.168.0.1 255.255.255.0
!
interface Loopback1
ip address 192.168.1.1 255.255.255.0
!
interface Loopback2
ip address 192.168.2.1 255.255.255.0
!
interface FastEthernet0/0
ip address 2.1.1.2 255.255.255.0
duplex full
!
end
ip route 0.0.0.0 0.0.0.0 2.1.1.1
R2:
interface FastEthernet0/0
ip address 2.1.1.1 255.255.255.0
duplex full
!
interface FastEthernet1/0
ip address 1.1.1.2 255.255.255.0
duplex full
!
interface Loopback0
ip address 192.168.0.2 255.255.0.0
ip ospf network point-to-point //这条命令相当重要,如果不加的话,R2会把loopback0以32位掩码的主机路由通告给R1,而根本不会管loopback0所人为配置的掩码,这是loopback的一个默认行为.
!
router ospf 1
log-adjacency-changes
network 1.1.1.0 0.0.0.255 area 0
network 192.168.0.0 0.0.255.255 area 0 //把loopback0用16位掩码network到ospf进程,不用重分发的方式将其注入路由表.这样最后在R1上面学习到的应该是一条O的路由,而不是三条OE2的路由。
!
ip route 192.168.0.0 255.255.255.0 2.1.1.2
ip route 192.168.1.0 255.255.255.0 2.1.1.2
ip route 192.168.2.0 255.255.255.0 2.1.1.2
R1:
interface FastEthernet1/0
ip address 1.1.1.1 255.255.255.0
duplex full
!
router ospf 1
log-adjacency-changes
network 1.1.1.0 0.0.0.255 area 0
!
在来看一下这样做以后,是什么样的结果在R1上面:
这里show ip route summary在R1上面只有2条路由。通过show ip route,只有一个O的路由。
并且traceroute和ping都是到R3的。
为什么会这样?当R1在ping 192.168.0.1的时候为什么不是R2的loopback0,而直接指向R3的loopback0去了?
答案就在R2的路由表。
下面是R2的路由表:
当R1 ping 192.168.0.1的时候,在R2的路由表至少有2条路由是符合需求的:
S 192.168.0.0/24 [1/0] via 2.1.1.2
C 192.168.0.0/16 is directly connected, Loopback0
这个时候路由器会进行比较,明细路由优先的原则,然后发现第一条静态是符合需求的。从而直接从第一跳进行转发。
为什么会这样做?这样做的好处是什么?
其实,这是一个实验环境,用GNS3做的,真实的生产网环境比这个复杂很多,在R2这个ASBR上面连接了上百个类似于R3这样的pop站点,每个站点都有些小网段,最后一起到了R2上面以后居然在客户的生产网上面有将近5W条之多。
所以客户才用了这个办法来进行网络的优化,因为在骨干区域的一些设备性能很限,路由条目多了以后,一个是对设备的内存进行着极大的考验,有些小路由器直接就学不完路由。因为内存满了,没有办法装在更多的路由条目。
还有一点是,像这样的网络,网络震荡是极其严重的问题,么有办法去避免,一旦遇到网络震动了以后,一些性能不高的路由器直接CPU就上90%了,转发都要丢包。
所以这样做是最节约资源的。
还有的同学肯定有这样的问题,如此麻烦,如果我在R2上面直接做一个汇总路由不也可以达到相同的效果吗?
最多就是在R1上面学到的是一条OE2的路由,而不是O的路由嘛,O的路由真的会比OE2的路由对设备来说更加节约资源吗?
对,在这个拓扑里面是这样的,因为这个是实验环境,真实的网络area0旁边肯定会下挂子area的吧,那对于那些子area(非骨干区域)来说的话,从R1这个ABR肯定会发送type-4的lsa给非ASBR的区域,而R2这个ASBR会在所有区域发送type-5的LSA.
也就是说,如果使用OSPF路由汇总的功能,那么非area0区域的设备在OSPF的数据库中,还会学到相同的type-5的LSA.
而如果直接是O的路由,就不会有5类的lsa的产生。可别小看那些5类的条目,就算汇总以后,可能也是几千条啊,如果这几千条都没有了,那不是更加节约设备的硬件资源吗?
所以说O肯定比OE2类型的路由节约网络的资源。对客户来说,优化网络等于减少投资,那可是真金白银啊。呵呵。