ARTICLE DETAIL

资讯详情

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

HCIP-Datacom备考:OSPF邻接状态机与LSA全解析排障指南

HCIP-Datacom备考:OSPF邻接状态机与LSA全解析排障指南 备考HCIP-Datacom的人只要翻到OSPF这一章基本都会先被两样东西拦住一个是邻接关系的状态机从Down到Full七个状态背起来不难难的是真到了设备上看到邻居卡在某个状态时根本不知道下一步该查什么另一个就是LSAType1到Type7七种类型每条LSA谁生成的、往哪传、管什么用考完就忘的不在少数。这篇文章我就用排障和实验的视角把OSPF邻接关系的建立全过程、DR/BDR的设计逻辑、以及LSA家族的分工重新捋一遍。内容以HCIP-Datacom考试要求为主线结合ensp里能实际复现的配置和现象把为什么这么设计讲清楚。无论你是刚学OSPF的小白还是准备冲刺HCIP正在刷题的人这篇文章都值得花二十分钟看完。1. OSPF邻居状态机七个状态背后每个卡住都对应一类故障很多资料喜欢把OSPF的七个状态简单列成一张表让大家死记硬背。我的建议是先别背先把状态机当成一次人际交往来看——两个人从陌生到交换全部家底中间要经历看见对方确认对方也看见自己商量谁先说开始报菜单发现缺菜去补这几个阶段。OSPF邻居建立过程本质上就是两台路由器互相确认身份、同步链路状态数据库LSDB的过程。1.1 Down、Init、2-Way从没看见到双向可见在OSPF进程启动后接口开始周期性地发送Hello报文这时邻居状态是Down。一旦接口收到了对端发来的Hello报文状态就会从Down切换到Init表示我已经发现你了。但请注意Init状态只代表我收到了你的Hello并不代表你收到了我的Hello。也就是说此时可能只是单方向通信正常对端的链路还没起来或者对端没有把我们的接口地址划进同一个区域、同一个网段。继续收敛之后如果双方在各自的Hello报文里都看到了对方的Router ID状态就会进入2-Way。2-Way意味着双向通信确认完毕这是邻居关系成立的标志。我们平时用display ospf peer看到的状态如果是2-Way说明对方能看到你、你也能看到对方但这还不算真正开始同步链路状态。在广播网络中比如一个二层交换机接了好几台路由器2-Way状态还有一个特殊使命它会触发DR/BDR选举。选举完成之后非DR/BDR设备之间会停留在2-Way状态不再往下走。很多人在HCIP考试里遇到的为什么邻居是2-Way而不是Full八成都是这个原因。1.2 ExStart、Exchange、Loading主从协商与LSDB同步的核心从ExStart开始两台路由器就正式进入掏家底流程。ExStart阶段要确定一件事谁是Master谁是Slave。规矩很简单Router ID大的当MasterRouter ID小的当Slave。Master负责指定DD报文的序列号Slave只能使用Master给的序列号进行确认。这种主从设计避免了双方同时发送DD报文导致序列号混乱的尴尬局面。进入Exchange阶段后双方开始交换DD报文。很多人把DD报文理解为数据库的目录——它并不携带完整的LSA内容只包含LSA的头部信息。通过交换这些头部信息双方快速比对LSDB里到底有哪些LSA、版本是新的还是旧的。考试里经常考到一个细节DD报文有隐式确认机制并不需要单独回复确认报文接收方通过继续发送自己的DD报文来确认上一个DD报文已收到。如果一方发现自己缺少某些LSA就会进入Loading状态主动发送LSRLink State Request报文向对方请求完整的LSA数据。对方收到LSR后回复LSULink State Update报文里面封装了完整的LSA请求方收到后回复LSAck确认完成这一轮同步。当双方的LSDB一致后状态才进入Full。所以Full状态的含义非常明确邻接关系成功建立LSDB完成同步接下来可以各自运行SPF算法算路由了。1.3 进程号、区域号不一致邻居为什么根本不起来在ensp里做OSPF实验很多人会忽略进程号和区域号的区别。OSPF进程号是本地概念它的作用是在同一台路由器上区分多套OSPF进程进程号不同相当于两套完全独立的OSPF协议在运行彼此不交换路由。两台路由器建立邻居关系时进程号必须一致否则Hello报文发出去对方也认不出来。区域号则决定了LSA的传播边界。两台直连设备必须在同一个区域的同一个网段内才能建立邻居关系跨区域直连比如一台在Area 0一台在Area 1中间没有ABR设备是无法形成邻居的。考试中经常出现区域号不一致能否建立邻居的选择题答案是不能原因就是Hello报文中的Area ID字段不一致时收到的报文会被直接丢弃。从排障的角度看如果display ospf peer什么都看不到第一步就该检查接口是否宣告进了OSPF、进程号是否一致、区域号是否一致。这三个基础项不满足后面的状态机再熟也没用。2. 广播网中的DR/BDR为什么不是所有邻居都进入Full初次在ensp里做实验的人常常会遇到一个困惑我在广播网里接了四台路由器为什么display ospf peer一看有的邻居是Full有的却停在2-Way是不是配置出错了其实不是这正是DR/BDR机制在起作用。2.1 建立太多邻接是O(N^2)灾难DR/BDR就是代表制在广播网络中如果每两台路由器之间都建立Full邻接关系N台设备就需要建立N*(N-1)/2个邻接关系。三台设备还能接受五台就变成10个设备一多协议报文洪泛量会成倍增长。所以OSPF采取了代表制所有非DR设备只跟DR和BDR建立Full邻接关系非DR设备之间一律保持2-Way。假如一个网段里有四台路由器R1到R4选举出DR是R1BDR是R2那么R3和R4都只需要跟R1、R2建立Full。R3和R4之间不需要同步LSDB因为DR会负责收集所有路由器的链路状态信息再生成Network-LSAType2 LSA发布给大家所以R3和R4之间不建立Full并不会影响整个网段的路由计算。2.2 DR/BDR选举的三个要点优先级、Router ID、不抢占DR/BDR选举规则在HCIP考试里属于高频考点我简单梳理成三句话接口优先级越大越优先优先级范围是0到255默认为10表示不参与选举如果优先级相同Router ID大的优先DR选出后不会被抢占即使后来加入一台更高优先级的设备它也不会把现有DR挤掉。第三点尤其容易考到。很多人会想当然地认为新加入的高优先级设备会马上变成DR实际上OSPF为了保证网络稳定性只要现有DR不失效就不会重新选举。新设备只能等到DR故障或者OSPF进程重启后才有机会成为DR。BDR的作用是在DR失效时快速接替DR避免整个广播网的LSDB同步从零开始。在ensp里验证这个机制很容易先把三台路由器的接口优先级都设为默认观察DR是谁然后改其中一台的优先级为200重启OSPF进程再观察DR变化。你会发现重启之后新设备才可能当选DR整个切换过程伴随着所有邻居重新建立Full邻接实际生产环境里这种操作要格外谨慎。2.3 不同网络类型下邻接关系差异广播、P2P、NBMA、P2MPOSPF的网络类型直接影响邻接关系建立方式这也是考试中经常结合场景出题的地方。我把常见网络类型整理成表方便对照网络类型是否选举DR/BDR建立邻居方式典型场景Broadcast广播选举自动发现Hello邻居以太网、ensp默认P2P点到点不选举自动发现Hello邻居串口链路、虚链路NBMA非广播多路访问选举必须手动指定邻居Frame Relay、X.25P2MP点到多点不选举自动或手动指定邻居多个P2P链路的聚合场景华为设备在ensp里最常见的坑是两边网络类型不一致。比如一边接口是默认的Broadcast另一边手工改成了P2P两边Hello报文携带的网络类型不匹配邻居状态就会一直在Down或Init之间反复或者直接起不来。所以排查邻居问题时display ospf interface查看接口的网络类型应该成为常规动作。3. LSA家族再梳理Type1到Type7每类LSA的真实分工LSA是老生常谈但好多同学只是机械地记住Type1是Router-LSA、Type2是Network-LSA、Type5是外部路由一旦深入问这条LSA是谁通告的它能传到哪个区域就答不上来。我这里换一个角度把每条LSA想象成一张情报卡片卡片上有发件人、收件范围、内容简介结合起来就清楚了。3.1 LSA头部老化、序列号、校验和决定谁是新所有LSA都共享一个20字节的头部包括老化时间、LS类型、链路状态ID、通告路由器、序列号和校验和。这些字段在整个LSDB同步和更新机制里非常关键。两条LSA做新旧比较时规则是先比序列号序列号大的更新序列号相同再比校验和校验和大的更新如果连校验和也一样就比老化时间老化时间越小说明越新。当然实际处理中还有其他边界条件这套规则保证了即使在网络抖动时也不会把一条旧LSA当成新LSA来泛洪。老化时间从0开始计时最大3600秒。当一条LSA的老化时间达到3600秒它会从LSDB中移除。这个机制在删除LSA时很有用设备要撤销一条LSA不是直接抹掉而是把它老化到3600秒再泛洪出去让全网所有设备都把它删掉。3.2 Type1 Router-LSA与Type2 Network-LSA区域的地基Type1 LSARouter-LSA由每台运行OSPF的路由器生成描述自身所有属于该区域的接口状态、链路类型和开销。它在区域内传播不会跨区域。一台路由器如果在多个区域都有接口它会为每个区域分别生成一条Router-LSA。Type2 LSANetwork-LSA只有DR才能生成描述的是广播网段内连接了哪些路由器。链路状态ID填写的是DR接口的IP地址。Type2 LSA同样只在区域内传播。把Type1和Type2放在一起看一台区域内所有路由器的接口信息、每个广播网段的成员关系就被完整描述出来了。区域内SPF算法就是基于这两类LSA构建出整个区域拓扑。3.3 Type3、Type4、Type5、Type7跨区域和外部路由的实现方式Type3 LSASummary-LSA由ABR生成用来把一个区域内的路由信息汇总后通告给其他区域。它描述的是路由信息而不是拓扑信息所以其他区域通过Type3 LSA只知道那些网段可达并不知道具体拓扑。这就是OSPF为什么能在区域边界隐藏拓扑细节、减少计算量的根本原因。Type4 LSAASBR-Summary-LSA同样由ABR生成但它描述的不是网段而是ASBR在哪。其他区域要访问ASBR通告进来的外部路由必须先找到去往ASBR的路径Type4 LSA承担的就是这个指路功能。所以考试问Type4 LSA由谁产生答案一定是ABR而不是ASBR。Type5 LSAAS-External-LSA由ASBR生成描述的是OSPF域外的路由会在整个OSPF自治系统内泛洪。Type7 LSANSSA-LSA只在NSSA区域内出现也是由ASBR生成但它只能在NSSA区域内部传播。如果NSSA区域需要把外部路由发布到其他区域必须由ABR把Type7 LSA转换成Type5 LSA后再通告出去。3.4 外部路由E1/E2开销计算逻辑别搞混Type5和Type7 LSA描述外部路由时都带有外部开销类型。E2类型是默认值只计算外部链路本身的开销不考虑到达ASBR的OSPF内部开销E1类型则把到达ASBR的内部开销也加进去。这个区别在实验中最直观同一台设备同时学习到同一条外部路由的E1和E2版本看路由表会发现E1的可达开销等于内部开销加外部开销E2的可达开销只等于外部开销。很多HCIP题库喜欢在这里挖坑让你判断哪种类型更准确。从实际选路角度说E1能更真实地反映端到端路径开销但默认使用E2也是标准行为。我建议在ensp里把引入静态路由时的开销类型分别改成E1和E2做对比印象会深得多。4. HCIP-Datacom考点落地从理论题到ensp实验考试不会只让你默写状态机而是会把状态机、LSA类型、网络类型这些概念揉在场景里考。这一节我不去猜题只把最容易被忽略的几个考点摊开来说。4.1 理论考法状态机、LSA类型与DR选举的常见陷阱第一个高频陷阱是所有邻居都进入Full。正确说法是在广播网络中所有路由器只与DR/BDR建立Full邻接关系DRother之间保持在2-Way。题干只要模糊地说两台OSPF路由器之间一定建立Full就要警惕。第二个高频陷阱是DR/BDR的抢占。无论是更高优先级设备加入后立刻成为DR还是DR故障后由最高优先级设备接任两个都要分开看。前者错后者对BDR接任DR时并不是重新选举而是直接升级然后再重新选举新的BDR。第三个高频陷阱是LSA的产生者。Type4 LSA由ABR生成而不是ASBRType7转Type5在ABR上完成Type3 LSA由ABR生成但明细路由不会跨区域传播。这些颗粒度很细错一个字整道题就没了。第四个隐藏考点是报文类型与状态机的关系。OSPF一共五种报文Hello、DD、LSR、LSU、LSAck。哪个报文在哪个状态起作用经常结合状态机题目一起考。比如Exchange状态交互的是DD报文Loading状态发送的是LSR报文这些对应关系要非常熟练。4.2 实验考法动态路由配置实验中必须检查的状态HCIP-Datacom实验考试中OSPF部分通常是多区域配置加路由引入。做实验题时最大的风险不是配不出来而是配完不看状态就直接交卷。我给自己定了一条规矩任何OSPF实验做完必须检查三样东西。第一样是display ospf peer brief看所有邻居状态是否为Full如果不是Full立刻排查网络类型、MTU、区域配置。第二样是display ospf lsdb确认每条区域内的LSA都存在区域间路由有Type3 LSA外部路由有Type5或Type7 LSA。第三样是display ip routing-table确认OSPF路由出现在路由表中并且开销和预期一致。如果你在ensp里用的是华为设备还需要注意配置角色时别把Router ID遗漏。Router ID不一致会导致邻居建立失败或者出现重复Router ID的冲突警告。常见的做法是用环回口地址做Router ID稳定性更好。5. 邻接问题排障链路从display ospf error到抓包排障思路比命令本身重要。最高效的OSPF排障路径是先看邻居状态再看错误计数最后才考虑抓包。很多人一上来就抓包反而被海量报文淹没。我自己在ensp和生产环境里都更习惯先查display ospf error。5.1 排障第一步display ospf error查错华为设备上执行display ospf error能看到OSPF进程按错误类型统计的计数比如Hello报文错误、DD报文错误、LSU报文错误、区域ID不匹配、掩码不匹配、校验和错误等。这个输出非常直观某些场景下确实查问题老清晰了抓包都不用。举例来说如果错误计数里Hello Interval mismatches一直在涨说明两边的Hello定时器不一致如果Area mismatches在涨说明两边区域号不一致如果Virtual neighbor not found说明虚链路配置有问题。挨个对照错误字段能省掉大量抓包时间。不过要注意错误计数是累计值不是实时状态。排障时先记录当前数值重启进程或清空统计后再观察是否快速上涨这样判断更准确。5.2 用debug和抓包定位状态机卡住如果错误计数表里没有明显异常或者你想精确看某个状态机转换点再用debug或者抓包。华为设备可以在用户视图执行debugging ospf packet receive查看收到和发送的OSPF报文配合terminal monitor和terminal debugging输出。debug输出的信息量很大建议只关注特定邻居或特定接口的报文。抓包则更直观Wireshark能直接解析OSPF报文的类型、Router ID、区域ID、MTU字段还能对比同一对邻居之间交换的DD报文序列号定位主从协商阶段是否存在异常。5.3 三个典型场景的完整思路我梳理三个最典型的邻居故障现场每个都对应一条排查链路。场景一是邻居卡在Init。优先怀疑单向通信检查对端接口是否up、是否被访问控制列表过滤、接口是否处于同一网段。如果Hello报文里看不到自己的Router ID说明双向确认还没完成。场景二是邻居卡在ExStart或Exchange。经典原因是对端接口MTU不一致DD报文中的MTU字段协商失败。华为设备默认使用接口MTU如果两边不一致可以在接口下配置ospf mtu-enable让OSPF严格校验MTU也可以直接改成点到点网络类型来绕过部分协商。另一个可能原因是两端Router ID冲突导致主从关系无法正常协商。场景三是邻居状态在Full和Down之间反复跳动。这种波动往往是链路质量问题比如物理链路丢包导致Hello报文超时或者区域配置临时变更导致LSA频繁老化。先查错误计数里的hello报文超时次数再根据接口流量和丢包情况判断。6. 实验做完后我自己的一些习惯最后分享几个我平时做OSPF实验和备考HCIP时养成的习惯算是个人经验不一定适合所有人但很实用。第一个习惯是做完一个实验就顺手保存配置文件并且记录拓扑图。OSPF实验经常要改配置、重启进程没有存档的话一旦把网络类型、Router ID这些改乱了可能要全部重来。第二个习惯是善用display ospf interface确认接口级参数。这一条能同时看到网络类型、Hello定时器、Dead定时器、DR/BDR、接口开销信息非常完整。每次配置完多区域我都会先扫一遍所有参与OSPF的接口确认每个接口确实在预期的区域里。第三个习惯是主动制造故障来练排障。在ensp里故意把一边的网络类型改成P2P、把一边的区域号改错、把Router ID改成有冲突的值然后用display ospf peer和display ospf error去反推原因。这样练上几轮考试里的故障分析题基本就没悬念了。OSPF的邻接关系和LSA内容多、逻辑深但它不是什么玄学。把状态机当成沟通流程把LSA当成情报卡片再配合ensp里的反复验证你会发现这些知识点是能串成一条线的。希望这篇文章能帮你把这条线理通。
返回列表