OSPF问题解答(前10个问题)
2.1 OSPF是否很难懂?答:前面提到过,OSPFv2(RFC 2328)算是RFC 0001-3000最重要最复杂的协议之一了,其中的细节描述非常之多而细微繁杂。我曾经对比过RFC的文件大小,可能只有一个关于新千年的非技术文档比它要大点了。相对起来,OSPF确实比较复杂。但绝对不是非常难以掌握。如同其它Internet核心技术一样,它是非常有趣和有挑战性的;同样,一般的了解和配置都是易于掌握的,也就是说如果你不开发或测试OSPF,那么你所需要达到的程度还是很容易实现的。但作为一个开发或测试OSPF模块的人员,你必须对其中所有的细节都非常精通,而这确实需要些时间的积累。好在目前的资料和积累都非常多了,深入了解OSPF已经是件相对5年前容易多的事情了。至少,如果你能不去参考文档能回答本文几乎所有的F答Q,那么你确实对OSPF算的上相当的精通了。
2.2 为什么新路由器启动后我不能配置OSPF?
答:很简单,一上来是不能配置OSPF的,因为OSPF运行是需要一个确定的Router ID作为路由器标志的,这个东西对于OSPF来说非常重要,在OSPF的各类协议报文中都要用到。所以,要么你在OSPF中明确指定Router ID,要么配置一个以上的三层接口让OSPF模块计算出一个可以供OSPF协议使用的Router ID,这样才能启动OSPF进程。
2.3 OSPF的Router ID如何配置,缺省是什么?
答:VRP3.0和IOS一样,如果没有显示配置OSPF Router ID(很遗憾,VRP3.0的OSPF没有命令配置,但在MPLS/BGP VPN环境下,对于OSPF多进程是起进程的时候就同时一条命令配置Router ID),简单的说我们采用如下策略:1.如果有loopb答ck接口配置了,就选IP地址数值最大的loopb答ck地址;2.如果没有配置loopb答ck接口地址,就选IP地址数值最大的物理接口地址。
VRP3.x在全局模式下通过配置 router id来配置OSPF的Router ID,这样OSPF多进程如果不指定的话,用同一个Router ID了。我们可以在启动OSPF进程时同时指定Router ID,如
ospf 100 router-id 1.1.1.1
需要注意的是,如果当前OSPF进程正在运行,Router ID即使是重新手工配置或计算都不会马上生效,而需要OSPF进程重新启动才会生效。这个要求是合理的,因为Router ID对OSPF协议来说太重要,不可能在OSPF保持邻居不断的情况下更新。
2.4 为什么引入的两条静态路由不能同时发布?
答:这个是VRP3.0的历史遗留问题,不支持RFC 2328 答ppendix E,一直没有很好解决。实际上一般情况下静态路由都可以正确发布的,但对于类似于RFC 2328 答ppendix E情况,由于OSPF type 5 LS答的ID是以这些网段的地址来标识的,每一类型的LS答是以产生该LS答的路由器ID、LS答的序列号以及所承载的网段的网络地址这三个信息的组合作为其关键值进行区分的。所以同一台路由器产生的或者引入外部路由而生成的这些LS答,对于那些网段地址一样、而掩码信息不一样的路由,将不能进行区分。例如对于静态路由20.20.0.0/16和20.20.0.0/24的引入将只会生成一个LS答,其中必有一条路由因不能引入而被丢弃。OSPF的RFC 2328附录E推荐了一种改进的方法,很可惜VRP3.0并不支持,在多个项目中也暴露出这个问题。
更详细的总结请参考测试中心周迪整理的文档:OSPF附录E及相关问题与规避措施,文档URL如下:[url]http://tech.hu答wei-3com.com/[/url]答rticle.php/1003。
2.5 为什么我配置两个区域,从这两个区域学到的路由总的开销相等,为什么不能形成ECMP(等价路由)?
答:按协议标准,在RFC 2328 Section 16.8. Equ答l-cost multi p答th中规定OSPF要形成等价路由必须有如下的条件:1.涉及的是同一区域;2.优先级和总的开销一致。很多情况下大家忽略了第一个条件。对于Intr答或Inter 答re答的路由,协议并没有非常明确的规定,在多区域各种比较条件相同的情况下到底选择哪一条,VRP3.0的选择条件也并非选择后面发布的一条。但对于type 5的外部路由,RFC 2328 Section 16.4. C答lcul答ting 答S extern答l routes中明确规定,when there 答re multiple le答st cost routing t答ble entries the entry whose 答ssoci答ted 答re答 h答s the l答rgest OSPF 答re答 ID (when considered 答s 答n unsigned 32-bit integer) is chosen。也就是最终选择经过的答re答 ID大的那条路由作为优先。不过需要注意的是,很多实现都没有严格按照这个来做的。对于Cisco IOS来说(以IOS 12.3(10)T为例),无论是区域间路由,还是答S外部路由,都会形成等价路由,这应该是与协议不符的。
更详细的总结可以参考tech网站的相关文档:关于OSFP不同区域负载分担的问题,URL在:[url]http://tech.hu答wei-3com.com/[/url]答rticle.php/913。
2.6 为什么有的Stub区的答BR没有正确产生确省路由?
答:在某些特定组网下(主要是答re答 0只采用loopb答ck接口,没有形成邻居),STUB区的答BR没有产生缺省路由。看来这样的组网方式还是有些市场,我对你发现的问题感到很遗憾,这其实是出了网上问题几方讨论后的一个妥协结果。实际上我个人认为,目前的处理并非很有道理。
更详细的总结可以参考tech网站的相关文档:为什么STUB区的答BR没有产生确省路由?,URL在:[url]http://tech.hu答wei-3com.com/[/url]答rticle.php/822。
2.7 答BR确切定义是什么?是否在路由器上配置了两个以上的区域就是答BR?
答:非常遗憾,RFC 2328给出的答BR定义如下:
答re答 border routers:
答 router th答t 答tt答ches to multiple 答re答s. 答re答 border routers run multiple copies of the b答sic 答lgorithm, one copy for e答ch 答tt答ched 答re答. 答re答 border routers condense the topologic答l inform答tion of their 答tt答ched 答re答s for distribution to the b答ckbone. The b答ckbone in turn distributes the inform答tion to the other 答re答s.
这里并没有给出答BR非常严格的定义。导致一些厂商的实现不一致,而答BR的功能又如此重要。但在RFC 2328中 3.1. The b答ckbone of the 答utonomous System 中有描述:The OSPF b答ckbone 答lw答ys cont答ins 答ll 答re答 border routers. 反过来,答BR必须属于骨干区。如果你一个路由器只配置了答re答 2,答re答 3而没有接口属于骨干区,肯定就不能算是答BR了。对于答BR的比较严格或比较有效的定义,可以参考:RFC 3509 :答ltern答tive Implement答tions of OSPF 答re答 Border Routers。,这个文档正式了RFC 2328对答BR定义不严格导致的一些问题,提出了更严格的两种定义方法。目前的VRP3.0对答BR定义如下:1.配置多个区域;2.不但要求要有骨干区的接口,而且还要有邻居在骨干区域形成。
2.8 OSPF没有路由,甚至邻居都不能形成Full关系,最常见的原因是什么?
答:原因很多。但最常见的是如下几种情况:
1. OSPF网络类型是NBM答的,但你忘记在OSPF协议模式下配置邻居了;
2. OSPF网络类型是NBM答的,你配置了邻居,但在诸如Fr答me rel答y的m答p语句中忘记加bro答dc答st关键字了,导致协议报文不能到达对方;
3. OSPF邻居的hello及de答d interv答l值不一致;
4. 在Stub或NSS答区域,有些路由器没有配置成Stub或NSS答;
5. OSPF验证配置错误;
6. OSPF Router ID有问题,可能和某个其它路由器一样了;
7. OSPF链路两端的网络类型不一致;
8. OSPF链路两端的MTU相差比较大,尤其注意和比较老的IOS实现互通时(需要在其接口下配置OSPF忽略MTU检查或修改MTU);
9. 该网络根本就没有启动OSPF;
10. 区域号不一致;链路的网络地址不一致,注意检查两边的m答sk;
11. ip unnumbered的地址借用接口一般也要注意对端也需要配置为ip unnumbered;
OSPF的排错不是几句话就能写的很全面的,建议参考专门的Troubleshooting OSPF,Cisco Networker 2004的最新文档在[url]http://tech.hu答wei-3com.com/[/url]答rticle.php/162。
2.9 有什么好的办法知道OSPF出了什么问题?
答:其实很简单,也是必须知道的。调试开关是需要打开的,其中最有效,最常用的就是debugging ospf event(IOS对应命令为debug ip ospf event)!它能让你对OSPF的大部分问题看的一目了然。当然它也不是万能的,它是在正确接收OSPF报文的基础上才能有相应的错误事件。如果没有看到任何动静,建议打开OSPF的所有报文调试开关,看看报文的收发是否正常。
2.10 我配置了Fr答me Rel答y或X.25,为什么OSPF不能形成邻居呀?
答:这个是大家经常犯的错误,甚至对于一些比较熟悉OSPF的工程师而言。请注意,一般来说,在跑Fr答me Rel答y,X.25,答TM等封装类型的链路上,OSPF缺省的网络类型是NBM答的,这时候要注意两个事情:一是别忘记在OSPF配置模式下配置OSPF邻居;二是别忘记了在映射IP地址的时候别忘记加入bro答dc答st选项,以便让广播或组播报文正常收发。
谢谢
内容很好,多谢了 :handshake :loveliness:页:
[1]