ospf virtrual-link 传递区域和area 0 的汇总问题

来源:互联网 发布:淘宝新店刷信誉 编辑:程序博客网 时间:2024/05/16 02:10


根据RFC2328,骨干区域的汇总条目将不允许出现在virtraul-link的传递区域中,但没有给出具体原因。下面我们对此问题具体分析:abr1 和abr2 之间建立了虚链路,上图中 area0 的区域汇总不允许出现在area 20中,这是因为如果启用了虚链路,abr2实际就变成了Area0 和area 30的边界路由器,即,abr2实际也是区域0的一部分,因此需要有区域0中所有的LSA条目,也就是说,一个区域内的osfp路由器的lsa应该是一致的,如果一个区域20传递了区域0的汇总,则不再将明细路由通告,这时虽然对于VL-AREA(AREA 20)中其他非边缘路由器只学到汇总路由没有理论上的问题,但abr2是通过area20 中的其他非边缘路由器学到的关于area0的各项路由条目(除了abr1与abr2之间没有其他路由器的特殊情况),如果abr1只通告汇总,则abr2也只能收到一个汇总条目,学不到area0内的明细,因而违反了一个区域内的osfp路由器的lsa应该是一致这项ospf的规定,因此不能通告汇总,所以厂商的路由器具体实现就是,abr1一旦启用virtrual-link,则即使配置了area0 的汇总,也不会再通告出去,而是通告具体条目,查看abr1 abr2的LSDB,可以发现abr1是area0和area20 的一部分,但abr2时area0 20 30的一部分(虚链路使abr2成为了area0的一部分),所以,abr1必须让abr2知道area0的明细,所以不能只通告汇总,但abr1不是area30的一部分,因此abr2可以只通告给abr1关于area30的一条汇总,实验证明,的确如此,也就是说,虚链路解决的是其他区域与骨干的互联问题,因此只有骨干的汇总在启用虚链路后不起作用,而其他区域的汇总是可以传给abr1的。还有一个一点需要注意的是:虚链路的原理和tunnel是完全不同的,后者虽然可以在物理链路上创建逻辑通路,但是它们之间是互相独立的,也就是说,一个路由器从物理链路和物理链路创建的tunnel学到的同一目标地址是当成两条路由处理(隧道的递归封装问题也是这个原因引起的),但虚链路并不能从物理链路独立出来,有人说这样一个错误原因:假设可以传递汇总,如果area20中某个非边缘路由器要去往area0汇总之前的一个明确条目的网络,要是距离abr2的距离更近的话,会选择先到达abr2,而abr2的汇总又是通过abr1传过来的,因此abr2又会将数据包经由area20 发到abr1,如果发包的路由器在abr1和abr2相连的路径上,就引起了环路。这个理由是错误的,因为虚链路虽然名字如此,但它并不是与物理链路相互独立,abr2 学到的区域0汇总一定是由物理链路传来的(假设可以传递骨干汇总),因此area20中其他非边缘不可能迂回到abr2,因为abr2的汇总是经由本地传过去的,area20 的非边缘路由器去往area0某个子网的最佳路由一定是直接去往abr1。虚链路不会把从物理链路学到的信息再从虚链路传回去,一定要搞清楚虚链路是与隧道技术是不同的,虚链路的目的只是为了使abr2虚假的连接到了area0,而不能像tunnel那样当成通路来传递其他路由信息。当然,第一个原因是可以解释通的,总之,很多方面都不允许VL-AREA传递骨干区域的汇总,而且,厂商也按照RFC的建议实施了解决方案。

更多关于此问题的讨论请见Cisco 官方学习空间,但论坛只讨论了后一种理由,这是不完美的解释,第一种解释应该是更合理的:https://learningnetwork.cisco.com/thread/3813?start=0&tstart=0,如果你也是网络达人,热爱网络,或者对RFC有深入研究,大家可以在此讨论更多的问题。