OSPF全称开放最短路径优先(Open Shortest Path First),属于内部网关协议(IGP)中的链路状态路由协议,协议号89,直接封装在IP报文中传输。当前主流版本为OSPFv2(IPv4,RFC 2328)和OSPFv3(IPv6,RFC 5340)。
OSPF路由器交互的是链路状态信息而非路由表条目——每台路由器将直连链路封装成链路状态通告(LSA)泛洪至整个区域。区域内所有路由器的链路状态数据库(LSDB)一致后,各自以自身为根运行Dijkstra算法计算最短路径树并生成路由表。这就是链路状态与距离矢量的本质区别:前者掌握全网拓扑,后者仅知邻居方向。
正因对拓扑的精确掌握,OSPF天然支持无环路由、快速收敛、区域分层和VLSM/CIDR,成为企业网和运营商骨干网的事实标准。软考网络工程师科目中OSPF考查频率最高,涉及选择、填空和案例分析,考生必须理解底层机制而非死记硬背。
理解OSPF需抓住三个核心:邻居发现与邻接建立、LSDB同步、SPF计算。三者环环相扣,任一环节出问题即导致路由异常,正是命题人最常设陷阱之处。
邻居发现始于Hello报文。OSPF路由器周期性(广播网络默认10秒)向组播地址224.0.0.5发送Hello,携带有路由器ID、区域ID、Hello间隔、Dead间隔、认证信息和邻居列表。两台路由器必须满足区域ID一致、Hello与Dead间隔一致、认证方式一致、子网掩码一致(广播网络)、区域类型一致,才能进入后续阶段。区域号写错、认证不匹配或Hello计时器被修改都会导致邻居建立失败——这些正是真题高频考点。
邻居状态机共有八种状态:Down、Attempt、Init、2-Way、ExStart、Exchange、Loading和Full。每种状态都有明确的触发条件和转换规则。从Down到Init意味着收到了对方发来的Hello报文;达到2-Way状态说明双方都在Hello报文的邻居列表中看到了对方,这是广播网络上DR/BDR选举的前提条件。在广播多路访问网络(如以太网)中,路由器并不会两两都建立完全邻接关系,否则在N台路由器的场景下将形成N×(N-1)/2条邻接,LSDB同步的报文交互将变成一场广播风暴。OSPF的解决方案是选举指定路由器(DR)和备份指定路由器(BDR),所有非DR/BDR路由器(称为DR Other)只与DR和BDR建立Full邻接关系,DR Other之间停留在2-Way状态。DR负责代表该网段生成类型2的LSA(Network-LSA),向外通告该网段的完整成员信息。
DR选举规则经常被命题人用来设计迷惑选项。选举依据两个参数:接口优先级和路由器ID。优先级取值范围为0到255,默认值为1,优先级为0表示该路由器永远不参与DR/BDR选举。选举时先比较优先级,数值大的当选DR;优先级相同则比较路由器ID,数值大的获胜。这里有一个关键的"非抢占"特性:DR一旦选出,即使后来出现优先级更高的路由器,也不会主动抢占,除非DR故障或手动清除OSPF进程。但BDR如果故障,会从剩余路由器中重新选举新的BDR。真题中多次出现类似场景:一台优先级为100的路由器后加入网络,但原有的DR优先级只有1,问最终谁是DR——答案仍然是原来的低优先级路由器,因为DR不抢占。
链路状态数据库同步依赖于OSPF的可靠泛洪。邻接进入ExStart后交换DBD报文完成主从协商,Exchange阶段互传LSA摘要,Loading阶段通过LSR和LSU获取缺失LSA,最终LSDB一致进入Full。LSU中每个LSA都需LSAck确认,无确认则重传,这就是OSPF可靠传输的保证。
SPF计算环节:路由器以自身为根,将Router-LSA和Network-LSA构建成有向图,边权值为接口开销(Cost=参考带宽/接口带宽,默认100Mbps),运行Dijkstra算法生成最短路径树。任何LSA变化都会触发局部或全局SPF重算,实现秒级收敛。
OSPF根据底层链路层协议的不同定义了四种网络类型,每种类型的Hello间隔、邻居发现机制和LSA封装方式均有差异。广播类型(Broadcast)对应以太网,自动发现邻居,需要DR/BDR选举,Hello间隔10秒;非广播多路访问类型(NBMA)对应帧中继和ATM,需手动指定邻居,同样有DR/BDR选举,Hello间隔30秒;点到点类型(P2P)对应PPP和HDLC链路,自动发现邻居,无需DR/BDR,Hello间隔10秒;点到多点类型(P2MP)需手动配置,将NBMA网络虚拟为多条P2P链路,无需DR/BDR。2024年上半年真题直接考查了广播多址网络和非广播多址网络的典型对应关系(Ethernet对应Broadcast,Frame Relay对应NBMA),这个知识点几乎每次考试都会以不同形式出现。
区域(Area)是OSPF实现分层设计的核心机制。所有非骨干区域必须直接连接到骨干区域Area 0,区域间路由通过区域边界路由器(ABR)传递。这种星型拓扑结构使得某一区域内的链路震荡不会引发全网SPF重算,极大地降低了路由收敛对CPU的冲击。区域内的路由器拥有完全相同的LSDB;不同区域的路由器只通过ABR接收汇总后的路由信息。区域划分为骨干区域、标准区域、末梢区域(Stub)、完全末梢区域(Totally Stub)和非纯末梢区域(NSSA)。Stub区域的特点是ABR会拦截来自骨干区域的Type 5外部LSA,改为下发一条默认路由,以此缩减区域内路由器的LSDB规模和路由表条目数。NSSA区域则允许本区域引入外部路由,但在ABR处将其转化为Type 7再转换为Type 5传出。这些区域类型的选择是网络设计的重要决策点,也是软考案例分析题的必考内容。
LSA类型是OSPF知识体系的骨架。Type 1(Router-LSA)由每台路由器生成,描述自身所有接口的链路状态和开销,仅在区域内泛洪;Type 2(Network-LSA)由DR生成,列出该广播网段上的所有路由器,仅在区域内泛洪;Type 3(Network Summary LSA)由ABR生成,将某个区域内的路由汇总后通告到其他区域;Type 4(ASBR Summary LSA)由ABR生成,用于告知其他区域如何到达ASBR;Type 5(AS External LSA)由ASBR生成,描述从OSPF域外引入的路由,在整个AS内泛洪(Stub区域除外);Type 7(NSSA External LSA)由NSSA区域内的ASBR生成,仅在NSSA区域内泛洪,在ABR处被转换为Type 5。理解了这六种LSA的生成者、泛洪范围和作用,就等于掌握了OSPF路由传递的全貌。真题中常见的问法是给出一个拓扑,问某个LSA由谁生成、传递到哪些区域,这要求考生对LSA的生成角色和泛洪边界有清晰的空间认知。
第一个坑:把DR选举优先级和路由器ID的比较顺序搞反。正确的逻辑是先比优先级,再比RID。很多考生记住了RID大的当选,就以为任何时候都是RID说了算,忽略了优先级更高的优先规则。真题中优先级为100而RID较小时,当选DR的是高优先级路由器而非高RID路由器。
第二个坑:混淆OSPF的邻居状态与邻接状态。邻居状态是两台路由器之间Hello交互的
本篇完!