1. 为什么OSPF成了网络岗面试的“必考题”
干网络这行十几年,带过不少新人,也帮朋友做过模拟面试。有个现象特别明显:不管你是面运维、面实施、还是面售后技术支持,只要JD里出现“路由协议”四个字,OSPF几乎百分百会被问到。原因不复杂——园区网、企业骨干、数据中心互联,OSPF的部署密度太高了。它不像BGP那样偏策略和边界,也不像静态路由那样“没得聊”,OSPF恰好卡在一个既能考察理论基础、又能检验排错思路的位置上。
面试官问OSPF,从来不是想听你把RFC背一遍。他们真正想确认的是三件事:你懂不懂它的状态机怎么跑、你知不知道报文交互的节奏、你能不能在实际故障里快速定位。这篇文章我就按面试官最爱问的顺序,把OSPF常见问题拆开揉碎讲一遍。每个问题我都会先给“面试官想听什么”,再给“实际怎么答”,最后补上“我踩过的坑”。不管你是刚学完CCNA的小白,还是准备跳槽的中级工程师,这篇内容都能直接拿去当复习提纲。
2. OSPF基础概念类问题拆解
1.1 邻居和邻接到底差在哪
这是OSPF面试的“开胃菜”,但答不好直接暴露基础不牢。很多候选人会说“邻居就是能互相发hello,邻接就是能同步数据库”,这个说法对,但太浅。面试官想听的是:邻居是双向通信的起点,邻接是数据库同步的前提。
具体来说,两台路由器收到对方的Hello包并且参数匹配,就进入邻居关系。但只有特定网络类型下才会继续建立邻接。比如广播网络中,DR和BDR之间、DR和所有DRother之间会形成邻接,而DRother之间只停留在邻居状态。点对点网络里,两端直接形成邻接。这个区别直接决定了LSA泛洪的范围。
我一般会补一句:邻居关系看Hello,邻接关系看DD报文。如果你能说出“邻居不一定邻接,但邻接一定是邻居”,面试官基本就认可你理解到位了。
1.2 Router ID怎么选,能不能重复
Router ID是OSPF的“身份证”,32位无符号整数,格式跟IP地址一样。选举顺序是:手动配置优先,没配就用Loopback接口里最大的IP,再没有就用物理接口里最大的IP。这里有个细节:Router ID一旦选定,不会因为接口IP变化而自动更新,除非重启OSPF进程或者手动重置。
面试官常追问:“两台路由器Router ID一样会怎样?”答案是邻居建不起来,因为OSPF用Router ID唯一标识设备,冲突时状态机会卡在Init或ExStart。实际排错时,display ospf peer看到邻居状态反复跳,第一反应就该查Router ID。
注意:华为设备用
ospf 1 router-id x.x.x.x,思科用router ospf 1下面跟router-id x.x.x.x。配完最好reset ospf process,不然不生效。
1.3 五种报文类型各自干什么
OSPF五种报文:Hello、DD、LSR、LSU、LSAck。面试官喜欢让你按顺序说清楚它们在哪個阶段出现。
Hello报文负责发现和维护邻居,默认10秒发一次,Dead时间40秒。DD报文携带LSDB摘要,用来协商主从和交换数据库描述。LSR是请求缺失的LSA,LSU是携带完整LSA的更新包,LSAck是确认收到LSU。这里有个容易错的点:DD报文本身不携带完整LSA,只带头部信息,真正同步数据靠LSR和LSU。
我见过有人把LSU和LSA混为一谈。LSU是报文,LSA是链路状态通告,LSU里面可以装多个LSA。面试时把这两个概念分清楚,能加分。
3. 状态机与邻居建立过程深度解析
2.1 七个状态挨个说清楚
OSPF邻居状态机是面试高频区,七个状态:Down、Init、2-Way、ExStart、Exchange、Loading、Full。我建议按“能不能建邻接”分成两段记:Down到2-Way是邻居发现阶段,ExStart到Full是数据库同步阶段。
Down是初始状态,没收到任何Hello。Init是收到了Hello但没看到自己的Router ID在对方邻居列表里。2-Way是双方Hello里都看到对方了,这时候DR/BDR选举完成。ExStart开始协商主从,Router ID大的当Master。Exchange交换DD报文,Loading请求缺失LSA,Full表示数据库完全同步。
面试官最爱问:“卡在ExStart是什么原因?”常见就三个:MTU不匹配、Router ID冲突、两边都是DR或者优先级一样导致主从协商失败。我实际排错时,先查MTU,再查Router ID,最后看接口优先级。
2.2 主从协商为什么重要
ExStart状态的核心任务是选主从。Router ID大的成为Master,负责决定DD报文的序列号。为什么要有主从?因为DD报文需要确认机制,没有主从就没法保证可靠传输。Master发DD,Slave回DD确认,序列号由Master递增。
如果主从协商失败,状态机会卡在ExStart或者反复在ExStart和Exchange之间跳。我遇到过一种情况:两边接口MTU一个是1500一个是1400,DD报文被丢弃,状态机就卡住了。后来把MTU改成一致,立马进Full。
实操心得:华为设备可以用
display ospf interface看MTU,思科用show ip ospf interface。改MTU之前记得确认业务不依赖巨帧。
2.3 2-Way状态在什么场景下是正常的
很多人以为邻居必须到Full才算正常,其实广播网络里DRother之间停留在2-Way是设计如此。因为DRother之间不需要同步数据库,所有LSA都通过DR中转。如果你看到DRother之间是2-Way,别慌,这是正常现象。
但如果是点对点网络里卡在2-Way,那就有问题了。点对点网络应该直接到Full。这时候要查Hello包里的Network Mask是否一致,或者有没有ACL挡了Hello。
4. 区域设计与LSA类型实战问答
3.1 骨干区域为什么必须是Area 0
OSPF设计里,Area 0是骨干区域,所有其他区域必须直接或通过虚链路连接到Area 0。为什么?因为OSPF用距离矢量算法在区域间传递路由,Area 0负责汇总和防环。如果允许非骨干区域之间直接交换路由,就可能出现环路。
面试官会追问:“不连Area 0会怎样?”答案是区域间路由学不到,因为ABR只把非骨干区域的路由通告进Area 0,再从Area 0通告到其他区域。如果你有个Area 1和Area 2,中间没有Area 0,它们互相看不到对方的路由。
实际项目中,如果物理拓扑限制没法直连Area 0,可以用虚链路。但虚链路是临时方案,长期用会增加复杂度,能改物理链路就改。
3.2 六种LSA分别长什么样
LSA类型是OSPF面试的“硬骨头”,但必须啃下来。我按序号列一下:
| LSA类型 | 名称 | 产生者 | 作用范围 |
|---|---|---|---|
| Type 1 | Router LSA | 每台路由器 | 本区域 |
| Type 2 | Network LSA | DR | 本区域 |
| Type 3 | Summary LSA | ABR | 区域间 |
| Type 4 | ASBR Summary LSA | ABR | 区域间 |
| Type 5 | AS External LSA | ASBR | 整个OSPF域 |
| Type 7 | NSSA External LSA | ASBR | NSSA区域 |
面试官常问:“Type 4和Type 5的区别?”Type 5是外部路由,Type 4是告诉其他区域“怎么找到ASBR”。没有Type 4,Type 5就找不到下一跳。NSSA区域里用Type 7代替Type 5,到ABR再转成Type 5。
我记这个的方法是:Type 1和2是“内部明细”,Type 3和4是“区域间摘要”,Type 5和7是“外部引入”。按这个逻辑分层,不容易乱。
3.3 特殊区域怎么选
OSPF特殊区域有Stub、Totally Stub、NSSA、Totally NSSA。面试官喜欢问:“什么场景用Stub?”答案是区域里路由器性能弱,不想学外部路由,就用Stub。Stub区域会屏蔽Type 5 LSA,ABR自动下发默认路由。
Totally Stub更进一步,连Type 3也屏蔽,只留一条默认路由。NSSA允许引入外部路由,但用Type 7代替Type 5。Totally NSSA则是NSSA加Totally Stub的特性。
实际选型时,如果区域里没有ASBR,优先用Stub。如果有ASBR但不想让外部路由泛洪,用NSSA。Totally Stub和Totally NSSA适合末梢区域,能大幅减少LSDB规模。
注意:Stub区域里所有路由器都必须配成Stub,有一台没配就建不了邻居。NSSA同理。
5. 路由计算与选路规则面试要点
4.1 SPF算法到底怎么算
OSPF用Dijkstra算法算最短路径树。每台路由器以自己为根,根据LSDB里的Type 1和Type 2 LSA算出到各网段的最短路径。面试官不会让你手算SPF,但会问:“SPF什么时候重算?”答案是LSDB变化时,比如收到新的LSA或者LSA老化。
但SPF重算很耗CPU,所以OSPF有智能定时器。华为设备默认SPF计算间隔是5秒,思科是5秒。如果网络震荡频繁,可以调大间隔,但会延长收敛时间。
我实际排错时见过SPF把CPU跑满的情况,原因是有人在Stub区域里引入了大量外部路由,导致LSDB爆炸。后来改成NSSA加路由汇总,CPU立马降下来。
4.2 选路规则按顺序背
OSPF选路规则面试必问,顺序是:域内路由优于域间路由,域间路由优于外部路由。外部路由里,Type 1优于Type 2。Type 1会累加内部开销,Type 2默认不累加,除非配置了forward metric。
如果两条路由类型一样,就比较开销。开销一样就负载均衡,默认支持4条,最大16条。华为设备用maximum load-balancing调整。
面试官常挖坑:“Type 2一定优于Type 1吗?”不一定。如果Type 2的种子度量很大,而Type 1累加后很小,Type 1可能更优。所以不能死记,要看具体度量值。
4.3 虚链路能不能传外部路由
虚链路是Area 0的延伸,逻辑上属于骨干区域。所以虚链路可以传Type 5 LSA,但前提是虚链路两端的区域不能是Stub。如果中间区域是Stub,虚链路建不起来,因为Stub区域不允许Type 5通过。
实际项目中,虚链路一般用来临时打通Area 0,不建议长期用。我见过一个案例:两个Area 0被一个Area 1隔开,用虚链路连上后,路由是通了,但收敛慢,后来改成物理直连才解决。
6. 故障排查与面试场景题应对
5.1 邻居起不来怎么查
邻居起不来是面试场景题的高频考点。我一般按这个顺序排查:
- 查物理层和链路层,接口up没up,VLAN通不通。
- 查Hello参数:Area ID、Hello/Dead时间、认证、Network Mask、MTU。
- 查Router ID冲突。
- 查ACL或防火墙有没有挡OSPF报文。
- 查接口优先级和DR/BDR选举。
面试官会追问:“如果卡在Init怎么办?”Init说明收到了Hello但没看到自己。常见原因是单通,或者Hello包里Router ID列表没更新。我遇到过一种情况:两边Hello时间不一致,一边10秒一边30秒,结果邻居反复超时。改成一致后立马稳定。
实操心得:华为设备用
display ospf error看错误统计,思科用show ip ospf statistics。这个命令能直接告诉你Hello包为什么被丢弃。
5.2 路由学了但ping不通
路由表里有OSPF路由,但ping不通,这种问题最考验排错思路。我一般先查下一跳是否可达,再查接口是否被ACL挡了,最后查路由是否被过滤。
常见坑:ABR上做了路由汇总,但汇总网段里有些子网实际不可达,导致黑洞。或者ASBR引入外部路由时没配subnets,只引入了主类网络。
还有一种情况:双向重分发时,一边引入OSPF一边引入静态,结果路由反馈形成环路。这时候要用route-map打标签过滤。
5.3 面试官爱问的“如果”题
面试官喜欢问假设场景:“如果Area 0断了,其他区域还能通吗?”答案是区域间路由断了,但区域内部路由还能通。因为区域内部靠Type 1和Type 2,不依赖Area 0。
“如果DR挂了会怎样?”BDR会接管DR,然后重新选举BDR。DRother之间还是2-Way,不影响转发。
“如果Router ID冲突但邻居已经建起来了呢?”如果冲突发生在建立之后,邻居可能保持Full,但LSA会混乱。所以配Router ID一定要规划好,别偷懒用自动选举。
7. 面试前突击复习清单与个人建议
6.1 必须能默写的五张表
面试前我建议把这五张表默写一遍:邻居状态机七状态、五种报文类型、六种LSA类型、选路规则顺序、特殊区域对比。这五张表覆盖了OSPF面试80%的考点。
默写不是背文字,而是能画出状态迁移图,能说出每种LSA的传播范围,能解释为什么Type 3优于Type 5。如果你能对着白板讲清楚,面试基本稳了。
6.2 实验环境怎么搭最快
如果你手头没有真机,用EVE-NG或者GNS3搭虚拟环境。我一般建四台路由器:两台在Area 0,一台ABR,一台ASBR。然后故意制造故障:改MTU、改Hello时间、配错Router ID,观察状态机变化。
实验不在多,在精。把邻居起不来、路由不通、SPF重算这三个场景跑熟,比刷一百道选择题管用。
6.3 面试时怎么答才像老手
面试官问OSPF,最烦听到背书式的回答。我建议用“结论+原因+例子”的结构。比如问“Stub区域有什么用”,先答“减少LSDB规模”,再解释“屏蔽Type 5 LSA”,最后补一句“我在某项目里用Stub把LSDB从2000条降到200条”。
如果遇到不会的问题,别硬编。可以说“这个点我实际项目中没遇到过,但按OSPF原理推测应该是……”。面试官更看重你的推理过程,而不是标准答案。
最后分享一个我自己的习惯:每次面试前,把OSPF的RFC 2328翻一遍目录,回忆每个章节讲什么。不用逐字读,但要知道哪个知识点在哪个位置。这样面试时即使紧张,也能快速定位到知识框架里。