
拿到HCIP考纲的人十个里有九个最后都会卡在同一种题目上——不是“OSPF是什么”而是“OSPF综合实验怎么一气呵成”。这个实验几乎把OSPF的考点全串到了一起多区域划分、特殊区域设置、报文交互、路由引入再叠一层BGP双栈联动最后还得亲手排一遍故障。简单说它就是一个浓缩版的企业组网沙盘模拟的是总部骨干加分支机构再加外部路由域的真实场景。这篇文章我会把我自己做实验的完整过程和踩过的坑摊开讲拓扑、规划、配置、验证、排错全给到适合正在备考HCIP、或者想用ensp把OSPF彻底吃透的人直接抄作业。1. 实验设计与组网规划1.1 为什么“综合实验”要这么设计单区域OSPF的配置说实话没什么含金量把接口宣告进area 0就能起来。但真实网络里没人会把几万个路由器堆在同一个区域里那样LSA洪泛会直接撑爆链路。所以HCIP阶段的OSPF综合实验核心考查的就是你对“区域”这个概念的理解深度骨干区域必须连续、非骨干区域只能通过ABR和骨干交换路由、特殊区域怎么在不影响路由可达性的前提下削减LSA洪泛。我设计的这个实验拓扑是典型的三层结构模拟的是“总部两个分支外部运营商”的组网区域0骨干区由R1、R2、R3三台路由器构成负责承载核心路由交换。区域1左侧分支R2作为ABR连接R4区域类型配置为Totally Stub用来验证末梢区域的LSA过滤效果。区域2右侧分支R3作为ABR连接R5区域类型配置为Totally NSSA用来验证外部路由通过Type-7 LSA进入OSPF的过程。外部域R5同时作为ASBR一方面引入一条静态路由模拟直连外部网络另一方面和R6跑EBGP模拟企业出口对接运营商。这样设计的好处很直接一份实验同时覆盖了OSPF的邻居建立、LSA类型转换、特殊区域行为、双向路由引入、BGP联动和策略控制练一遍相当于把HCIP路由部分的核心考点全过了一遍。1.2 进程号和区域号的区别先从最容易混的点下手在配置之前我必须先把进程号和区域号的区别说清楚因为这是实验里最容易翻车的地方也是面试里最常被追问的细节。进程号process-id是路由器本地概念只对本设备有意义。两台直连路由器可以一个跑OSPF 1、一个跑OSPF 2照样能建立邻居因为进程号不参与报文的字段协商。但是同一台路由器上如果起了两个不同进程号它们之间的路由是隔离的需要靠import-route互相引入这一点经常被拿来考。区域号area-id则必须全网统一属于同一个区域的路由器必须配置相同的区域号否则报文携带的区域ID对不上邻居关系直接卡在Init状态。特别要注意的是区域0是整个OSPF域的骨干所有非骨干区域必须物理上或逻辑上虚链路连接到区域0否则区域间的路由就学不全。我见过不少人把进程号和区域号写成一样觉得“反正都是数字保持一致比较好看”这纯属自己给自己挖坑。规划时候想清楚进程号随便定同一个物理拓扑里你甚至可以用不同编号但区域号必须严格按设计走。下面是我这次实验的地址规划。设备接口地址所属区域备注R1LoopBack01.1.1.1/32Area 0骨干中心R1GE0/0/0 → R210.0.12.1/24Area 0骨干链路R1GE0/0/1 → R310.0.13.1/24Area 0骨干链路R2LoopBack02.2.2.2/32Area 0ABRR2GE0/0/0 → R110.0.12.2/24Area 0骨干链路R2GE0/0/1 → R410.0.24.2/24Area 1连接分支R3LoopBack03.3.3.3/32Area 0ABRR3GE0/0/0 → R110.0.13.3/24Area 0骨干链路R3GE0/0/1 → R510.0.35.3/24Area 2连接分支R4LoopBack04.4.4.4/32Area 1末梢路由R4GE0/0/0 → R210.0.24.4/24Area 1接入链路R5LoopBack05.5.5.5/32Area 2ASBRR5GE0/0/0 → R310.0.35.5/24Area 2接入链路R5GE0/0/1 → R610.0.56.5/24外部BGP互联R6LoopBack06.6.6.6/32外部AS模拟运营商R6LoopBack1200.1.1.0/24外部ASBGP宣告网段注意LoopBack地址建议直接规划成Router ID比如R1就用1.1.1.1这样排查邻居时一眼就能看出哪台设备出了问题不用再去翻接口地址。1.3 先把骨干区域的底子打好所有实验的第一件事永远是配置接口地址和LoopBack然后再谈动态路由。我习惯先把所有接口和LoopBack配置完再用display ip interface brief确认一遍省得后面OSPF起不来时分不清是链路问题还是协议问题。以R1为例基础配置如下system-view sysname R1 interface GigabitEthernet0/0/0 ip address 10.0.12.1 24 interface GigabitEthernet0/0/1 ip address 10.0.13.1 24 interface LoopBack0 ip address 1.1.1.1 32这里有个细节容易被忽略华为ensp里的GigabitEthernet口默认是开启的但部分模拟器版本接口状态可能显示down如果不放心可以手动敲一下undo shutdown。接口地址配完后把R2、R3同样配好再在R1上起OSPFospf 1 router-id 1.1.1.1 area 0 network 10.0.12.0 0.0.0.255 network 10.0.13.0 0.0.0.255 network 1.1.1.1 0.0.0.0network命令后面跟的是通配符掩码不是子网掩码这个写错是新手高频错误。0.0.0.255等价于反掩码匹配的是10.0.12.0/24这个网段。宣告LoopBack的时候用0.0.0.0精确匹配32位主机路由。配完R2和R3后可以在R1上用display ospf peer查看邻居状态正常情况应该看到两个Full状态。2. OSPF核心机制与多区域配置2.1 五种报文到底在干什么弄懂它邻居排错就成功一半OSPF协议的报文类型一共五种Hello、DD、LSR、LSU、LSACK。这五种报文我建议用一句话记Hello负责认识人DD负责核对家底LSR负责要缺的东西LSU负责给东西LSACK负责确认收到。邻居建立过程里最值得关注的是状态机流转Down到Init是Hello报文在探路Init到Two-Way说明双方都看到了对方这时广播网络上会开始选DR/BDRTwo-Way之后进入ExStart开始主从协商比对Router ID决定谁先发DD报文接着是Exchange阶段互换DD摘要Loading阶段通过LSR/LSU补全缺失的LSA最后才到Full。整个过程中只要参数对不上状态就会卡在某个中间环节不前进。常见卡点有这么几个Hello间隔和Dead间隔不一致会导致邻居反复振荡MTU不一致会让DD报文交互卡在Exchange阶段区域ID不一致会把邻居卡在Init。理解了这个流程后排错时就不用瞎猜看到display ospf peer输出停在哪一步基本就能锁定问题方向。2.2 多区域配置实操与虚链路补充场景配置多区域说白了就是在ABR上同时宣告不同区域的网段。用R2举例它同时连接Area 0和Area 1配置如下ospf 1 router-id 2.2.2.2 area 0 network 10.0.12.0 0.0.0.255 network 2.2.2.2 0.0.0.0 area 1 network 10.0.24.0 0.0.0.255R3同理把10.0.35.0/24和3.3.3.3/32放进Area 0或Area 2。严格来说R3的LoopBack应该宣告在Area 0里保证ABR自身能通过骨干学到全域路由。R4作为Area 1内的纯内部路由器只需要宣告Area 1的网段即可如果配置了特殊区域还要跟着改区域类型。关于虚链路virtual-link我补充一个实际场景假设R2和R5之间需要建立逻辑连接但中间跨越的区域不是骨干区而且R5无法直接物理接入Area 0这时就可以在R2和R5上分别配置virtual-link让这条逻辑隧道穿越中间区域把R5“虚拟接入”骨干。配置方法是在ABR两端进入中间区域的视图# R2上中间区域为area 1 ospf 1 router-id 2.2.2.2 area 1 vlink-peer 5.5.5.5 # R5上中间区域为area 1 ospf 1 router-id 5.5.5.5 area 1 vlink-peer 2.2.2.2提示虚链路的两端必须配置彼此的真实Router ID而且两端必须处于同一个非骨干区域。它属于应急手段生产环境里能不用的尽量别用因为虚链路上的LSA洪泛性能并不理想考试里却是个高频考点。配置完多区域后用display ospf lsdb就可以看到LSA的种类和数量开始变化。骨干区域里有Type-1、Type-2、Type-3、Type-5而真正的末梢区域里LSA种类会被大幅削减这正是特殊区域的功劳。2.3 特殊区域选型一张表讲清楚四种末梢区域特殊区域是OSPF综合实验的分水岭。很多人配置完多区域觉得完事了但HCIP真正的考查点是你能不能根据区域角色选对特殊区域类型。四种区域类型的核心区别在于允许哪些LSA进入区域类型允许的LSA外部路由处理默认路由适用场景StubType-1/2/3不允许Type-5进入ABR自动下发Type-3默认路由末梢区域无外部路由需求Totally Stub仅Type-1/2和一条Type-3默认路由不允许Type-3/4/5下发Type-3默认路由更严格的末梢区域NSSAType-1/2/3/7允许Type-7进入ASBR负责转换可选下发Type-7默认路由末梢区域但有外部路由需要引入Totally NSSAType-1/2/7和一条Type-3默认路由允许Type-7进入下发Type-3默认路由NSSA基础上进一步削减LSA我的实验里Area 1是纯末梢区域R4后面没有外部路由需求所以就配Totally Stub把外部LSA全挡在门外。R2上配置ospf 1 router-id 2.2.2.2 area 1 stub no-summary注意stub区域内的所有路由器都要配置stub命令只是只有ABR上加no-summary参数。R4上也要写stub。R4配置后路由表里会出现一条ABR下发的默认路由但看不到任何外部路由条目。Area 2则配置为Totally NSSA因为R5后面既要引入静态路由还要跑BGP属于典型的“末梢区域但有外部路由需求”。R3上的配置ospf 1 router-id 3.3.3.3 area 2 nssa no-summaryR5上同样要配nssa但不需要no-summary。区域内的ABR会自动生成到区域外的Type-3默认路由而R5引入的外部路由会以Type-7 LSA的形式在Area 2内传播再由ABRR3转换成Type-5 LSA通告到整个OSPF域。这一步是理解NSSA价值的关键也是判断你会不会用NSSA的标准。3. 路由引入与BGP联动3.1 综合实验里为什么要挂BGP很多自学OSPF的人做到多区域配置就停了导致后面遇到真实的双协议组网完全没概念。企业出口路由器上OSPF通常部署在内网BGP用于对接运营商或分公司两边总要互相“通报”路由信息。这个综合实验把BGP挂上去就是为了还原这个真实场景。我在R5上做了双引入一条静态路由模拟直连外部网络一路BGP路由模拟运营商网段。静态路由和BGP路由都要进入OSPF域反过来OSPF内部的路由也要进入BGP发给外部AS。这种双向引入一旦处理不好就会产生环路和次优路径所以必须配合Route-Policy来做控制。R5上先配置静态路由和BGP进程ip route-static 100.1.1.0 24 NULL0 bgp 65000 router-id 5.5.5.5 peer 10.0.56.6 as-number 65100 # network 200.1.1.0 24说明一下R6上预先配置了LoopBack1地址是10.0.56.6的对端通过network 200.1.1.0 24把200.1.1.0/24通告进BGP。R5这边因为需要把OSPF学到的内网路由传给R6所以还要在BGP视图里引入OSPF路由。而BGP路由要进入OSPF则在OSPF进程里引入BGP。两边的引入方向别搞反。3.2 双向引入的具体配置思路先看OSPF侧引入BGP和其他外部路由的配置ospf 1 router-id 5.5.5.5 area 2 nssa import-route static type 1 import-route bgp type 1这里我用的外部路由类型type是1表示外部开销在传播过程中不断累加内部开销这样更贴近真实运营商的选路逻辑。对于NSSA区域这些外部路由会以Type-7 LSA进入OSPF域。再看BGP侧引入OSPFbgp 65000 import-route ospf 1 route-policy OSPF_TO_BGP为什么引入OSPF时要挂Route-Policy因为如果不过滤OSPF域内的所有路由包括从BGP引入回去的那部分都会被重新发到BGP一旦BGP再把这些路由回灌给OSPF就形成了环路。我在这里用一个Route-Policy把OSPF路由打上AS Path属性或者直接过滤掉不希望通告的网段。这样一套双向引入配置做完可以在R4上看到200.1.1.0/24这个外部网段已经通过OSPF学习到了。从R4的视角看这条路由经历了“BGP → OSPF Type-7 → OSPF Type-5 → Area 1 Stub区域默认路由”的完整过程整个链路就是综合实验最精华的验证点。3.3 用Route-Policy实现路由控制热词里提到的bgp route control其实就是通过策略干预路由的发布、接收和选路。我在实验里做了两个典型控制。第一个控制是控制BGP发给R6的路由。R5的OSPF域里有很多内部路由这些没有必要全部通告给外部AS于是我用Route-Policy只放行内网核心网段acl number 2000 rule 5 permit source 10.0.0.0 0.0.255.255 # route-policy OSPF_TO_BGP permit node 10 if-match ip route-source acl 2000 apply as-path 65000 65000这段配置的含义是匹配源地址属于10.0.0.0/16的路由然后给路由追加两次AS号相当于抬高AS Path长度。外部AS的选路器看到AS Path变长就会更倾向于选择其他路径访问这些网段从而实现“我通告给你但我不希望你优先走我”的流量控制意图。第二个控制是防止OSPF把BGP路由回灌给BGP形成环路。我在OSPF引入BGP时把引入路由打上Tag标记然后在BGP引入OSPF的策略里拒绝带Tag的路由route-policy OSPF_TO_BGP deny node 5 if-match tag 100 route-policy OSPF_TO_BGP permit node 10这样处理后从BGP进OSPF的路由不会被重新通告回BGP从静态路由进入的也不会防止了路由震荡和次优路径。这一套“打Tag、过滤Tag”的思路在现网里非常常用实验里练熟了面试时能直接讲出设计理由。4. 排错与实战经验4.1 display ospf error是个被低估的排错利器热词里有一句很真实的话“ospf error表里面查问题老清晰了或者直接debug抓包都不用。”这句话我深有体会。很多人一遇到OSPF邻居起不来就急着开Wireshark抓包其实华为设备自带的错误统计表往往更直接——它直接把协议层面的错误类型和计数贴在你脸上。命令就一条display ospf error输出里会按接口、报文类型列出各种错误计数常见的几个字段对应的含义我整理成了表格错误计数项含义常见原因Bad Area ID接收到的报文区域ID与本地不一致区域号配置错误Bad Neighbor报文中的邻居字段不匹配对端Router ID变化或配置不一致Bad Packet报文格式错误版本不匹配、报文被篡改Bad Authentication认证失败认证类型或密码不一致Virtual Link Error虚链路报文错误虚链路两端配置不匹配Hello Interval MismatchHello间隔不一致接口下Hello/Dead计时器配置不同MTU MismatchMTU不一致接口MTU设置不同卡在Exchange阶段排查顺序我有一套固定打法先display ospf peer看邻居状态卡在哪一步然后display ospf error看哪个错误计数在增长最后才考虑是不是要抓包。因为大多数问题看一眼error表就能定位比如看到Bad Authentication在涨直接去两头接口下面比对ospf authentication-mode就能解决比抓包分析快得多。在实际操作里error计数是累计的修完配置后计数不会自动清零。想要干净的排查环境可以用reset ospf all或者重启OSPF进程在ensp里最快捷的办法是直接在接口视图下敲shutdown后再undo shutdown让接口的邻居重建error表会重新计数。4.2 debug和抓包的取舍时机虽然说error表很好用但有些问题它给不了线索比如OSPF路由计算错误、莫名次优路径这时候就得靠debug和抓包了。华为设备上OSPF调试命令是debugging ospf packet使用前必须先执行terminal monitor和terminal debugging否则调试信息不会打印到终端上。我习惯在ensp里直接对接口做抓包原因很简单模拟器里抓包能看到报文原始内容比如Hello报文里的HelloInterval、DeadInterval、Area ID、认证字段一眼就能和本地配置比对比看debug输出还要直观。我的取舍标准是协议报文层面问题用error表定位参数协商问题用抓包看字段路由计算问题用debugging ospf spf看SPF计算过程。抓包适合ensp环境真机上不太方便debugging命令才是现场实战的主打工具。有一点必须提醒debugging命令在现网设备上会消耗大量CPU生产环境慎用做完诊断要立刻undo debugging all关掉。ensp里无所谓但养成这个习惯没坏处。4.3 高频故障速查表综合实验做下来有几类问题几乎每个学员都会碰到一次。我把它们整理成速查表遇到问题可以直接对照处理现象可能原因排查与修复邻居状态卡在Init区域ID不一致或对方没收到Hello检查双方area配置确认接口物理状态up邻居状态卡在ExchangeMTU不匹配两端接口配置相同MTUundo shutdown重启邻居状态反复振荡Hello/Dead间隔不一致修改接口计时器保持两端一致邻居一直Down接口没宣告对或网络类型不一致display ospf interface查看接口网络类型区域间路由学不全骨干区域不连续检查area 0是否连续必要时配置虚链路外部路由在NSSA区域消失ABR没引入Type-7转换确认ABR和ASBR都配置了nssa且ASBR有Type-1/2引入BGP引入OSPF后环路缺少Tag标记过滤引入时打Tag反向引入时过滤TagRouter ID冲突多台设备Router ID相同改LoopBack或手动指定router-id重启OSPF进程这些坑里最隐蔽的是MTU问题。ensp默认的以太网接口MTU是1500但如果你在某台设备上改了接口MTU而忘了改对端邻居就会一直卡在Exchange阶段error表里不一定会报明显错误需要抓包看DD报文里的MTU字段才能发现。这也是为什么我一直强调“参数一致性”是OSPF实验的第一纪律。排错时还有个实用小技巧配置改动后不要急着怀疑协议先确认接口是up的。我用过太多次这种场景——折腾了半天OSPF最后发现ensp里的接口因为没敲undo shutdown一直处于down状态属于纯纯的物理层乌龙。我个人做完这个OSPF综合实验最大的体会是掌握配置套路只是及格线能在不看教材的情况下独立设计出一套区域规划、判断特殊区域选型、用Route-Policy掐住路由环路才算真正把OSPF吃透。建议你在ensp里照着这个拓扑完整敲一遍然后故意改错几个参数再用error表和peer状态去反推故障原因。这轮折腾下来的收获比反复看十遍理论都大。后面你还可以在这个实验基础上继续扩展比如把R4后面挂一台设备模拟新增分支或者把Area 2改成普通NSSA再对比路由表变化这些延伸玩法能帮你把每一个细节都验证到位。