我把OSPF的LSA类型和特殊区域这块单独拎出来整理了一份自写笔记起因很简单啃完OSPF三大件邻居建立、LSDB同步、路由计算之后我发现最能卡住人的不是DR选举也不是cost计算而是LSA这条线——1类到7类谁产生、在哪个范围泛洪、特殊区域里哪类LSA能进哪类不能进连起来就是一张大网。背表格容易真到排错时脑子转不过来。这份笔记既不打算复述产品文档也不是把RFC搬过来而是我自己备考HCIP、日常用ENSP做实验、以及真机排障时沉淀下来的那套理解逻辑。适合三类人看准备考HCIP或软考网络工程师的人刚接触OSPF配置不知道从哪下手的人以及被外部路由进不了区域邻居起不来这类问题折磨过的运维。看完你会发现LSA不是七张孤立的卡片而是一条谁生产、谁转发、往哪扩散的流水线。1. 学LSA之前先搞清楚LSDB到底在存什么很多人一上来就背LSA类型表结果越背越乱。我建议反过来先想清楚一个问题OSPF为什么要设计这么多LSA类型这得从LSDB的角色说起。1.1 LSA是给SPF算法吃的食材OSPF路由计算的本质可以浓缩成三句话先建立邻居关系然后同步链路状态数据库LSDB最后每台路由器以自己为根运行SPF算法算出到每个网段的最短路径。LSDB里装的就是LSA。每一台路由器需要保证自己和同区域内其他路由器的LSDB完全一致这样每台路由器拿着同样的地图碎片去算最短路径树算出来的结果才不会互相打架。你可以把LSA想象成一张张链路状态卡片每张卡片上写着谁和我直连、这条链路开销多少、链路上有哪些邻居、我有没有把外部路由引进来。LSDB就是把所有卡片收集起来装订成册SPF算法根据这本册子画出一棵以自己为根的最短路径树。所以记住第一个判断标准LSA的本质是通告链路状态的信息单元它不是路由表条目。你可以在LSDB里看到某类LSA存在但它能不能变成路由表里的路由还得看SPF算法怎么算、以及有没有其他协议路由做对比。1.2 1类、2类LSA是区域内所有路由计算的基础在OSPF设计里真正参与SPF最短路径树构建的是1类和2类LSA。1类Router LSA由每台路由器自己产生描述自身接口直连的链路状态包括接口开销、链路类型、邻居Router ID。2类Network LSA由广播网MA网络中的DR产生描述这个网段里挂了哪些路由器相当于DR作为会议记录员把参会人员名单发出去。这两类LSA只在本区域内泛洪不会跨区域传递。SPF最短路径树主要就是靠这两类LSA搭起来的。3类、4类、5类、7类LSA在计算时更像是挂载的叶子节点——最短路径树的骨架是1类和2类其他类型的LSA把区域间路由、外部路由、ASBR位置等信息挂到这棵树上。1.3 区域划分才是LSA分类的底层逻辑会看LSDB之后你会发现一个规律OSPF之所以搞出这么多LSA类型本质上是为了支撑分区域这个设计。链路状态信息1类、2类必须留在区域内否则全网LSDB无限膨胀。跨区域信息由ABR区域边界路由器汇总提炼成3类LSA。外部路由信息由ASBR自治系统边界路由器翻译成5类LSA。NSSA区域不能直接接收5类LSA于是诞生了7类LSA由ABR翻译成5类再传给其他区域。理解了信息产生的源头在哪、扩散范围被限制在哪之后LSA类型就不是死记硬背的表格了而是跟着数据流走出来的。另外要注意OSPF报文头里的Option字段它携带E bit和N bitE bit表示是否接受外部LSA5类N bit表示是否支持NSSA的7类LSA。特殊区域的过滤机制最终就是通过这两个bit在邻居协商和LSA泛洪中起作用的。关于这一点后面排错章节会再展开。2. 七类LSA的生产—转发—扩散关系先放一张我自己整理的速查表后面逐类细说。刷题和面试时这张表够用但排错时不够必须理解每一类LSA背后的意图。LSA类型类型名称产生者扩散范围核心内容Type 1Router LSA区域内每台路由器本区域内路由器自身接口链路状态、开销、邻居Router IDType 2Network LSA广播网段的DR本区域内广播网段上连接的路由器列表Type 3Network Summary LSAABR整个OSPF域特殊区域除外区域间网段路由描述目标网段和开销Type 4ASBR Summary LSA与ASBR同区域的ABR整个OSPF域特殊区域除外ASBR的位置信息即如何到达ASBRType 5AS External LSAASBR整个OSPF域特殊区域除外引入的外部路由包括默认路由Type 6Multicast LSA组播OSPF专用不展开基本只在MOSPF协议里出现Type 7NSSA External LSANSSA区域内的ASBR仅NSSA区域内ABR转换后才能出区域NSSA区域内引入的外部路由2.1 1类Router LSA和2类Network LSA区域内的地基1类Router LSA是每台路由器都要产生的里面包含了多条Link信息每条Link描述一种链路类型Link类型含义价值Point-to-Point点对点链路P2P接口典型如串行链路上描述邻居和开销Transit传输网络链路连接广播网/非广播多路访问网络需要依赖2类LSA补充Stub末梢网络链路描述路由器直连的末梢网段比如回环口Virtual虚链路虚链路邻居穿越传输区域时描述虚链路端点1类LSA的AdvRouter就是产生它的路由器Router ID。2类LSA则只由DR产生描述了这个网段上有哪些路由器参与了DR选举。在广播网场景里1类LSA的Transit Link和2类LSA配合起来SPF才能计算出两条路由器经过交换机中转的链路。如果DR挂掉重新选举2类LSA会更新但不会引起全网大规模重算这点也是排错时的一个心理安慰。2.2 3类Network Summary LSAABR的翻译官3类LSA是区域间的网段路由通告由ABR产生描述这个网段在别的地方从我这里走过去要花多少开销。它的本质是把一个区域内的1类和2类LSA信息翻译成一句话跨区广播出去。特别注意两个容易踩的点。第一3类LSA的Advertising Router是ABR的Router ID不是原始网段路由器的Router ID。第二3类LSA的metric是ABR到达目标网段的cost不是目标网段内部某台路由器到它的距离。所以不同ABR产生的同网段3类LSA的metric可能不同路由器会选择最优的那个作为区域间路由。如果ABR配置了区域间路由汇总area range一条3类LSA就能代表多个网段路由表缩减效果很明显。这也是为什么totally stub区域里只留一条3类默认路由就能把区域间的明细全部挡在外面。2.3 4类ASBR Summary LSA给外部路由指明人往哪走4类LSA常常被人忽略但它是外部路由跨区域分发的关键。它的作用是通告ASBR在哪也就是告诉整个OSPF域里的路由器要到达外部路由得先找到这个ASBR。4类LSA由ASBR所在区域以外的其他区域的ABR产生。举个例子ASBR在区域1它产生的5类LSA要传到区域0区域0的ABR想让大家能找到这个ASBR就会给区域0的兄弟路由器发一条4类LSA内容是ASBR的Router ID是X从我这里到它要花多少cost。真正看LSDB的时候你会发现4类LSA数量通常远少于5类LSA因为一个区域可能就一两个ASBR但会引入很多外部路由。外部路由计算时路由器先通过4类LSA找到去ASBR的路径再通过5类LSA拿到外部路由条目两者缺一不可。2.4 5类AS External LSA外部世界的消息源5类LSA由ASBR产生描述外部路由是整个OSPF域中扩散范围最广的类型之一普通区域都能收到。它分两种metric类型考试和排错都爱考这个External Type 1E1路由cost ASBR到外部网络的cost 沿途各设备到ASBR的cost会累加链路开销链路越长cost越大。External Type 2E2路由cost ASBR到外部网络的cost沿途不累加。这是OSPF默认的外部路由类型。我自己的理解方式E1像打车距离越远车费越高E2像地铁票进站刷卡一个价不管你坐几站。真实网络里如果外部出口链路质量参差不齐建议用E1能让流量在真正的链路上做选择如果外部路由只是简单分发且出口很单一E2就够用且SPF计算负担小。5类LSA里还有一个特殊成员——默认路由。ASBR可以通告一条0.0.0.0/0的5类LSA整个OSPF域就都有默认出口了。2.5 7类NSSA LSANSSA区域的特殊信使7类LSA从产生逻辑上非常像5类LSA都描述外部路由但作用域完全不同。7类LSA只在NSSA区域内泛洪由NSSA区域内的ASBR产生。它存在的根本原因是NSSA区域不允许5类LSA进入但区域内部又确实有外部路由要引进来怎么办那就用7类LSA先内部消化由ABR翻译成5类LSA再扩散到区域外。这里有个细节容易被忽略7类LSA的转换是由NSSA的ABR完成的并且任何连接到非NSSA区域的ABR都可以做这个翻译。如果NSSA区域连着多个ABR可能会出现多个ABR同时转换的情况这时就需要理解P-bitPropagate bit机制只有设置了P位的7类LSA才会被转换成5类LSA。对多数配置场景来说只要记住区域内的外部路由用7类承载ABR出口处转成5类就够了。3. 特殊区域的本质把LSDB变小的设计特殊区域四兄弟Stub、Totally Stub、NSSA、Totally NSSA在考试里出现频率极高但很多人只背结论不知道设计动机。搞清楚为什么要有特殊区域配置和排错的正确率会明显上升。3.1 特殊区域不是功能阉割而是LSDB瘦身假设一个OSPF骨干网络面积很大下面挂着几十个区域每个区域都有小型分支站点。如果每个分支站点都要接收全网所有外部路由的5类LSA那么每台路由器都要维护庞大的LSDBSPF计算负担也大。更要命的是外部路由一旦出现震荡会引发全网所有路由器反复重算。特殊区域的设计思路就是让某些末端区域少收一些LSA用一条默认路由代替区域内的人想去外部网络就直接走默认路由不用关心外部到底有哪些明细路由。打个比方普通区域像是给每家每户发一份全城商家黄页特殊区域则只发一张市中心方向的指引卡需要外出时朝那个方向走就行了路由器的内存和CPU压力自然小很多。特殊区域使用有三个硬性约束这些都是考试的常客骨干区域Area 0不能配置为特殊区域因为骨干区域承担了所有区域之间的路由转发缺了明细就会出乱子。特殊区域不能作为虚链路Virtual Link的传输区域虚链路需要完整的路由信息传递。Stub区域内部不能存在ASBR因为stub区域禁止5类LSA进入ASBR在stub区域里引入的外部路由根本没法传给其他区域。如果区域里确实需要引入外部路由应该用NSSA。3.2 Stub与Totally Stub让区域内的人只信默认路由Stub区域过滤掉4类和5类LSA保留1类、2类、3类LSA由ABR自动向区域内下发一条3类默认路由0.0.0.0/0。Stub区域里的路由器不需要知道外部世界有哪些明细路由只要知道出去一律走ABR就够了。Totally Stub更进一步在Stub基础上连3类LSA也过滤掉ABR自己产生的默认路由除外相当于区域间明细路由也不让看只剩下1类和2类LSA外加一条3类默认路由。区域内的路由计算被极大地简化适合那些只有一个出口、不需要区域间明细的分支机构场景。要注意的是Stub和Totally Stub虽然有差异但配置上只在ABR上差一条命令我在第4节会给出完整配置。3.3 NSSA与Totally NSSA允许少量外部路由进院子Stub区域有个痛点区域内不允许有ASBR也不能引入外部路由。但现实中总有一些边缘区域需要引入一些静态路由或其他协议路由这时候NSSA就登场了。NSSA区域仍然过滤4类和5类LSA但允许7类LSA存在。区域内的ASBR把外部路由以7类LSA的形式通告区域内的路由器正常接收ABR负责把7类LSA翻译成5类LSA向外扩散到其他普通区域。如果NSSA区域里恰好没有外部路由需要引出ABR甚至不会产生任何5类LSA这样其他区域也免受干扰。Totally NSSA就是在NSSA基础上由ABR再加一条过滤把区域间的3类LSA也挡掉只保留ABR生成的默认3类LSA同时允许7类LSA在区域内存在。这样既保留了NSSA引入外部路由的能力又把区域内LSDB规模压到最小。3.4 四类特殊区域的LSA准入清单我把这四种区域的允许情况汇总成一张表配合Option字段理解会更透彻区域类型1类2类3类4类5类7类ABR下发的默认路由普通区域允许允许允许允许允许不允许无Stub允许允许允许不允许不允许不允许3类默认路由Totally Stub允许允许只有默认3类不允许不允许不允许3类默认路由NSSA允许允许允许不允许不允许允许可选7类默认路由Totally NSSA允许允许只有默认3类不允许不允许允许3类默认路由可选7类默认路由从这张表可以反推出一个黄金法则特殊区域过滤掉的只是外部LSA4类、5类和部分区域间LSA3类链路状态信息1类、2类永远保留。理解了这一点你就能预判常见的错误答案比如stub区域里有没有2类LSA——有因为区域内广播网段还需要DR发2类LSA描述成员关系。4. 区域类型判断与配置把规则落到命令行配置区域类型之前我强烈建议先在脑子里过一遍准入清单。这是我在ENSP上反复验证出来的习惯比直接敲命令更不容易翻车。4.1 配置前先画LSDB准入清单以华为VRP平台为例进入OSPF进程和区域时所有区域内的路由器都必须做类型匹配。判断一个区域能不能配成特殊区域按三步走这个区域是不是Area 0是就不能配特殊区域。区域里有没有ASBR有没有配置import-route或者default-route-advertise有且需要对外发布外部路由排除Stub和Totally Stub考虑NSSA。区域需不需要接收区域间明细路由不需要的话可以用Totally类型进一步减负。把这三步走完基本就能确定到底配哪类。我在ENSP里做实验时经常把区域类型配得乱七八糟比如一边stub一边普通区域来验证邻居起不来的现象效果比直接看文档好得多。4.2 Stub和Totally Stub配置要点Stub区域要求区域内所有路由器都配置stub否则邻居关系会因Option字段不一致而失败。配置命令如下在区域内的每一台路由器上ospf 1 area 1 stub然后在作为ABR的路由器上追加一条no-summary就变成Totally Stubospf 1 area 1 stub no-summaryno-summary只会作用在区域边界路由器的入方向抑制3类LSA进入该区域。区域内普通路由器不需要也不能配no-summary它们仍然配stub即可。ABR会自动向区域内下发一条3类默认路由区域内路由器不需要自己配默认路由。4.3 NSSA和Totally NSSA配置要点NSSA同样要求区域内所有路由器都配置nssa否则邻居建立会出问题ospf 1 area 1 nssaABR上追加no-summary就是Totally NSSAospf 1 area 1 nssa no-summary如果NSSA区域内的ASBR要引入外部路由需要配置引入政策ospf 1 import-route static area 1 nssa引入的静态路由会以7类LSA在区域内泛洪并由ABR翻译成5类LSA向其他区域发布。如果使用ensp做实验要注意模拟器对部分高级特性的版本支持老版本模拟器上nssa相关命令偶尔会有点小问题遇到可以先升级到较新的VRP模拟镜像。4.4 默认路由下发的两个细节这是我在实际配置中最容易翻车的地方值得单独拎出来说。第一Stub和Totally Stub区域的ABR会无条件下发默认路由不需要额外配置。但NSSA区域的ABR默认不会自动向区域内下发默认路由。如果NSSA区域内的路由器需要默认路由指向外部必须手动配置。第二如果希望NSSA区域内的路由器通过默认路由访问外部网络需要在ABR或者ASBR上配置nssa default-route-advertise这个命令会根据设备角色产生不同类型的LSA在ASBR上配置时会向NSSA区域通告一条7类默认路由。在ABR上配置时只有当设备本身路由表里有默认路由比如通过静态或BGP学到时才会通告7类默认路由如果希望无条件下发可以在命令后加always参数强制通告。ospf 1 area 1 nssa default-route-advertise always我遇到过一个分支机构场景ABR只做OSPF没有默认路由来源结果NSSA区域内的路由器一直学不到默认路由后来在ABR上加了default-route-advertise always强制下发问题立刻解决。5. 排错实战从LSA角度定位OSPF故障配置写得再漂亮实际网络中总会遇到邻居起不来、路由时有时无的情况。比起直接抓包我更推荐先看display ospf error和LSDB信息这个习惯能省下大量时间。我的经验是OSPF error表里查问题真的很清晰或者直接用debug很多时候都不需要抓包就能定位。5.1 display ospf error是排错第一站OSPF运行过程中会记录各种错误计数。当邻居状态异常时display ospf error能直接指向问题类型。我整理了几个高频字段和它们对应的常见原因error字段常见原因Bad area id邻居两端区域号不一致Bad authentication认证类型或认证口令不一致Bad checksum链路质量问题或设备转发损坏报文Bad LSA type报文携带的LSA类型与当前区域不匹配DD retransmit邻居状态变更频繁导致DD报文重传MTU mismatch接口MTU值不一致常见于ExStart状态卡住Neighbor change邻居频繁上下线通常伴随接口震荡在实际设备上用display ospf error查看总计数再用reset ospf process重置一下OSPF进程观察错误计数是否会快速累积就能判断问题是否持续发生。这个思路比在设备面前盲改配置高效得多。5.2 邻居建立不起来时的排查顺序邻居状态卡在不同阶段原因完全不同。我按状态机给出一套定位顺序卡在Init说明路由器收到了对方的Hello报文但还没能在收到的报文里看到自己。优先检查接口是否up、Hello报文是否被ACL或认证挡住。卡在2-Way邻居发现阶段完成但DR/BDR选举未完成。如果两端Option字段不匹配比如一边配了stub一边没配就会卡在这里。卡在ExStart或ExchangeDD报文交换出问题。优先查MTUP2P链路上MTU不一致会导致DD协商失败。邻居反复重启查看Dead间隔是否太短或者Hello间隔不一致。有些设备默认Dead是Hello的四倍改了一端而另一端没改就容易出现持续抖动。如果配置了特殊区域而两端区域类型不一致最典型的症状就是邻居起不来。比如一边area 1配置了stub另一边area 1是普通区域收到的Hello报文里Option字段E bit不一样OSPF直接拒绝邻居关系。这时display ospf error里会出现邻居变化记录display ospf peer则长时间停留在Init或Down状态。5.3 一个NSSA外部路由不达的排查案例我在ENSP里复现过一个很典型的场景区域1配置为NSSAASBR在区域1里引入了一条静态路由但区域0里的路由器始终看不到对应的5类LSA。我的排查思路如下第一步在ASBR上查看7类LSA是否存在。display ospf lsdb nssa如果7类LSA存在说明ASBR侧没有问题。第二步在NSSA区域的ABR上查看7类LSA是否收到以及是否被转换为5类LSA。display ospf lsdb nssa display ospf lsdb ase如果ABR上有7类LSA但没有5类LSA说明翻译环节出了问题。最常见的原因是ABR上连接其他区域的接口所在区域也被误配置成了特殊区域导致ABR无法向外发布5类LSA。第三步检查所有区域类型配置是否一致。display current-configuration configuration ospf当时我找到的根因正是区域0被误配成了NSSAABR丢了向外通告5类LSA的能力。修正区域0配置后5类LSA立刻出现在区域0的LSDB中。这个案例还说明了一个容易被忽略的细节外部路由能不能跨区域关键看ABR出口区域的类型而不只是源区域类型。5.4 进程号和区域号到底差在哪这个点经常被拿来当面试题也是配置新人容易搞混的地方。OSPF进程号只在本地设备上有意义两台设备可以配置不同的进程号只要区域号匹配且网络可达照样能建立邻居。进程号相当于路由器本地启动的一个OSPF实例编号它不参与报文协商路由器A的进程100和路由器B的进程200之间可以正常建立OSPF邻居关系。区域号则完全不同它直接参与OSPF报文协商两台邻居路由器的区域号必须一致否则收到的Hello报文会被直接丢弃error表里会出现Bad area id。所以排查区域不匹配问题时先看邻居两端接口所在区域。在命令行里区分它们也很简单display ospf peer如果不带进程号默认查进程1进入配置视图时ospf 1里的1是进程号area 1里的1是区域号两者不在一个命名空间里。我在教学时经常用这句话总结进程号是本地作业本区域号是班级名称作业本不一样不影响同班上课班级不一样根本不会在同一间教室。6. 笔记复盘最容易混淆的几个点最后把这套笔记里几个反复出现的易错点再做一次复盘也算是我自己踩坑之后总结出来的备忘。这些细节刷题时经常挖坑排错时也容易绊人。多条LSA的metric含义。3类LSA的metric是ABR到目标网段的开销4类LSA的metric是ABR到ASBR的开销5类LSA的metric是ASBR到外部网络的cost如果它是E2类型则不随经过设备累加。考试题里常给的场景是同一网段从两个ABR都能学到哪个ABR的metric小选哪个前提是两者都发布了3类LSA。DR重新选举的影响范围。DR挂掉后广播网段会重新选举DR并更新2类LSA但不会引起整个OSPF域的所有路由器重新计算全部路由。因为2类LSA只影响直连该网段的路由器计算其他区域的路由不会因为一个广播网段的DR变化而重新收敛。这个点可以纠正DR挂掉全网重算这个误区。Stub区域不能出现ASBR的原因。很多人背了Stub区域不能配置ASBR但不理解。Stub区域过滤5类LSAASBR在区域内引入的外部路由无法以5类LSA的形式发布到其他区域等于把信息锁死在区域内了没有任何意义。所以在需要引入外部路由的边缘区域要么不用Stub要么改成NSSA。特殊区域和OSPF骨干区域的边界。Area 0不能配任何特殊区域虚链路也不能穿过特殊区域。这个限制在设计和排错中都要时刻记住否则把Area 0配成Stub之后你会看到整个OSPF域的路由表瞬间出问题。另外说一句很多人学完OSPF后紧接着学BGP route control发现路由策略越写越多就是因为IGP阶段没有把LSA的语义理解透。比如哪些外部路由值得被引入、以什么metric类型引入、在哪个ABR做汇总这些决策本质上都依赖对LSA扩散范围的理解。这份笔记我自己回看了很多遍每次排查OSPF问题都还能翻到点新东西。如果你也在备考HCIP或者正在被OSPF折磨建议不要只背LSA类型表而是沿着谁产生、在哪泛洪、谁翻译、谁接收这条链路把每一类LSA串起来再用ENSP把四种特殊区域各搭一遍把display ospf lsdb、display ospf error这些命令习惯养成肌肉记忆。等到LSDB在你眼里不是一堆数字而是信息流转的路径图OSPF排错才算真正入门了。