前两天有个刚学网络的朋友给我发来一张拓扑截图说OSPF邻居起不来一直卡在Init状态。我让他把配置贴过来扫了一眼问题立刻就看出来了链路两端的Hello计时器不一致一个还是默认的10秒另一个被改成了15秒。两边其实都在正常发送Hello包但因为关键字段对不上谁也进不了谁的邻居表。这种问题不亲手做实验光靠看文档是真的记不住的——知道规则是什么和真正被规则卡住完全两种体验。这篇内容围绕OSPF实验这件事展开我默认你是那种不愿意只敲命令、还想把协议跑明白的人。我会按我自己搭建实验的习惯走一遍先讲为什么实验比背书有用然后是环境怎么选、拓扑怎么画、单区域和多区域配置怎么做、邻居起不来的问题怎么定位最后再给几个进阶实验方向。适合的人群很明确正在学路由交换的在校生、准备网络认证的考生、入职没几年想补协议细节的运维或实施工程师。如果你已经能把OSPF配置倒背如流重点看第5章的排错链路和第6章的进阶实验应该也能有点收获。1. 先想明白一件事实验不是敲命令是验证协议行为1.1 链路状态协议和距离矢量协议的差别一份地图和一堆路牌OSPF全称Open Shortest Path First开放最短路径优先。它和RIP这类距离矢量协议最大的区别在于对网络拓扑的认知方式。RIP里的路由器只能告诉邻居我去某个网段要走几步本质上是在传递一种道听途说的信息而OSPF里的每台路由器会把自己直连的链路状态包括接口地址、掩码、开销、对端是谁等以LSA的形式泛洪到整个区域最终所有路由器手里都有一份完全相同的链路状态数据库相当于每个人都拿到了一张完整的道路交通图。接下来每台路由器以自己为树根跑一遍SPF算法也就是Dijkstra最短路径优先算法算出一棵以自己为根的最短路径树再把这棵树展开成路由表。这个差异带来的实际影响非常大。SPF算出来的是全局最优路径不像距离矢量协议那样只能根据邻居转述的信息做局部最优而且链路状态数据库是全区域同步的某条链路断了所有路由器都能第一时间通过新的LSA感知到收敛速度远快于RIP。做实验的时候你会直观看到这种差异——比如在OSPF里用调试或抓包工具观察LSA泛洪会发现全网设备几乎是同一时间知道了拓扑变化而距离矢量协议要靠逐跳老化慢慢传播。理解了这个底层差别后面看路由表、看LSA类型、看区域设计就全都串起来了。1.2 OSPF实验真正要训练的五项能力很多人做实验只是把配置模板敲一遍看着邻居变成Full就觉得自己会了。我的看法是OSPF实验至少应该训练五件事缺一不可。第一参数敏感度。Hello计时器、Dead计时器、Router ID、区域ID、网络类型、认证方式任何一个不匹配都能让邻居关系卡在不同的阶段。你只有亲手把参数改坏再改好才会对哪个参数影响哪个阶段形成肌肉记忆之后在真实网络里遇到邻居故障扫一眼配置就能圈定可疑范围。第二区域设计意识。为什么一定要有Area 0为什么非骨干区域必须连着骨干区域为什么末节区域要过滤外部路由这些问题的答案只有在你配置一个真正多区域的拓扑、然后观察LSA类型和路由条目变化时才能真正沉淀下来。光背书背完就忘。第三排错方法论。看到邻居卡在Init和卡在ExStart处理思路完全不同。前者要查Hello包的参数和认证后者要查MTU和Router ID是否重复。没有实验你只能背结论遇到协议行为的变体就懵。第四选路与流量工程的直觉。Cost怎么算、等价负载均衡怎么做、怎么通过改网络类型让一个网段的选路发生改变这些属于协议在真实网络中的高阶应用光靠推理是推不出来的。第五配置规范意识。Router ID要手工指定而不是随机取接口地址、环回口要统一规划、接口启用OSPF之前要先确认物理层和IP层没有问题。这些习惯是我在项目上见过太多反面案例之后才真正重视起来的比如Router ID因为接口地址变化而乱跳导致路由振荡。1.3 动手前必须吃透的几个基础参数这里我把实验里最常用到的参数先列出来后面配置时会反复用到用一个表格来看比较直观参数常见默认值说明Hello/Dead计时器广播网络10秒/40秒非广播网络30秒/120秒Dead一般是Hello的四倍改Hello必须同步改DeadCostcost 参考带宽 ÷ 接口带宽默认参考带宽100Mbps千兆口默认Cost为1百兆口也为1因为计算结果小于1要取整Router ID手工指定否则取最大环回口或最大活动接口IP确定之后不要随意变更否则会引起LSA泛洪和路由振荡接口优先级1只影响DR/BDR选举取值范围0到2550表示不参与选举网络类型根据接口封装自动判断以太网默认走广播类型点对点链路可以手动改成点对点类型消除DR/BDR机制区域ID手工规划所有区域必须直接或间接连接Area 0区域ID可以用十进制也可以用点分十进制表示这些参数在第一次配置前就要有个大致印象不需要死记但要理解每个参数存在的意义。比如Cost为什么要有参考带宽因为OSPF设计年代百兆已经是高速链路默认参考带宽100M后来千兆万兆普及了如果不把参考带宽调大高速链路和百兆链路算出来的Cost可能都是1协议就无法区分优劣路径。这个点第5章会再讲它也是实验里非常容易踩的一个坑。2. 实验环境与拓扑设计先选对场地再动手2.1 三种实验环境的取舍OSPF实验对环境的要求其实很低只要能跑起三台以上路由器就行。但不同环境的体验差别很大我三个都试过。真机机架的优势是手感真实串口线、指示灯、模块插拔这些细节是模拟环境给不了的适合做硬件相关的入门训练缺点是成本高、占地大、一台机器只能一个人用老设备往往还不支持较新的协议特性。对于OSPF这种纯逻辑协议真机的真实感其实没有那么重要。图形化模拟工具是大多数人的入门选择。它上手快、拓扑可以随意拖拽、工程文件能保存适合验证基本配置和理解协议行为缺点是模拟器对某些特性的模拟并不完整尤其是硬件转发行为和异常场景会出现在模拟器里怎么配都通、到了真机全打脸的情况。还有一种介于两者之间的虚拟化实验平台用真实设备的操作系统镜像加载到虚拟机上运行命令和真机几乎一模一样特性支持也比较全成本为零还能同时跑多台设备组成中型网络缺点是对电脑内存要求高每台虚拟路由设备通常要几百兆内存部署步骤也比模拟器繁琐一点。我个人的建议是入门阶段用什么不重要能把拓扑跑起来就行到了研究LSA细节、验证特殊区域行为、做排错训练的阶段优先上虚拟化平台因为你会发现很多模拟器里不会坏的场景在真实系统上真的会坏。当然如果公司或学校有闲置真机拿真机做地址规划和接口配置的训练也很有价值至少能让你的命令行操作手速快上一截。2.2 一套适合入门的三角拓扑与地址规划我第一次带新人做OSPF实验固定用一套三角拓扑三台路由器两两互联形成R1—R2—R3—R1的环路结构。这个拓扑看着简单但有几个恰到好处的特点三角环网能触发SPF计算和等价负载均衡R1到达R3既可以通过直连链路也可以通过R2中转两条路径算出来Cost相等时路由表里会出现两条等价路由三台设备还可以组成Area 0加一个非骨干区域的两区域结构拿一台路由器当ABR而且故障注入很方便拔掉任何一根线都能观察完整的路由收敛过程。地址规划直接决定排错体验我建议按照链路网段带设备编号的思路来分配链路网段接口分配R1—R210.0.12.0/30R1: 10.0.12.1R2: 10.0.12.2R2—R310.0.23.0/30R2: 10.0.23.2R3: 10.0.23.3R1—R310.0.13.0/30R1: 10.0.13.1R3: 10.0.13.3各设备环回口1.1.1.1/32、2.2.2.2/32、3.3.3.3/32Loopback 0为什么用/30掩码因为点对点链路只需要两个可用地址/30刚刚好避免地址浪费也让网段和链路的关系非常清晰。为什么环回口规划成1.1.1.1、2.2.2.2这种设备号格式因为环回口在实验里有两个用途一是给OSPF提供稳定的Router ID来源二是作为全网都能学到的设备管理地址。用设备号做Router ID在所有抓包、日志和路由表里都能一眼认出设备身份这个习惯放到生产环境同样好用。2.3 拓扑设计里最常见的三个坑第一个坑是地址规划乱。有人喜欢随手取192.168.1.0、192.168.2.0这种网段看起来好记但和链路的对应关系完全无规律。等到需要抓包分析、对着路由表排查的时候你会发现192.168.5.0到底在R2还是R3底下这个问题会消耗掉大量时间。我见过最痛苦的一个实验场景是整张表里十几个网段全是192.168.x.0排错排到怀疑人生。地址规划虽然不是协议功能但它是实验体验的分水岭。第二个坑是忽略了环回口。很多教程会把OSPF配置第一步写成配置各接口IP环回口一笔带过甚至不配。但环回口在实验里几乎必不可少它给OSPF提供稳定的Router ID来源它是验证路由学到没有的天然测试源它还是后面做路由汇总、路由过滤实验的绝佳目标网段。我强烈建议每台路由器都配一个环回口并且优先把它作为Router ID的来源。第三个坑是拓扑过于线性。R1—R2—R3一根线拉到底的链式拓扑虽然配置简单但它训练不到任何有价值的协议行为——没有环就不会触发SPF计算没有等价路径就看不到负载均衡没有冗余链路就看不出收敛过程。OSPF最精彩的部分恰恰发生在环路和冗余出现之后三角拓扑或者带两条并联链路的菱形拓扑才是能学到东西的最低配置。3. 从零配置一个单区域OSPF完整步骤与验证3.1 第一步接口地址与环回口规划在启动任何路由协议之前先把物理层和链路层打通。这一步看起来无聊却是后续所有排错的地基。我习惯的顺序是先配置各接口IP地址并开启接口然后逐条测试直连ping最后再碰OSPF。直连ping不通就急着配协议等于在烂地基上盖楼出了问题你根本不知道是链路层的锅还是协议层的锅。以R1为例命令行风格因设备而异这里用最常见的写法示意不同厂商指令有差异但配置逻辑是一致的interface GigabitEthernet0/0 ip address 10.0.12.1 255.255.255.252 no shutdowninterface GigabitEthernet0/1 ip address 10.0.13.1 255.255.255.252 no shutdowninterface Loopback0 ip address 1.1.1.1 255.255.255.255 no shutdown配置完以后我会先在R1上分别ping 10.0.12.2和10.0.13.3确认两条直连链路都通。如果ping不通先看接口状态是不是up/up再查掩码是不是同一段最后检查有没有错误的路由或安全策略干扰。直连全通以后再开始配OSPF这样后面遇到的每一个问题都可以自信地说不是链路层的事。3.2 第二步启动OSPF进程与宣告网段启动OSPF实际是两件事指定进程号、宣告哪些网段进哪个区域。进程号只在本地有意义R1上跑OSPF进程1、R2上跑进程2完全没问题两台设备之间不需要进程号一致这个点新手经常误解。宣告网段有两种风格一种是用network语句配合反掩码把某个网段纳入指定区域另一种是在接口下直接启用OSPF并指定区域我现在更喜欢后者因为接口和区域的对应关系一目了然。用network风格示意router ospf 1 router-id 1.1.1.1 network 10.0.12.0 0.0.0.3 area 0 network 10.0.13.0 0.0.0.3 area 0 network 1.1.1.1 0.0.0.0 area 0在接口下启用OSPF的写法则类似这样interface GigabitEthernet0/0 ip ospf 1 area 0interface Loopback0 ip ospf 1 area 0两种方式的效果没有本质区别我建议新手统一用network方式因为教材和文档里这种写法最多在网上找答案也容易。这里有一个常见疑问环回口要不要宣告答案是必须要。环回口宣告进OSPF后全网就能学到这台设备的管理地址后面的诊断和测试都依赖它。另外注意环回口在OSPF里的通告方式它默认会被当作一条主机路由/32传播即便你给接口配置了更大的掩码也是这样。这个特性如果不知道后面做路由汇总实验时会百思不得其解。3.3 第三步验证邻居关系与路由表配置完成后验证的顺序是先看邻居再看数据库最后看路由表。邻居关系状态是OSPF健康度最直接的晴雨表。在R1上查看邻居正常情况下会看到R2和R3的状态都是FullR1# show ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 2.2.2.2 1 FULL/DR 00:00:36 10.0.12.2 GigabitEthernet0/0 3.3.3.3 1 FULL/DR 00:00:33 10.0.13.3 GigabitEthernet0/1这里有个细节值得注意广播链路上为什么邻居状态显示FULL/DR而不是FULL/BDR因为如果三台设备的同一段接口被交换机互联那么这条广播域里会进行DR/BDR选举R2在R1—R2这条广播链路上被选成了DR所以R1看到它是FULL/DR。如果你用的环境里显示FULL/-那是因为链路被识别成点对点没有DR/BDR的概念这也是正常的。接下来在R1上查看OSPF路由表R1# show ip route ospf 1.1.1.1/32 is directly connected, Loopback0 2.2.2.2/32 [110/1] via 10.0.12.2, GigabitEthernet0/0 3.3.3.3/32 [110/1] via 10.0.13.3, GigabitEthernet0/1 10.0.12.0/30 is directly connected, GigabitEthernet0/0 10.0.13.0/30 is directly connected, GigabitEthernet0/1 10.0.23.0/30 [110/2] via 10.0.12.2, GigabitEthernet0/0 [110/2] via 10.0.13.3, GigabitEthernet0/1注意看10.0.23.0/30这一条它出现了两条下一跳这就是OSPF的等价负载均衡ECMP。R1到达R2—R3之间的网段既可以走R1—R2—R3也可以走R1—R3—R2两条路径的Cost相同于是协议把两条路径都放进路由表流量会在这两条链路上分担。路由条目旁边的[110/2]中110是OSPF的管理距离2是累计Cost。这个现象只有在环网拓扑里才会出现也印证了第2章推荐三角拓扑的理由。4. 多区域实验为什么一定要有骨干区域4.1 区域划分给网络带来了什么单区域OSPF在实验里跑通以后下一步就该玩区域了。区域存在的核心原因有两个一是限制LSA泛洪的范围二是缩小每台设备的链路状态数据库规模。网络越大这两个收益越明显。想想看如果一万台路由器都处在同一个Area 0任何一台设备的链路状态变化都要泛洪给全网一万台设备每台设备都要重新跑一遍SPF这是完全不现实的。区域划分之后OSPF的LSA被分成了区域内和区域间两类。区域内发生的拓扑变化以Type 1和Type 2 LSA的形式只在本区域内泛洪不会跨区域区域边界路由器ABR会把区域内的路由汇总成Type 3 LSA区域间路由通告给其他区域。这样一来区域内的设备不需要知道其他区域的详细拓扑只需要知道哪些网段可以通过哪个ABR到达数据库规模大幅下降SPF计算量也小了很多。实验里你能直接感知到这种设计在三台设备都处于Area 0时每台设备的链路状态数据库里都是一堆Type 1、Type 2的条目当R2接入Area 1之后R3的数据库里就不再出现Area 0内部的Type 1条目取而代之的是从R2传过来的Type 3区域间路由条目。数据库的内容不一样是区域划分最直观的证据。4.2 ABR的角色与区域间路由通告多区域实验里至少要有一台设备扮演ABR也就是同时连接Area 0和非骨干区域的路由器。ABR的职责是翻译它把自己所在区域的内部路由汇总成Type 3 LSA通告给另一边区域同时把另一边区域的路由再以Type 3的形式传回Area 0。路由器上可以同时运行多个OSPF区域这台路由器自然就成为ABR。这里有一条OSPF的铁律必须遵守所有非骨干区域必须直接或通过虚链路间接连接到Area 0。如果某个区域脱离Area 0独立存在ABR之间无法正常交换区域间路由这个区域里的设备就学不到外面的路由外面的设备也学不到它。实验里最常见的翻车现场就是两台都属于Area 1的路由器直接互联中间没有经过Area 0结果两侧路由表始终不完整外部访问一直不通。做两区域实验时把R2配置成ABR的示意配置大致是这样router ospf 1 network 10.0.12.0 0.0.0.3 area 0 network 10.0.23.0 0.0.0.3 area 1配置完成后在Area 1内的R3上查看路由表你会发现Area 0内的10.0.12.0/30和R1的环回口1.1.1.1/32在路由表里都是以区域间路由的形式出现的。R3到达这些区域间网段会先把包交给ABRR2再由R2转发。你还可以在R3上查询数据库里的LSA来源会发现这些Type 3 LSA的宣告者都是2.2.2.2也就是R2。4.3 特殊区域实验末节区域与NSSA多区域跑通之后特殊区域是进阶实验里很值得玩的一环。特殊区域的设计初衷是进一步减小区域内的数据库规模——某些区域里根本不需要知道外部路由那就不让外部LSA进区。末节区域stub area是最基础的一种它不允许Type 5 LSA外部路由进入ABR会自动向区域里注入一条默认路由区域内的路由器要访问外部网络时把流量发给ABR就对了。实验里你可以在R3所在的Area 1上启用stub配置然后观察R3的路由表外部路由条目消失取而代之的是一条指向ABR的默认路由而且链路状态数据库里再也看不到Type 5 LSA。比stub更严格的是完全末节区域totally stubby area它连Type 3的明细路由也过滤掉只留默认路由和本区域路由数据库进一步缩小。再灵活一些的是NSSA非完全末节区域它允许区域内部重发布外部路由外部路由以Type 7 LSA的形式存在ABR会在区域边界把Type 7转换成Type 5再传给其他区域。我建议每个做OSPF实验的人都亲手配一遍这三种区域然后逐一对比同一个拓扑、同一个区域在普通区域、stub、totally stubby、NSSA四种模式下的路由表和数据库分别长什么样。这个对比做完你对OSPF区域设计的理解会有一个质的提升因为你不只是在背结论而是亲眼看到了路由表的变化。5. 邻居翻车现场四个高频故障的完整排查链路实验做多了你会发现OSPF配置本身不难难的是邻居关系起不来、路由学不全的时候怎么定位。这一章按邻居状态机的阶段来讲四个高频故障每个都给出完整的排查思路而不是直接甩答案。5.1 卡在InitHello包没对上话邻居状态卡在Init或者干脆连Init都进不去几乎都是Hello包的问题。Hello包在OSPF里承担自我介绍的功能里面携带了Router ID、区域ID、Hello/Dead计时器、认证信息、可选项等一堆字段。两台路由器要建立邻居关系Hello包里的这些关键字段必须互相匹配否则对方就算收到你的Hello也不会把你放进自己的邻居表。最常见的三个原因按概率排一是区域ID不匹配一台在Area 0一台在Area 1二是Hello/Dead计时器不匹配比如一台是10秒/40秒另一台被改成5秒/20秒三是认证不匹配接口或区域启用了认证但密钥或算法类型对不上。排查这类问题我的套路是固定的先看本端接口是否进入了OSPF再在接口上开启调试命令观察Hello包的收发必要时在链路上抓包直接看报文里的字段。你不需要把状态机背下来只需要记住一句话卡在Init就去看Hello包的字段。方向对了问题基本就是这几个字段之一。5.2 卡在ExStart/ExchangeMTU与重复Router ID如果邻居状态能从Init走到2Way却在ExStart或者Exchange阶段反复横跳一直到不了Full那问题就往上层走了。ExStart和Exchange属于数据库同步阶段两边要交互DBD报文核对接力链路状态数据库的内容摘要这时候出问题多半不在Hello参数而在报文交换本身。这个阶段最常见的两个坑是MTU不匹配和Router ID重复。MTU不匹配时双方发送的DBD报文如果携带了超过对端接受能力的载荷就会一直卡在ExStart反复协商表现为状态在ExStart和Exchange之间来回切换。Router ID重复更隐蔽因为Router ID相同的两台设备会认为对方就是自己数据库交换的逻辑直接混乱状态永远到不了Full。排查MTU问题先确认链路两端接口的MTU配置是否一致可以临时把一端接口的MTU调成和对端一致再观察邻居状态是否进入Full。排查Router ID重复直接查看邻居的Router ID和自己本机的Router ID如果发现两边重复手工修改其中一端然后重置OSPF进程。在真实网络里Router ID重复通常意味着设备上线前没做全局规划回想一下第2章说的配置规范意识这时候就能体会到它的价值了。5.3 DR/BDR选举乱了广播链路上的经典问题在三台以上设备接入同一个二层广播域时OSPF会选举DR和BDR用来减少LSA泛洪的重复。这个机制本身不难理解但实验里容易遇到两个问题一是大家以为DR/BDR是选出来的领导所以优先级高就一定当选二是不知道该怎么让选举重来。DR/BDR选举有一个非常关键的特性非抢占。选举结果一旦确定即使后来加入一台优先级更高或Router ID更大的设备DR和BDR也不会立刻被顶替只有当现有DR或BDR失效比如接口down掉才会触发新一轮选举。这个特性在实验里常常让人困惑我明明把R1的接口优先级改成了255为什么邻居关系里它还是BDR原因就是非抢占机制在起作用你必须让当前DR失效或者重置OSPF进程才能看到新的选举结果。要让选举重新发生最简单的操作是在所有设备上重置OSPF进程不同厂商命令略有差异模拟器上也可以直接重启OSPF进程。重置之后所有设备重新交换Hello此时优先级最高的接口会成为新的DR。做这个实验我非常建议配合抓包你能清清楚楚看到Hello报文里携带的优先级字段和Router ID看到BDR发起的链路状态同步过程还能验证优先级相同比Router IDRouter ID大者优先这条规则到底是怎么运作的。5.4 路径不符合预期Cost计算的陷阱邻居和路由都正常了但路由路径跟你设计的不一样这是另一种高频实验事故。最典型的场景你以为某条直连路径一定是首选结果OSPF偏偏让流量绕了远路。问题多半出在Cost计算上。OSPF的Cost默认是参考带宽除以接口带宽参考带宽默认100Mbps。千兆口计算结果是0.1取整后变成1百兆口计算结果是1也是1。所以在全千兆设备组成的网络里所有接口Cost都是1协议根本无法区分走直连千兆和绕路百兆的区别。如果拓扑里还有万兆口它的Cost照样是1。这就是为什么很多生产环境会把参考带宽调到1000甚至10000让高速链路在Cost上真正拉开差距。实验里的解法有三种一是修改参考带宽让Cost按真实带宽区分二是在接口下手动指定Cost这是最灵活的方式也最能体现人工控制选路的思想三是改变网络类型比如把一个广播链路改成点对点消除DR/BDR机制对邻居建立和LSA泛洪过程的影响。做路径控制实验时我建议三种方法都试一遍分别观察路由表变化和实际流量走向你会对Cost是OSPF选路的货币这句话有非常深刻的体感。6. 进阶实验路由汇总、路径控制与外部路由6.1 在ABR和ASBR上做汇总路由汇总的本质是用一条聚合路由代表一堆明细路由收益很直接减少路由表条目、降低LSA泛洪频率、缩小故障影响范围。OSPF的汇总只能在两个位置上做——ABR汇总区域间路由ASBR汇总外部路由普通内部路由器没有汇总的资格这是协议设计上的硬约束。ABR汇总实验很好做前提是地址规划要配合好。比如三台设备的环回口分别是1.1.1.1/32、2.2.2.2/32、3.3.3.3/32如果它们在Area 0内ABR向Area 1通告时可以将这些明细汇总成一条聚合路由。配置汇总之后在Area 1的R3上查看路由表原本三条独立的环回口主机路由会被一条聚合路由替代路由表瞬间清爽。这个实验最值得观察的是汇总前后LSA数量和路由条目的变化以及当某台设备掉线时聚合路由的震荡范围被限制在了多大。ASBR汇总则发生在重发布外部路由的位置。当你把某个外部协议的路由重发布进OSPF时ASBR可以对外部网段做汇总减少进入OSPF区域的Type 5 LSA数量。做这个实验有个细节值得特别注意聚合路由必须准确匹配你实际宣告的网段集合如果汇总范围和明细网段对不上路由表里就会出现黑洞也就是聚合路由指向了根本没有出口的路径流量被白白丢掉。6.2 用Cost和网络类型控制选路路径控制是OSPF实验里最有实战味的一块。设想一个场景R1到R3有两条路径一条经过R2总Cost等于50一条直连总Cost等于40正常情况下SPF一定选直连。你想让流量改走R2那条路径怎么办把直连链路的Cost调大就行。在接口下手动指定Cost是控制OSPF选路最直接的手段interface GigabitEthernet0/1 ip ospf cost 100配置完之后R1重新计算最短路径树到达3.3.3.3的目标下一跳立刻发生变化。这个操作在生产环境里非常常见比如你想让高可靠线路承载主流量把备用链路的Cost调大即可不用动任何线路和接口。除了Cost网络类型也能影响选路和邻居行为只是比较隐蔽。同一条物理链路如果一端被识别成广播网络、另一端被识别成点对点网络两边对DR/BDR的处理方式就不一致可能导致邻居关系建立异常或选举不稳定。实验里把链路两端的网络类型都改成point-to-point你会发现DR/BDR机制不再参与邻居状态直接进入Full两台设备之间的邻居关系建立更快LSA泛洪过程也更简洁。对于只有两个节点的链路点对点网络类型其实是更合理的选择这也是生产设计里值得考虑的细节。6.3 重发布外部路由与默认路由注入重发布是OSPF实验从内部路由协议向整个网络互联过渡的桥梁。重发布外部路由进OSPF后外部路由会以Type 5 LSA的形式出现并伴随两种度量类型E1和E2。E2是默认类型意思是外部路由的度量只计算外部部分不累加OSPF内部路径的CostE1则会累加从ASBR到目标沿途的内部Cost。这个区别在实验里一眼就能看出来以E2出现的外部路由从网络里任何位置看它的Cost都是一样的以E1出现则是离ASBR越近Cost越小。做这个实验时我特别建议配合抓包观察Type 5 LSA的报文结构看看外部路由的度量值、转发地址、E-bit这些字段是怎么被填写的以及特殊区域如何通过过滤规则阻止或转换这些LSA。你会发现stub区域不允许Type 5进入、NSSA用Type 7承载外部路由再转换成Type 5这些规则在报文层面都有非常清晰的体现这些细节靠背是背不下来的。默认路由注入也是重发布实验的好搭档。在ASBR上配置默认路由的注入可以让OSPF域内所有设备自动获得一条默认路由这样网内设备访问外部网络时把流量全部交给ASBR处理即可。配合Stub区域的默认路由实验一起做你就能比较清楚地理解默认路由在OSPF里的几种来源和传播范围。7. 实验记录与复盘习惯让每次实验都有积累7.1 一张实验记录表该记什么技术能力增长最快的路径不是做了多少个实验而是每个实验沉淀了什么。我给自己的要求是每做一个实验都要留记录记录表至少包含这么几列实验目的、拓扑截图、配置变更点、关键验证输出、遇到的问题和解决过程、这次实验留下的疑问。拓扑截图和配置变更点是最容易被忽略的两项很多人做着做着就忘了当前配置和上一版差在哪里等到排查问题时根本没有办法回放现场。有记录的排错和无记录的空手排查效率差距是数量级的。我自己的习惯是把每一次配置变更都叠加成小版本号保存发现问题时可以快速对比两个版本的差异一键回滚到上一个可用状态。这个习惯到了生产环境同样有价值尤其是在设备上做变更前先备份配置文件、记录变更点是最基本的职业素养。7.2 把实验变成破坏-修复游戏复盘阶段我最推荐的做法是破坏-修复训练配置好一个完全正常的OSPF网络后故意制造故障然后不看答案把它修好。比如拔掉一条链路观察收敛过程把某台设备的Router ID改掉观察影响范围在接口上错误配置认证观察邻居状态变化再改回来恢复。每一次破坏-修复都相当于一次完整的排错演练而且是在你自己搭建的环境里进行的你对这个环境的熟悉程度直接决定了你判断异常的速度。做完这些训练你对OSPF的掌握会和只会敲配置模板的人拉开明显的差距。最后说一个我自己长期保留的习惯每个实验做完我都会把拓扑推倒重来一遍只凭记忆重新配置。第一次大概率会卡住但卡住的地方恰恰就是你知识薄弱的真实位置。别怕慢这一步卡得越久下一次遇到同类问题解决得越快。OSPF实验的终点不是把配置敲通而是让你在任何一张白纸上都能毫不犹豫地画出拓扑、写出规划、配出协议、判断故障——到那一天这个实验才算真正毕业。后面学BGP、学MPLS你会发现这套实验方法依然用得上。