ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OSPF面试全解析:链路状态、LSA与区域设计深度拆解

OSPF面试全解析:链路状态、LSA与区域设计深度拆解 面试问到 OSPF很多人第一反应是掏出手机里的笔记开始背 LSA 类型、背 DR/BDR 选举规则背到一半被面试官一个问题打断那你觉得它跟 RIP 最大的区别是什么然后现场安静三秒。这一章我们把 OSPF 当成一个完整的东西来拆不讲碎片知识点而是把它的骨架、行为、设计思路和面试官真正想听的回答框架串起来。本文基于我准备网络岗位面试时的实际复习笔记改写适合校招、社招以及准备 H3C/Cisco 认证的朋友重点讲透 OSPF 的底层逻辑和面试高频追问点。1. 面试官问讲一下OSPF先说出链路状态这四个字1.1 链路状态与距离矢量一句话讲清本质区别我在前面章节里反复强调过一个观点任何路由协议面试题先定位再展开。OSPF 的定位就四个字——链路状态。面试官让你讲一下 OSPF你开口第一句话应该是OSPF 是一种基于链路状态的内部网关协议运行在单域内通过 SPF 算法计算最短路径树。这句话的信息量比说OSPF 是一个动态路由协议大得多。因为动态路由协议这个说法把 RIP、OSPF、IS-IS、BGP 全装进去了等于没说。而链路状态直接划清了阵营。距离矢量协议RIP、EIGRP 的旧版本实现思路的核心行为是我只告诉你我去哪儿花多少跳数每个路由器都像一个只知道自己家门口的人邻居说什么就信什么所以容易产生环路需要靠水平分割、毒性逆转这些机制来兜底。OSPF 则完全不同每台路由器把自己的接口地址、掩码、开销、邻居信息广播出去让全网所有 OSPF 路由器最终拿到一份完全相同的地图——也就是 LSDB链路状态数据库然后各自独立用 Dijkstra 算法算出最短路径。这个差异在面试里可以直接类比距离矢量是道听途说链路状态是自己看地图规划路线。后者不会轻信别人的结论所以天然无环、收敛快。把这个本质说清楚比背十个知识点都有用。1.2 SPF算法与LSDBOSPF的两个核心家底紧接着面试官大概率会追问那 LSDB 里装的是什么SPF 是怎么跑的LSDB 里装的不是路由条目而是 LSA链路状态通告。每一条 LSA 描述的是某个路由器或者某条链路的真实状态比如路由器 R1 在区域 0 里连接了两个网段通过端口 192.168.1.1 连到 R2cost 是 10。这些 LSA 汇总在一起就能还原整张区域拓扑。SPF 算法把路由器当作节点、链路当作边、链路的 cost 当作边的权重从本机出发计算到每个节点的最短路径最终生成一棵以自己为根的最短路径树树上每个节点的路由信息就变成了路由表条目。这里有个细节值得在面试里主动提一句SPF 是每台路由器独立计算的不是别人算好告诉你的这跟距离矢量协议有本质区别。还有个容易被追问的点LSDB 怎么保证全网一致靠的是可靠洪泛。路由器收到新的 LSA 后会向除接收接口外的所有接口转发接收方必须在超时前回复 LSAck 确认。没收到确认就重传。这套机制保证了地图最终一致。1.3 OSPF凭什么替代RIP收敛、无环、开销既然 RIP 也能跑为什么现在主流网络全是 OSPF这也是高频题。我从三个维度给过自己标准答案按顺序说第一收敛速度。RIP 靠周期性广播触发更新默认 30 秒发一次一条路由失效要等若干轮通告甚至要等 180 秒超时OSPF 是拓扑变化立刻触发 LSA 更新收到更新后马上重新计算秒级甚至毫秒级收敛。第二选路标准。RIP 只看跳数两条路一条是 56K 拨号链路但跳数少、一条是千兆专线但跳数多RIP 会选拨号非常不符合直觉OSPF 的 cost 默认按带宽计算公式是 10^8 / 接口带宽100M 接口 cost 为 1、千兆接口也是 1因为结果向下取整至少量纲是跟带宽挂钩的。第三环路抑制。距离矢量协议需要额外机制防环而链路状态协议用一张完整拓扑图计算SPF 得出的结果本身就无环这是结构性优势。Interview tips回答完这三个点之后可以自然带一句当然 OSPF 也有代价它需要更多内存和 CPU 来计算所以引入了区域化设计来缩小 LSDB 规模——这句话是给下面要讲的区域做铺垫显得你有全局观。2. 区域与路由器角色OSPF的骨架不能答错2.1 为什么所有道路都通向Area 0OSPF 用区域划分来缩小 LSDB 规模这个设计动机很容易理解没有区域的话几千台路由器各自维护一张全国级拓扑图内存和 CPU 都扛不住。但区域之间怎么组织是有严格规定的所有非骨干区域必须直接连接骨干区域 Area 0跨区域路由必须经 Area 0 中转。面试官常问为什么必须有 Area 0我的答法是区域化之后区域间的路由信息由 ABR 汇总转发如果允许任意区域互联就可能出现两个区域之间互相通告路由、形成环路的问题。把 Area 0 设成唯一的枢纽让所有区域都以它为中心星型连接等于人为规定了一个无环骨架。这是一条硬性的拓扑约束不是偏好。顺带一提如果某个区域实际拓扑上没连到 Area 0可以用虚链路virtual link逻辑上把它接到骨干。虚链路在面试里出现的频率不高知道它是跨中间区域打通到 Area 0 的逻辑隧道就够应付大多数题目了。2.2 内部路由、骨干路由、ABR、ASBR的分工OSPF 路由器角色是另一个必考判断题。区分标准是接口所在区域不是设备型号角色判定标准职责要点内部路由器 Internal Router所有接口都在同一个非骨干区域只维护本区域 LSDB跑本区域 SPF骨干路由器 Backbone Router至少一个接口在 Area 0维护 Area 0 的 LSDB区域边界路由器 ABR同时连接 Area 0 和其他区域在区域间传播路由摘要汇总可选自治系统边界路由器 ASBR引入了外部路由如重分发静态、直连、RIP 路由进 OSPF生成 Type 5/Type 7 LSA最容易答错的是 ABR 和 ASBR 的混淆。ABR 强调连接多个区域ASBR 强调连接外部路由协议。一台路由器完全可以同时既是 ABR 又是 ASBR但两件事的逻辑不同。2.3 ABR的隐藏行为三类LSA的生成与汇总ABR 的行为是面试中理解深度的试金石。当一台路由器成为 ABR 后它会做两件关键事情第一把本区域的路由汇总成 Type 3 LSASummary LSA通告给其他区域。注意这个行为做了信息降维——区域 A 内部有 500 条路由ABR 发到区域 B 的 Type 3 里只有路由前缀和 cost不再携带区域内完整的拓扑链路信息。这就是区域划分能缩小 LSDB 的根本原因。第二可以在区域边界配置路由汇总area-range把连续的网段汇总成一条路由通告出去比如把 10.1.0.0/24 到 10.1.255.0/24 汇总成 10.1.0.0/16。汇总减少了区域内路由数量和路由表规模代价是可能引入次优路径。3. LSA类型是必考硬货从Type 1到Type 7一张表理清3.1 区域内核心Type 1和Type 2LSA 类型是 OSPF 面试的硬通货每种类型的生成者、传播范围、包含内容都要能快速说清。我建议先记区域内两块基石Type 1 Router LSA每台路由器在每个区域都会生成一份描述自己的接口、链路邻居和链路 cost。注意每区域一份如果一台路由器同时在三个区域它就会生成三份 Type 1。传播范围仅在单个区域内。Type 2 Network LSA由广播网段上的 DR 生成描述这个网段上有哪些路由器DR、BDR、DROTHER 都列进去相当于把一个多路访问网段物化成一个伪节点。传播范围同样限于本区域。面试里有个经典的联动问法区域内路由是怎么算出来的答案是靠 Type 1 Type 2 还原区域完整拓扑然后 SPF 计算。所以区域内路由也叫拓扑计算出来的路由。3.2 跨区域与外网的桥梁Type 3、Type 4、Type 5出了区域信息就发生了变化Type 3 Summary LSA由 ABR 生成描述某个区域内的路由前缀及其 cost通告到其他区域。区域间路由的本质是基于这些摘要信息计算的不再做全拓扑 SPF。面试官如果问区域间路由为什么不精确原因是 Type 3 只携带目的地和 cost不携带沿途完整路径信息。Type 4 ASBR Summary LSA由 ABR 生成用来通告本区域内有个 ASBR 在哪里它是可达的。它解决的问题很实际区域内的路由器要知道去 ASBR 的路径才能去访问由 ASBR 引入的外部路由。Type 5 AS External LSA由 ASBR 生成描述外部路由前缀、下一跳和 cost。传播范围是整个 OSPF 域除了 Stub/Totally Stubby 区域后面细说。把 Type 3、4、5 放在一起记有个口诀Type 3 是区域间的路条Type 4 是 ASBR 的路标Type 5 是外网的路条。我当年面试时靠这个口诀把混淆问题全避开了。3.3 NSSA里的Type 7例外中的例外Type 7 NSSA External LSA 是专门给 NSSA非完全末梢区域用的。NSSA 区域不允许 Type 5 LSA 进入但区域内又允许存在 ASBR、允许引入外部路由那这些外部路由怎么描述就用 Type 7。当 Type 7 经过 ABR 进入普通区域时ABR 会把它翻译成 Type 5 继续传播。这里有个面试高频改错题外部路由在 NSSA 里用什么 LSA 承载答案必须是 Type 7不是 Type 5。另一个关联题是Type 7 和 Type 5 转换时 cost 怎么处理默认情况下翻译后的 Type 5 会保留 Type 7 的 cost 类型和开销除非在 ABR 上单独配置。LSA 类型名称生成者传播范围核心作用Type 1Router LSA每台路由器本区域描述自身链路状态Type 2Network LSADR本区域描述多路访问网段成员Type 3Summary LSAABR跨区域描述区域间路由Type 4ASBR Summary LSAABR跨区域描述 ASBR 可达性Type 5AS External LSAASBR全OSPF域特殊区域除外描述外部路由Type 7NSSA External LSANSSA内ASBRNSSA区域描述 NSSA 外部路由由 ABR 翻译成 Type 54. 邻居状态机和报文把邻居起不来讲得明明白白4.1 Hello、DBD、LSR、LSU、LSAck各自的活OSPF 的报文类型是面试里面很容易被连环追问的一环。我建议把五种报文按邻居关系建立过程来记而不是孤立记名字Hello 报文周期发送用来发现和维护邻居同时也是选举 DR/BDR 的载体。广播型网络默认 10 秒发一次NBMA 网络 30 秒一次。Hello 里携带区域 ID、认证信息、Hello/Dead 定时器、路由器优先级、DR/BDR 接口地址、邻居列表等参数——这些参数不匹配邻居就起不来。DBD 报文数据库描述报文用来描述发送方 LSDB 里都有哪些 LSA注意它只携带 LSA 的头部摘要不携带完整内容相当于目录。LSR 报文链路状态请求报文看完目录之后路由器发现自己缺某些 LSA就发 LSR 去要相当于订货单。LSU 报文链路状态更新报文真正发送完整 LSA 的报文承载着 LSA 本体。收到 LSU 后接收方处理完要回 LSAck。LSAck 报文确认收到的 LSU保证可靠传输。如果面试官让你用一句话描述这四个报文的协作关系可以说Hello 认识人DBD 看目录LSR 提需求LSU 发货LSAck 确认。这种接地气的说法在面试现场特别加分因为它证明了你是真理解不是背的。4.2 七个状态每个状态在等什么OSPF 邻居状态机是 Down、Attempt、Init、2-Way、ExStart、Exchange、Loading、Full八个状态里 Attempt 只在 NBMA 网络上出现所以常规讨论里常说七个。逐个理解比死记强Down初始状态没收到任何 Hello。Init收到了对方的 Hello但对方发来的 Hello 里还没包含自己的路由器 ID。用大白话说它看见你了但你还没看见我。2-Way双方都在对方 Hello 的邻居列表里看到自己了双向往来建立。多路访问网络上DROTHER 之间的邻居关系到此为止不再继续只有跟 DR/BDR 之间才会继续建立完整邻接关系。这个为什么 DROTHER 之间只停在 2-Way是高频题答案是不需要全互联避免 LSA 洪泛风暴。ExStart开始协商主从关系交换 DBD 报文前先决定谁当 master通过路由器 ID 定大小。这个状态也是最典型的 MTU 问题卡死点。Exchange互相交换 DBD 摘要交换完目录就基本摸清对方 LSDB 里缺什么了。Loading根据目录发送 LSR 请求缺失的 LSA对方用 LSU 补齐。FullLSDB 完全同步形成完整邻接关系可以正常交换路由信息。我在自己复习时把这些状态各配了一个关键词等自己、等双向、决定要不要深交、定大小、发目录、补清单、完成。串起来就是一个完整的从认识到深交的故事。4.3 DR/BDR选举规则与两个高频误区DR/BDR 选举只在广播型Ethernet和 NBMA 网络上进行点到点网络不需要。规则是先看接口优先级优先级最高的当 DR、其次当 BDR优先级为 0 表示永不参与竞选优先级相同则路由器 ID 大的胜出。两个高频误区必须提前踩过误区一认为 DR 是领导所有流量都要经过它。实际上 DR/BDR 只是 LSA 的发言人和收集点数据平面流量不经过它。所有路由器把 Type 2 的链路信息通告给 DRDR 再广播出去这样网段上从 n(n-1)/2 条邻接关系降到约 2n 条。误区二认为新加入的高优先级路由器能抢走 DR 位置。OSPF 的选举是非抢占式的——DR/BDR 选定之后就算来了优先级 255 的新路由器它也最多当 DROTHER直到 DR 故障BDR 接任 DR再重新选 BDR。这个特性的意义是避免频繁选举导致网络震荡回答DR 挂了会发生什么时要带上它。5. 特殊区域逐层拆解Stub和NSSA为什么这么设计5.1 四类特殊区域一张对比表特殊区域这个考点表面上是记忆题实际上是设计逻辑题。所有特殊区域都是为了同一个目的减少某些区域的 LSDB 规模和路由表规模节省内存 CPU。区别在于可以牺牲什么。区域类型允许 Type 3允许 Type 4允许 Type 5允许 Type 7区域内能有 ASBR 吗ABR 是否注入默认路由普通区域是是是否是否Stub 末梢区域是否否否否是Type 3 默认路由Totally Stubby 完全末梢区域否仅默认路由否否否否是Type 3 默认路由NSSA是否否是是是Type 7 默认路由可选Totally NSSA否仅默认路由否否是是是Type 7 默认路由没有背景知识直接背这张表很痛苦所以我先讲设计动机。Stub 区域的设计思路是如果一个区域里面没有 ASBR、也不需要访问外部路由那 Type 5 就没必要进区域。去掉 Type 5 之后区域内路由器内存压力明显下降出区域的外部流量统一走 ABR 注入的默认路由。Totally Stubby 更进一步连 Type 3 都不想要区域内只保留本区域路由和一条默认路由。实现方式是在 ABR 上把其他区域的 Type 3 全部过滤掉只留默认。这是 Cisco 私有概念但 H3C 也支持我们国内面试基本默认双方都懂。NSSA 是我要 Stub 的省内存好处但我又必须引入外部路由的折中。它不允许 Type 5但它允许区域内部署 ASBRASBR 生成 Type 7 描述外部路由由 ABR 翻译成 Type 5 之后再往外传。这样区域内被保护了、外部路由也进来了。5.2 默认路由在特殊区域里的走向特殊区域里默认路由的产生位置和 LSA 类型是面试官最爱扣的细节Stub 区域由 ABR 生成一条 Type 3 默认路由0.0.0.0/0注入区域。Totally Stubby 区域同样由 ABR 注入也是 Type 3 默认路由同时过滤掉所有其他 Type 3。NSSA 区域默认路由可以由 ABR 注入 Type 7 默认路由也可以由区域内 ASBR 自己产生 Type 7。具体走哪种取决于配置。我建议记一个原则默认路由永远朝离骨干更远的方向注入也就是由靠近 Area 0 的一侧发往特殊区域内部。理解了方向就不容易把谁产生的记混。5.3 面试判断题看到这些配置你要马上反应过来面试现场常给一个拓扑和一段配置截图让你判断区域类型或者指出这个配置有问题吗。比如配置里有 area 1 stub而区域 1 里又重分发了一个 RIP 路由这就是矛盾的——Stub 区域禁止 ASBR。再比如区域 2 配了 NSSA但 ABR 上没有配置默认路由面试官问区域内去外网怎么办你要能答出 NSSA 默认路由默认不自动产生和 Stub 不同需要显式配置很多人栽在这。另一个常见判断题为什么可以把某区域配成 Totally Stubby判断依据很简单这个区域没有 ASBR、不需要区域间明细路由、出去全靠默认路由的边缘区域比如分支机构的接入区域就是典型的适合 Totally Stubby 的场景。回答时带上这个判断逻辑比直接背命令高级得多。6. OSPF排错实战从现象倒推原因的完整链路6.1 先分清物理链路通不通和OSPF进程通不通OSPF 排错是面试实践题的重头戏也是最容易暴露纸上谈兵的地方。我根据自己的排错经验给出一条固定链路第一步永远不是看 OSPF 配置而是确认接口状态和三层连通性。接口 down 了、或者是 shutdown 状态、或者 VLAN 划错口了后面全白搭。用 display ip interface briefH3C或 show ip interface briefCisco看接口处于 up/up再用 ping 测对端接口地址确认三层通。只有物理和三层链路都通了才轮到 OSPF 进程层面的排查。6.2 Init与ExStart卡住的三大原因邻居状态卡在不同位置对应的原因有明显的规律卡在 Init最常见的是 Hello 参数不匹配。原因包括区域 ID 不一致、Hello/Dead 定时器不一致、认证类型或密钥不一致、两端的网络类型不一致。排查时先 display ospf error / show ip ospf interface 看 Hello 是否成功收发再看错误计数器里有没有统计增涨。卡在 ExStart 或 Exchange第一嫌疑是 MTU 不匹配。OSPF 使用 IP 分片来发送 DBD 报文当两端接口 MTU 不一致时大的 DBD 报文在 MTU 小的一端被丢弃而 OSPF 没有对 DBD 做重传机制它只有 LSA 的重传所以两边一直停在 ExStart 协商状态来回折腾。典型修复是让两端 MTU 一致或者在接口上关闭 OSPF 的 MTU 检查。还有个常见坑是路由器 ID 冲突。两台路由器配了相同的 router-id会导致邻居关系反复震荡一会儿 Full 一会儿 Down。排查时用 display ospf peer 看邻居状态是不是在跳变再去核对 router-id。6.3 MTU不匹配的经典现场从现象到结论我印象最深的一个现场是两台 H3C 交换机相连一边接口 MTU 配置成 1400另一边是默认的 1500结果 OSPF 邻居始终停在 ExStart好不容易到 ExchangeDBD 反复发不完整邻居状态就来回抖。排查链路完整走一遍是这样先用 display ospf peer 看到邻居卡在 ExStart再用 display ospf interface 查两端接口参数——发现 MTU 不一致。然后把两端 MTU 统一改回 1500邻居在几秒内直接走到 Full。这类问题在面试里如果被问到你没有实际经验也能答出主线逻辑先判断卡的状态再逐一核对 Hello 参数、MTU、认证、区域 ID。关键是把不同状态对应不同原因这个思路讲出来面试官会觉得你排过真的故障。我还踩过一个更隐蔽的坑ospf 接口下网络类型不一致。一边是广播broadcast一边是点到点p2p邻居也能起来但 DR 选举的行为就乱了可能导致一边认为有 DR、另一边认为没有 DRLSA 谁也学不全。遇到邻居 Full 了可路由学不全的情况优先查两端的网络类型配置。7. 配置速查与面试回答框架把知识变成能说出口的话7.1 Cisco与H3C基础配置对照纸上谈兵结束最后落到配置。两个主流厂家命令结构很接近都会用通配符反掩码宣告网段。下面是同一套拓扑——两路由器通过 GigabitEthernet 互联一个属于 Area 0一个属于 Area 1——的对照Cisco IOS 配置router ospf 1 router-id 1.1.1.1 network 10.0.12.0 0.0.0.255 area 0 network 192.168.1.0 0.0.0.255 area 1 area 1 stubH3C 配置ospf 1 router-id 1.1.1.1 area 0.0.0.0 network 10.0.12.0 0.0.0.255 area 0.0.0.1 network 192.168.1.0 0.0.0.255 stub两个关键差异要记牢Cisco 的 network 命令在 router ospf 进程视图下宣告H3C/Huawei 的 network 命令写在 area 视图下Cisco 的区域号写十进制数字area 1H3C 更标准写法是 area 0.0.0.1 这种点分十进制的区域 ID也接受简写。另外大厂面试有个隐形加分项能说出只要接口地址落在 network 的反掩码范围里该接口就会启用 OSPF并且属于指定的区域。很多人只会抄命令说不出宣告逻辑这个细节一出口就拉开差距了。7.2 参考带宽与cost调整一道送分题OSPF 默认计算公式是 cost 10^8 / 接口带宽Mbps所以 100M 接口 cost110M 接口 cost10千兆万兆算下来也是 1。现实中如果不调整参考带宽千兆和万兆路径会被当成等价路径无法体现带宽差异。调整方法两边类似Ciscorouter ospf 1 auto-cost reference-bandwidth 1000H3Cospf 1 bandwidth-reference value 1000参考带宽改成 1000单位 Mbps后千兆接口 cost 1000/1000 1万兆接口 cost 1000/10000 0.1 会向上取整变成 1所以要体现万兆优势可能还得调更大。这个计算式面试官常拿来让你口算参考带宽 1000 的配置下千兆链路 cost 是 1那 500M 链路呢答案也是 11000/5002不对是 2。口算题在这里切记先确认带宽单位这是易错点。具体单个接口也能手工改 cost命令是 ip ospf costCisco和 ospf costH3C 接口视图。手工改适合做流量策略比如故意调大某个接口的 cost 让主备路径更清晰。7.3 一套三分钟OSPF回答框架面试时如果被要求系统讲一下 OSPF按下述顺序讲三分钟内能把骨架说完且层层递进、逻辑不断第一步定位OSPF 是链路状态 IGP靠 LSDB 和 SPF 算法计算无环路由替代 RIP 解决了收敛慢、易环、选路不合理的三个问题。第二步结构用区域划分控制 LSDB 规模所有区域必须连到 Area 0区域间靠 ABR 传播 Type 3 摘要外部路由由 ASBR 引入并产生 Type 5。第三步行为邻居通过 Hello 建立DBD/LSR/LSU/LSAck 四类报文配合完成数据库同步广播网络上 DR/BDR 负责减少邻接数量特殊区域Stub/NSSA用来进一步裁剪 LSA 规模。第四步运维常见故障排错从接口三层、OSPF peer 状态、LSA 计数三块入手MTU、认证、区域 ID、网络类型是高频根因。这个框架我面试时亲测好用它把零散知识点组织成了一个可复述的系统。面试官顺着任何一块深挖你前面都已经铺垫好了上下文不会答跑题。我复盘整个 OSPF 复习时最大的体会是不要背OSPF 有哪些特点这种散点清单而是先理解链路状态这个范式再用区域、LSA、邻居状态、特殊区域四个维度去把协议串成一条线。面试官追问的深度是无底洞但只要你主线清晰任何一个分支都能快速定位到它在整个协议体系里的位置回答就不会散。最后分享一个我常用的自我检验方法合上笔记对着白板画出一台 ABR 连接 Area 0 和 Stub 区域的拓扑把三类 LSA 的走向、默认路由的产生位置、邻居可能卡状态的位置全标出来能完整画出来这章才算真正过关。
返回列表