RFC2328中文版OSPF排障指南:邻居状态机与LSA字段级对照 简介《RFC2328中文版》是OSPF v2协议的完整中文文档面向网络管理员、网络工程师及准备网络认证的读者用于系统理解链路状态路由、区域划分与路由计算等核心机制。文件包共1个PDF约1.93MB便于在电脑或移动端查阅也可作为实验配置、协议对照和故障排查时的案头参考。内容从协议概述、术语定义、链路状态数据库组织与SPF计算讲起逐步展开骨干区域、区域间路由、LSA类型与老化、认证安全、操作配置及性能优化并附连接状态数据库示例与清晰目录。已有431人学习适合希望吃透OSPF原理、建立完整知识框架的中高级网络从业者。1. 为什么排障老手会翻这份 RFC2328 中文版从邻居卡在 ExStart 说起邻居卡在 ExStart日志只给一句重传提示很多人第一反应是去搜配置模板。我把 RFC2328 中文版翻到第 10 章邻居状态机那一页才发现问题不在模板而在 DD 包的接口 MTU 与主从选举参数。RFC2328 中文版是 OSPFv2 协议规范的中文译本不是软件包也不是插件它把连接状态数据库、LSA、SPF、区域和包格式按章节摊开。适合已经能配基础 OSPF、但一遇到邻居震荡、LSA 不洪泛、区域间路由缺失就靠猜的从业者新手可以按第 3、10、12 章跟做熟手可以直接查附录 A 的字段表。它解决的是“为什么这样配”和“失败时看哪个字段”的问题而不是给你一键安装脚本。2. 把 RFC2328 中文版当协议字典先搭 LSA 与 SPF 的阅读骨架2.1 文档结构不是目录而是排障索引拿到一份 80 多页的协议规范最怕从第一页逐字读到最后一页。这份中文版的目录本身就是一张排障索引第 2 章讲连接状态数据库怎么组织第 3 章讲区域怎么划分第 7、9、10 章讲邻接和状态机第 12、13 章讲 LSA 与洪泛第 16 章讲路由表计算附录 A 到 C 才是字段、常量和可配置变量的速查表。阅读顺序应该跟着故障现象走而不是跟着页码走。邻居建不起来先翻第 7、9、10 章数据库看起来同步了但路由不对先翻第 12、13、16 章区域间路由缺失先翻第 3、12.4.3 和 16.2 节。我在某实验室的三路由器实验环境里做过一次对照同样的拓扑只改接口网络类型邻居状态就从 Full 退到 2-Way。文档第 9、10 章把接口状态和邻居状态分开描述这个拆分很关键。接口状态管的是接口能不能发 Hello、能不能参与 DR 选举邻居状态管的是两台路由器之间到了哪一步。排障时先看接口状态再看邻居状态最后才看 LSDB顺序反了就会在错误的一层里打转。下面这张表是我自己常用的“章节到故障”索引不追求覆盖全部内容只求在翻车时能快速定位现象先翻章节重点看什么常见误判邻居卡在 Init7.1、9.5、10.5Hello 包是否双向可达只看本端配置不看对端是否收到邻居卡在 ExStart10.6、10.8、附录 A.3.3DD 包主从选举、接口 MTU把 MTU 不一致当成认证失败邻居卡在 Exchange/Loading10.6、10.7、10.9DD 序号、LSR 请求的 LSA以为 LSDB 一定完整路由表缺区域间路由3.2、12.4.3、16.2ABR 是否生成 Summary-LSA只看 LSDB 有 LSA不看 SPF 是否重算外部路由不生效12.4.4、16.4ASBR、Forwarding Address、E 位把外部路由当成本区域路由查LSA 反复刷新12.1.1、13、14LS 序号、老化时间、重传列表只看日志里的“收到更新”这张表不是让你背而是让你在抓包之前先确定“该看哪一页”。RFC2328 中文版的价值不在于读完而在于你愿意在故障现场把它当字典翻。文档第 1 章把术语定义集中放在前面第 2 章用示例 LSDB 解释路由器节点和网络节点怎么表示这两章适合在实验前读一遍后面再回来查。不要把它当插件说明书找“安装步骤”它没有安装步骤只有协议行为和字段语义。2.2 连接状态数据库与最短路径树SPF 计算到底看哪几节连接状态数据库不是一张路由表它是一张拓扑图。每台路由器把自己周围的链路状态写成 LSA洪泛到同一个区域内的所有路由器最后每台路由器都拿到一份相同的 LSDB。第 2.1 节讲路由器和网络的表示方法第 2.1.1 节专门讲非广播网络怎么表示第 2.1.2 节给了一个 LSDB 示例。这个示例很值得对照抓包看Router-LSA 描述路由器节点和它的链路Network-LSA 描述广播网络节点和接入的路由器两者拼起来才是一张完整的图。SPF 计算在第 16.1 节核心是以本路由器为根用 Dijkstra 算法算最短路径树。这里有两个容易读漏的点第一SPF 只使用同一区域的 Router-LSA 和 Network-LSA 建树区域间路由和外部路由是后面第 16.2、16.4 节单独处理的第二下一跳的计算在第 16.1.1 节不是简单取邻居接口地址而要结合链路类型和网络节点。很多人看到 LSDB 里有 LSA 就以为路由一定会有实际上 SPF 没触发、下一跳不可达、区域边界没汇总都会让路由表空着。我在模拟项目 X 里做过一次增量对比先只跑区域 0再在 ABR 上加入区域 1。区域 0 的 Router-LSA 数量不变但区域 1 的 Summary-LSA 开始出现第 16.2 节的区域间路径计算才会把目的网段加进路由表。如果只看 LSDB 的 LSA 计数会以为“数据库没变化”实际上变化发生在 Summary-LSA 和路由表之间。文档第 16.5、16.6 节讲增量更新正好解释为什么有些路由要等 SPF 调度周期才出现而不是 LSA 一到就立刻进表。读这一节时我建议手边放三个东西一张手画拓扑、一份抓包里的 Router-LSA 列表、一张路由表。先按第 2.1.2 节的示例把 LSDB 画成图再按第 16.1 节的步骤标出根节点、候选列表和最短路径树最后对照路由表看下一跳。这个动作做一遍比读十遍“SPF 算法”四个字有用。文档里没有花哨的公式更多是数据结构与计算顺序这正是排障时需要的东西。提示LSDB 相同不等于路由表相同。区域类型、汇总配置、外部路由引入方式、最大等价路径数都会让同一份 LSDB 算出不同结果。2.3 区域、骨干区域与 ABR什么时候该翻第 3 章和第 16 章区域划分是 OSPF 从“能跑”到“能扩”的分水岭。第 3.1 节讲骨干区域第 3.2 节讲区域间路由第 3.3 节把路由器分成内部路由器、区域边界路由器、骨干路由器、AS 边界路由器。这个分类不是为了背名词而是为了判断“这条 LSA 应该由谁生成”。Router-LSA 由每台路由器生成Network-LSA 由 DR 生成Summary-LSA 由 ABR 生成AS-external-LSA 由 ASBR 生成。生成者找错排查方向就会偏。第 3.4 节给了一个简单区域配置示例第 3.5 节讲 IP 子网化支持第 3.6 节讲存根区域。存根区域会阻止外部 LSA 进入ABR 用默认路由代替。如果你的实验里区域 1 是存根区域却还在等 AS-external-LSA那就会一直等不到。文档第 3.6 节把行为写得很清楚不是 LSA 丢了而是区域类型决定了它不该进来。这个坑在真实网络里很常见尤其是从其他协议迁移过来的人习惯性地认为“外部路由应该 everywhere”。第 3.7 节讲区域的划分核心是区域不能太大、不能太碎骨干区域必须连续。虚链路在第 15 章用来把不连续的骨干区域接起来但它必须穿过一个传输区域端点必须是 ABR传输区域不能是存根区域。很多人配了虚链路但不通回头查第 15 章才发现传输区域类型不对或者端点 Router ID 不可达。区域设计和虚链路不是配置技巧而是拓扑约束文档把约束写在前面配置只是最后一步。读第 3 章时我会拿一张纸把区域 0、区域 1、ABR、ASBR 标出来然后问三个问题这条路由从哪个区域来、由谁汇总、下一跳在哪个区域。第 16.2 节计算区域间路径时会检查传输区域的 Summary-LSA第 16.3 节专门讲这个检查。如果 ABR 没有为某个网段生成 Summary-LSA或者传输区域里缺少可达的 ABR路由就不会进表。把这些章节连起来看区域间路由缺失就不再是玄学而是可以逐项排除的字段问题。3. 用中文版对照实验Hello 到邻接建立的参数表与状态机3.1 Hello 包字段与邻居状态机的对应关系Hello 包是 OSPF 邻居关系的起点也是排障时最容易抓到的东西。附录 A.3.2 给了 Hello 包的完整格式网络掩码、Hello 间隔、选项、路由器优先级、路由器失效间隔、指定路由器、备份指定路由器、邻居列表。第 7.1 节讲 Hello 协议第 9.5 节讲发送 Hello 包第 10.5 节讲接收 Hello 包。把这四节连起来看就能明白为什么“我明明配了同一个区域邻居还是卡在 Init”。第一个要对的字段是网络掩码。广播网络和 NBMA 网络上Hello 包会带接口掩码同一网段的两台路由器如果掩码不一致可能进入不了 2-Way。第二个是 Hello 间隔和路由器失效间隔常见广播网络是 10 秒和 40 秒NBMA 网络可能是 30 秒和 120 秒两端必须一致。第三个是选项字段里的 E 位它表示是否支持外部路由普通区域和存根区域对 E 位的处理不同。第四个是邻居列表Init 状态说明本端收到了对方的 Hello但对方还没看到本端通常是单向可达或访问控制把 Hello 挡了。我在某高校的虚拟实验环境里用三台路由器做过对照R1 和 R2 互连R3 接在 R2 后面。把 R1 的 Hello 间隔从 10 秒改成 30 秒R2 的失效间隔仍是 40 秒邻居会从 Full 掉到 Down然后反复尝试。抓 Hello 包能看到间隔字段不一致但日志只会说邻居失效。这个场景说明一个顺序先抓 Hello 包对字段再看邻居状态机最后才看 LSDB。字段不对后面所有状态都是假的。下面这张表是我排 Hello 问题时固定要对的字段按优先级从高到低Hello 字段对应章节常见设置不一致的后果排查动作网络掩码A.3.2、9.5与接口掩码一致广播网络可能卡 Init/2-Way对两端接口掩码Hello 间隔7.1、9.5广播 10 秒NBMA 30 秒邻居反复失效对两端接口参数路由器失效间隔7.1、10.5通常是 Hello 的 4 倍邻居无法建立或频繁重建检查是否被单独改过选项 E 位A.2、12.1.2普通区域置位存根区域行为异常看区域类型与选项路由器优先级9.4、10.5默认 1可调影响 DR/BDR 选举确认是否需要调整指定路由器/备份指定路由器9.4、10.5由选举产生新加入者可能不认同看选举等待时间邻居列表10.5已收到的邻居Init 表示单向查反向 Hello 与 ACL这张表不是让你每次全对一遍而是让你在邻居卡住时有一个固定顺序。先对掩码和计时器再对选项和优先级最后看邻居列表。顺序反了容易在 DR 选举上绕很久最后发现只是 Hello 间隔不一致。注意Hello 包能通不代表邻居能到 Full。2-Way 在非 DR/BDR 之间是正常状态不要为了追求 Full 去强行改优先级。3.2 数据库同步DD、LSR、LSU、LSAck 四类包怎么读邻居从 2-Way 往上走进入 ExStart、Exchange、Loading最后到 Full。这个过程在附录 A.3.3 到 A.3.6 里有四类包的格式数据库描述包、连接状态请求包、连接状态更新包、连接状态确认包。第 10.6 到 10.9 节分别讲接收 DD、接收 LSR、发送 DD、发送 LSR 的处理。第 8.1、8.2 节讲发送和接收协议包的通用流程。把这几个章节放在一起才能看懂“数据库同步”到底同步了什么。ExStart 阶段的关键是主从选举。Router ID 大的一方成为主主负责发送 DD 序号从方回应。DD 包里有一个接口 MTU 字段两端 MTU 不一致时某些实现会卡在 ExStart 或 Exchange。这个点在第 10.6 节和附录 A.3.3 里都能找到依据但日志往往只给“重传 DD”。我见过一次翻车两端接口都配了同一个网段Hello 正常但一端 MTU 是 1500另一端是 9000邻居一直卡在 ExStart。抓包看 DD 包的 MTU 字段立刻能看出来改回一致后进入 Exchange。Exchange 阶段交换的是 LSA 头部摘要不是完整 LSA。每台路由器把自己 LSDB 里的 LSA 头部放进 DD 包对方比对后缺哪些就用 LSR 请求完整 LSA收到 LSU 后回 LSAck。第 10.7 节讲接收 LSR第 10.9 节讲发送 LSR第 13.5 节讲发送 LSAck第 13.7 节讲接收 LSAck。很多人看到邻居到了 Loading 就以为快好了实际上 Loading 阶段还在等 LSR 的回应如果请求的 LSA 一直没回来邻居会卡在 Loading 或反复重传。这里有一个容易忽略的细节DD 包里的 LSA 头部有 LS 序号和校验和接收方判断“我有没有这条 LSA”不是只看 Link State ID还要看 Advertising Router 和 LS 序号。第 13.1 节讲判定较新的 LSA规则是序号大者新、序号相同校验和大者新、再相同则年龄小者新。这个规则在数据库同步时同样适用。如果两边对“谁更新”的判断不一致就会出现一方认为不需要请求另一方认为需要更新最后表现为数据库“看起来同步了”但实际有差异。我在模拟项目 X 里做过一次人为制造差异的实验先在 R1 上注入一条外部路由让 R1 生成 AS-external-LSA然后在 R2 的 LSDB 里保留旧序号。邻居重建后R2 在 Exchange 阶段看到 R1 的 LSA 序号更大就会发 LSR 请求收到 LSU 后更新。如果 R2 的 LSDB 里没有这条 LSADD 摘要里也不会出现R2 就不会请求直到 R1 洪泛过来。这个顺序说明数据库同步只保证“双方已知的 LSA 头部一致”不保证“所有 LSA 都立刻到齐”后者靠洪泛和第 13 章的重传机制。读这一节时我建议抓一次完整的邻居建立过程按包类型数一数几个 Hello 进入 2-Way几个 DD 完成主从选举几个 LSR/LSU 补齐数据库最后几个 LSAck 确认。数完再看第 10 章的状态机会比只看文字清楚得多。3.3 指定路由器选举优先级、Router ID 与等待计时器广播网络和 NBMA 网络要选举指定路由器和备份指定路由器目的是减少邻接数量。第 9.4 节讲选举指定路由器第 7.3、7.4 节讲指定路由器和备份指定路由器的概念第 10.4 节讲是否形成邻接。选举规则不复杂优先级高者当选优先级相同则 Router ID 大者当选备份指定路由器是第二名的角色。但选举不是抢占式的新加入的路由器优先级再高也要等当前 DR 失效或重新选举才会接管。等待计时器是这里的关键参数。广播网络上的路由器在接口启动后会等待一个路由器失效间隔的时间再参与选举目的是让所有路由器都听到彼此。这个等待时间在第 9.4 节和第 9.5 节里有描述。很多实验里先启动的路由器先成为 DR后启动的路由器即使优先级更高也只能当备份原因就是没有触发重新选举。要强制重新选举通常需要重启接口或调整优先级后等待而不是改完配置立刻生效。我在某公司的测试环境里遇到过一次“DR 不固定”的问题三台路由器同时启动优先级都是默认 1结果每次重启后 DR 都不一样。后来把其中一台上调优先级到 100并确认其他两台的优先级保持 1DR 才稳定下来。这个过程中Router ID 也起了作用优先级相同的时候Router ID 大的那台会成为 DR。如果 Router ID 是自动选的接口地址一变选举结果就可能变。所以我在实验环境里通常手动指定 Router ID避免地址变化带来玄学问题。第 10.4 节讲是否形成邻接这里有一个容易误解的点不是所有邻居都要到 Full。广播网络上非 DR/BDR 之间停留在 2-Way 是正常设计只有 DR 和其他路由器、BDR 和其他路由器之间才形成 Full 邻接。如果你看到两台非 DR/BDR 停在 2-Way不要急着改配置先确认它们是不是本来就不需要形成邻接。反过来如果 DR 和某台路由器停在 2-Way那才是问题可能是 Hello 参数不一致、网络类型不匹配或 ACL 挡了单播。下面这张表是我在实验里固定检查的 DR 选举参数参数作用常见值调错后的现象处理方式接口优先级决定选举排名默认 1可调 0-255优先级 0 不参与选举按角色规划设置Router ID优先级相同时比较手动指定最稳自动变化导致 DR 漂移实验环境手动固定等待计时器启动后等待选举通常等于失效间隔新设备加入后不抢 DR确认是否需要重新选举网络类型决定是否选举广播/NBMA 选举点对点不选举按链路实际类型配置认证参数决定 Hello 是否被接受两端一致邻居卡 Init 或 Down先对认证再对选举这张表里的“网络类型”经常被忽略。点对点链路上不需要 DR/BDR如果你把接口配成广播网络就会多出选举行为邻居状态也可能和预期不一样。第 9.5.1 节专门讲 NBMA 网络上发送 Hello 包NBMA 需要手动配置邻居和广播网络的自动发现不一样。把这些差异记住比背选举公式更有用。4. 把五类 LSA 讲透生成条件、字段与洪泛路径4.1 LSA 头部七个字段老化、序号与校验和怎么配合LSA 头部在附录 A.4.1 和第 12.1 节有完整描述核心字段包括 LS 年龄、选项、LS 类型、连接状态标识、宣告路由器、连接状态序号、连接状态校验和、长度。这七个字段决定了一条 LSA 的身份、新旧和有效期。排障时如果只看 LS 类型和连接状态标识很容易把两条不同的 LSA 当成同一条因为宣告路由器不同、序号不同它们就是不同的 LSA。LS 年龄从 0 开始随着时间增长最大到 MaxAge。第 12.1.1 节讲连接状态时限第 14 章讲老化连接状态数据库第 14.1 节讲提前老化 LSA。常见常量是 LSRefreshTime 1800 秒、MaxAge 3600 秒、MinLSInterval 5 秒、MinLSArrival 1 秒。路由器会周期性地刷新自己生成的 LSA把年龄重置如果一条 LSA 到了 MaxAge就会被洪泛并从数据库中删除。这里有一个坑看到 LS 年龄接近 MaxAge 不代表 LSA 马上失效可能只是还没到刷新周期或者刷新包在路上。LS 序号用来判断新旧初始值是一个负数向正数方向增长回绕后有特殊处理。第 13.1 节讲判定较新的 LSA规则是序号大者新序号相同则校验和大者新校验和也相同则年龄小者新但如果年龄差超过 MaxAgeDiff则年龄小者新否则认为相同。这个规则在数据库同步和洪泛时都会用到。校验和覆盖 LSA 头部和内容年龄字段在计算校验和时按特定规则处理所以不要手动改年龄字段去“修复”LSA容易把校验和弄坏。我在一次实验里故意把一条 LSA 的年龄改到接近 MaxAge观察它什么时候被删除。结果是路由器不会因为年龄大就立刻删除而是等到 MaxAge 才洪泛最大年龄的 LSA其他路由器收到后从数据库中移除。如果这时原路由器还在刷新就会重新生成一条年轻 LSA形成“删了又出现”的现象。这个现象在第 14 章和第 13.4 节里有解释不是数据库损坏而是老化与刷新的正常交互。下面这张表是我对 LSA 头部字段的速查按排障时看的顺序排列字段作用异常表现先看哪里LS 年龄有效期与老化接近 MaxAge 但路由还在12.1.1、14LS 类型区分 1-5 类 LSA类型对不上导致查错表A.4、12.1.3连接状态标识标识目的或对象同 ID 不同宣告者被混淆12.1.4宣告路由器谁生成的 LSA生成者不对导致路由缺失12.1.5LS 序号判断新旧序号回绕导致更新不生效13.1LS 校验和完整性校验校验和错误导致 LSA 被丢弃12.1.7长度头部加内容长度长度不对导致解析失败A.4.1这张表里的“宣告路由器”是最容易被忽略的。一条 Summary-LSA 的宣告路由器应该是 ABR如果看到内部路由器宣告了 Summary-LSA那生成逻辑就有问题。一条 AS-external-LSA 的宣告路由器应该是 ASBR如果 ASBR 没配置路由引入就不会有这条 LSA。把生成者和 LSA 类型对上排查范围会小很多。4.2 Router-LSA 与 Network-LSA描述拓扑的两块积木Router-LSA 是第 1 类 LSA由每台路由器生成描述自己的链路。第 12.4.1 节讲生成 Router-LSA附录 A.4.2 给格式。它包含链路数量每条链路有 Link ID、Link Data、类型和度量。链路类型有四种点对点、传输网络、存根网络、虚链路。点对点链路描述邻居 Router ID传输网络描述 DR 的接口地址存根网络描述网段和掩码虚链路描述虚邻居。这四种类型拼起来才是一张完整的路由器节点图。Network-LSA 是第 2 类 LSA由 DR 生成描述广播或 NBMA 网络。第 12.4.2 节讲生成 Network-LSA附录 A.4.3 给格式。它的连接状态标识是 DR 的接口 IP 地址内容包括网络掩码和接入的路由器列表。Router-LSA 里的传输网络链路指向这个 DR 地址Network-LSA 再把接入的路由器列出来SPF 计算时才能把网络节点和路由器节点连起来。如果 Network-LSA 缺失广播网络上的路由器可能只能看到直连看不到经过网络节点的路径。我在模拟项目 X 里做过一个对照把广播网络改成点对点网络Router-LSA 的链路类型从传输网络变成点对点Network-LSA 不再生成。邻居关系仍然是 Full但 LSDB 少了一类 LSASPF 树的形状也变了。这个实验说明网络类型不是“随便配配”的参数它直接决定 LSA 的生成和 SPF 的计算方式。第 9.1 节讲接口状态第 12.4 节讲 LSA 生成两者要对照看。Router-LSA 的度量是接口开销常见计算方式是参考带宽除以接口带宽参考带宽常见 100 Mbps但具体实现可能不同。如果两端接口开销不一致SPF 算出的路径可能不对称。第 16.1 节计算最短路径树时会累加开销第 16.8 节讲等值多路径开销相同才会形成等价路径。调开销之前先确认参考带宽和接口实际带宽别只看配置里的数字。提示Router-LSA 的链路类型 3 是存根网络描述的是没有邻居的网段。很多人把它和区域间路由混淆存根网络仍然在本区域的 SPF 树里区域间路由才走 Summary-LSA。4.3 Summary-LSA 与 AS-external-LSA区域间和外部路由的边界Summary-LSA 是第 3、4 类 LSA由 ABR 生成用于区域间路由。第 12.4.3 节讲生成 Summary-LSA附录 A.4.4 给格式。第 3 类描述目的网络第 4 类描述 ASBR 的位置。ABR 把自己区域内的路由汇总后生成 Summary-LSA 发到其他区域。连接状态标识是目的网络地址宣告路由器是 ABR度量是 ABR 到目的网络的开销。第 16.2 节计算区域间路径时会检查传输区域的 Summary-LSA第 16.3 节专门讲这个检查。AS-external-LSA 是第 5 类 LSA由 ASBR 生成用于引入外部路由。第 12.4.4 节讲生成 AS-external-LSA附录 A.4.5 给格式。它包含外部路由的度量、转发地址、外部路由标记和 E 位。E 位表示度量类型类型 1 和类型 2 的计算方式不同。第 16.4 节讲计算 AS 外部路径第 16.4.1 节讲外部路径参数。外部路由不参与区域间 SPF 树而是在区域间路由计算完之后再叠加所以外部路由的下一跳可能不是 ABR而是转发地址。这里有一个常见误解LSDB 里有 Summary-LSA 不代表路由表一定有对应路由。ABR 可能生成了 Summary-LSA但传输区域不可达或者目的区域是存根区域不接受外部 LSA路由就不会进表。第 3.6 节讲存根区域第 16.3 节讲传输区域检查把这两节连起来看才能判断是“LSA 没生成”还是“LSA 生成了但没被使用”。我在某实验室的环境里遇到过一次“区域间路由缺失但 LSDB 有 Summary-LSA”的问题。最后发现是 ABR 到目的网段的下一跳不可达Summary-LSA 虽然生成了但第 16.2 节计算时无法解析下一跳路由被丢弃。这个案例说明LSDB 是拓扑信息路由表是计算结果两者之间还有可达性检查。只看 LSDB 的 LSA 数量会得出错误结论。4.4 洪泛、重传与 LSAck为什么数据库会“看起来同步了”洪泛过程在第 13 章核心步骤是收到 LSA 后判断是否更新如果更新则加入数据库从其他接口洪泛出去并等待邻居的 LSAck如果邻居没确认就重传。第 13.2 节讲将 LSA 加入数据库第 13.3 节讲洪泛过程的下一步操作第 13.5 节讲发送 LSAck第 13.6 节讲重传 LSA第 13.7 节讲接收 LSAck。第 8.1、8.2 节讲发送和接收协议包的通用流程。“看起来同步了”通常有三种情况第一DD 交换完成双方都知道对方有哪些 LSA 头部但完整 LSA 还在 LSR/LSU 过程中第二LSA 已经加入数据库但 SPF 还没重算路由表还没更新第三LSA 洪泛到了大部分邻居但有一两个邻居没回 LSAck重传列表里还有记录。第一种看邻居状态第二种看 SPF 调度第三种看重传列表和接口队列。第 13.4 节讲接收自生成的 LSA这个场景很关键一台路由器收到自己生成的 LSA如果序号比本地旧要回一个更新的 LSA如果序号相同可能只是洪泛回环不需要处理。这个逻辑如果理解错就会在“LSA 反复刷新”时找不到原因。第 14.1 节讲提前老化 LSA有时为了撤销一条路由会把 LSA 年龄设为 MaxAge 洪泛出去其他路由器收到后删除但原路由器还可能收到回环需要正确处理。我在一次实验里看到 LSDB 里有一条 LSA 的年龄不断在 0 和 MaxAge 之间跳日志里反复出现更新。最后查出来是两台路由器同时宣告了同一个连接状态标识但宣告路由器不同双方都认为自己的更新互相覆盖。第 13.1 节的判定规则在这种情况下会频繁触发因为序号和校验和交替变大。解决办法不是调计时器而是找到重复宣告的源头确认哪台路由器应该生成这条 LSA。注意LSAck 是确认包不是路由更新包。看到 LSAck 多不代表数据库有问题看到重传列表持续增长才需要查接口队列和邻居可达性。5. 避坑与排查中文版里最容易读漏的五个细节5.1 现象邻居卡在 2-Way 或 ExStart现象两台路由器互连Hello 能通邻居状态停在 2-Way或者进入 ExStart 后长时间不动日志只提示重传 DD。原因分两类2-Way 在广播网络上可能是正常状态非 DR/BDR 之间本来就不形成 Full 邻接如果 DR 和其他路由器也停在 2-Way就要查 Hello 参数、网络类型和访问控制。ExStart 卡住更常见的是接口 MTU 不一致、Router ID 冲突、DD 包主从选举异常或者单向可达导致 DD 包发不出去。解决先抓 Hello 包对网络掩码、Hello 间隔、失效间隔、区域 ID、认证字段确认双向都能收到。再看接口网络类型广播网络会选举 DR/BDR点对点网络不会类型不匹配会让状态机走错分支。ExStart 阶段重点看 DD 包的接口 MTU 字段和 Router ID两端 MTU 调一致Router ID 保证唯一。如果这些都对检查 ACL 是否放行了 OSPF 协议报文以及是否只放行了 Hello 没放行 DD。第 10.6 节和第 10.8 节把 DD 的发送和接收分开写对照看能定位是哪一侧没回包。5.2 现象LSA 年龄接近 MaxAge 但路由还在现象查 LSDB 发现某条 LSA 的年龄已经很大接近 MaxAge但路由表里对应路由还在过一段时间又恢复正常。原因可能是周期刷新还没到LSRefreshTime 通常是 1800 秒年龄增长是正常的也可能是刷新包在路上丢了原路由器还没重传还有一种情况是收到 MaxAge 的 LSA 后路由表要等 SPF 重算才删除不是立刻消失。第 12.1.1 节讲连接状态时限第 14 章讲老化第 14.1 节讲提前老化三节连起来看能区分“正常老化”和“异常残留”。解决先确认这条 LSA 的生成者是谁是不是本路由器生成的。如果是本路由器生成的看刷新计时器和接口队列确认刷新包有没有发出去。如果是其他路由器生成的看是不是收到了 MaxAge 版本但还没触发 SPF。不要手动改年龄字段校验和会出问题。需要撤销路由时按第 14.1 节的提前老化流程做让 LSA 以 MaxAge 洪泛而不是直接删 LSDB。排查时把 LS 序号、校验和、年龄三个字段一起看单看年龄容易误判。5.3 现象区域间路由缺失但 LSDB 有 Summary-LSA现象ABR 上能看到 Summary-LSA目的区域的路由器 LSDB 里也有但路由表里没有对应网段。原因可能是 ABR 没有为那个网段生成 Summary-LSA或者生成了但传输区域不可达或者目的区域是存根区域不接受外部 LSA或者 SPF 没有重算。第 3.2 节讲区域间路由第 12.4.3 节讲 Summary-LSA 生成第 16.2 节讲区域间路径计算第 16.3 节讲传输区域检查这四节是排查主线。解决先在 ABR 上确认源区域里有对应路由且 ABR 认为它是区域间路由或内部路由再确认 ABR 是否配置了汇总或过滤把 Summary-LSA 挡住了然后看传输区域的 Router-LSA 是否能到达 ABR下一跳是否可解析最后看目的区域的类型存根区域会用默认路由代替外部路由不会出现具体的 Summary-LSA。第 16.5 节讲增量更新如果 Summary-LSA 是新增的SPF 调度可能有延迟等一个周期再看。不要只看 LSDB 计数要把 LSA 的宣告路由器、连接状态标识和度量一起看。5.4 现象虚链路配了但不通现象两台 ABR 之间配置了虚链路接口状态看起来是 up但邻居建不起来或者虚链路上的路由不生效。原因可能是传输区域类型不对虚链路必须穿过一个普通传输区域不能穿过存根区域端点必须是 ABR且 Router ID 必须可达两端 Hello 参数和认证必须一致虚链路的接口地址通常借用传输区域的接口配置时容易把区域 ID 写错。第 15 章讲虚拟通道第 3.1 节讲骨干区域第 3.6 节讲存根区域这三节要一起看。解决先确认虚链路两端都是 ABR并且都有一个接口在传输区域里再确认传输区域不是存根区域存根区域不允许虚链路穿过然后检查两端 Router ID 是否在传输区域的路由表里可达虚链路的 Hello 包是单播的Router ID 不可达就建不起来最后对 Hello 间隔、失效间隔、认证参数。虚链路属于骨干区域配置时区域 ID 要写骨干区域但传输区域要写实际经过的区域这两个 ID 不要混。第 15 章的文字不多但约束很硬配之前先把拓扑画清楚。5.5 现象等值多路径没有生效现象SPF 树里有两条开销相同的路径但路由表只选了一条或者流量只走其中一个下一跳。原因可能是设备的最大等价路径数限制、接口开销不一致、下一跳类型不同、或者其中一条路径不在同一区域。第 16.8 节讲等值多路径第 16.1 节讲最短路径树计算第 12.4.1 节讲 Router-LSA 的度量三节连起来看能判断是“没有等价路径”还是“有等价路径但没安装”。解决先确认两条路径的累计开销完全相同包括接口开销和中间链路开销再确认设备支持并启用了等价多路径最大路径数不是 1然后看下一跳是否都是同一类型某些实现要求下一跳在同一接口或同一区域最后看路由表里的路由来源区域间路由和外部路由的等价多路径行为可能不同。不要只看 SPF 树的分支数量SPF 树有分支不代表路由表一定安装多条。调开销时先确认参考带宽避免改了一个接口导致全网路径重算。6. 进阶验证用字段级对照法把中文版读成排障手册6.1 抓一个 Hello 包先对六个字段我后来固定用一个动作邻居一出问题先抓一个 Hello 包按附录 A.3.2 的字段顺序逐项对不对配置。这个动作看起来笨但能挡住大部分“配置看起来一样、实际不一样”的翻车。具体做法是在故障接口上抓一个入方向和一个出方向的 Hello 包先看网络掩码、Hello 间隔、路由器失效间隔、选项、路由器优先级、邻居列表这六个字段。两端掩码不一致广播网络可能卡 Init计时器不一致邻居会反复失效选项 E 位不一致存根区域行为会异常邻居列表为空说明对方没收到本端的 Hello。对完 Hello 包再抓一条 Router-LSA按附录 A.4.2 对连接状态标识、宣告路由器、LS 序号、链路数量、链路类型、Link ID、Link Data、度量。这一步能把“LSDB 有 LSA 但路由不对”拆成字段问题。比如链路类型写错SPF 树就连不到网络节点度量不一致等价路径就不成立宣告路由器不对说明生成者找错了。字段级对照的好处是你不需要记住全部协议只需要在故障点对几个关键字段。验证项抓包字段中文版位置异常判断区域一致性Hello 包区域 ID7.1、A.3.2区域 ID 不同邻居到不了 2-Way掩码一致性Hello 包网络掩码9.5、A.3.2广播网络可能卡 Init计时器一致性Hello 间隔、失效间隔7.1、10.5邻居反复重建选项一致性Options 的 E 位A.2、12.1.2存根区域行为异常拓扑描述Router-LSA 链路类型12.4.1、A.4.2点对点/传输网络混淆新旧判断LS 序号、校验和、年龄13.1、A.4.1更新不生效或反复刷新这张表我一般只在前三项出问题时全对一遍后面三项作为 LSDB 排障的补充。字段级对照不是让你变成协议实现者而是让你在配置和抓包之间有一条可验证的路径。中文版附录 A 的字段表在这里价值最大它把每个比特的位置和含义写清楚了比只看配置命令更接近问题本质。从那以后我每次排查邻居问题都先抓 Hello 包对字段再看状态机最后才动配置这个习惯让我少改了很多“本来没问题”的参数。希望帮到你。本文还有配套的精品资源点击获取