动态路由协议OSPF介绍
文章目录
-
OSPF知识点汇总
- OSPF的主要特点及其相关术语解析
-
- Ridge Identification(RID)的产生机制及其实现细节
- **DR(Dynamic Reconfiguration Manager)与BDR(Budgeted Dynamic Reconfigurator)的选择规则阐述
-
- OSPF的主要特点及其相关术语解析
-
OSPF划分四类网络架构
-
详细解析六类LSA功能
-
针对特殊配置的网络环境
-
深入分析五个核心数据包
-
研究数据包组成架构
-
OSPF工作原理
-
- OSPF八种状态机
- OSPF原理详细过程
-
OSPF知识点汇总
主要内容包括:与OSPF相关的术语体系及其定义、不同类型的OSFP网络架构特点分析、常见LSA(Layered Switched Architecture)的解析框架、Agregating Areas(AA)中特有的功能机制详述、详细解析OSFP协议中的报文格式及传输过程,并深入探讨其工作流程及其动态调整机制研究
OSPF特性以及相关术语
OSPF(Open Shortest Path First, 开放式最短路径优先)是一种基于内部链路状态的动态路由协议,在解决RIP无法应用于大型网络的同时避免出现网络环路问题;
OSPF的特性:
- 应用最短路径优先算法(SPF)、实现数据汇总与认证功能以及支持Classless Inter-Domain Routing(CIDR)和Variable Length Subnet Masking(VLSM)机制;该协议属于无类别的路由器协议。
- 规划员编号89配置了网络管理距离;在华为设备上设置为10,在思科设备上设置为110;该网络会因触发而发起自适应性数据更新;采用基于增量的数据更新机制;定时同步数据并实现组播广播功能;确保整个网络拓扑结构绝对无环路。
OSPF常见术语:
- IR(Internal Routers):所有设备接口都位于同一网络区域内;
- ABR(Area Border Routers):当一个设备同时属于两个或更多网络区域时,该设备即为A BR。作为边缘区域路由器,在处理网络边界时起到关键作用;
- ASBR(As Boundary Routers):如果一个设备接收了来自其他自治系统(AS)发送的路由信息,则属于该类路由器;
- BR(Backbone Routers):只要一个设备接口与任何骨干路由器相连,则该设备即被归类为 backbone router;
- Type1 External routing:这类路由经由 AS BR 引入网络内部路径。其开销计算方式为:本设备至 AS BR 的开销加上 AS BR 至目的节点(仅限于其他 AS 系统内部)的开销;
- Type2 External routing:这类路由同样经由 AS BR 引入网络内部路径。但其开销计算方式有所变化:仅考虑 AS BR 至目的节点(不包括本区域内至 AS BR 的开销);
RID生成方式以及DR/BDR选举规则
RID(Router ID,路由ID) :用于唯一标识OSPF内的路由器;
RID的生成方式(生成方式按照优先级依次往下):
- 进行手动设置;
- 若未进行手动设置,则采用路由器环回口的最大IP地址;
- 若未配置环回口,则可采取路由器物理接口的最大IP地址;
DR/BDR(Designated Router/Backup Designated Router, 指定路由器/备用指定路由器) :在广播型网络和NBMA(Non-Broadcast Multicast)网络环境中扮演关键角色。该机制通过减少广播报文中数据包的传输数量、实时监控并收集当前网络拓扑结构信息,并将这些数据发送到所有非关键节点路由器上实现路由条目同步。该过程确保所有相关节点能够根据最新的路由信息更新自己的路由表项。
DR/BDR的选举:
- 评估路由器的接口优先级 ,最高的是DR, 其次是BDR;缺省情况下设置其优先级为1;
- 当各接口的优先级一致时,则进一步比较RID;其中最大的是DR,默认情况下其值设为1;
注:在广播网络和NBMA网络中,每个网段都会选举出DR/BDR;优先级为0表示不参与选举;DR与BDR为邻接关系,DR/BDR与Dother为邻接关系,Dother与Dother为邻居关系;
OSPF四种网络类型
OSF protocol divides into four types of network environments: broadcast network, NBMA, P2P, and P2MP.
- 广播网络 :选中Dr/Brd节点作为根节点,默认接口优先级设置为1;在组播场景下会发送Hello消息及LSU和LCk`控制包;单播场景下则会发送DD数据包以及LSR
和$LCK控制包。 - NBMA :选中Dr/Brd节点作为根节点,默认接口优先级设置为1;在单播模式下会发送Hello消息、DD数据包以及LBR`和LCK`控制包。
- P2P :不选中Dr/Brd节点,默认接口优先级设置为1;在组播模式下会发送Hello消息及相关的控制信息。
- P2MP :不选中Dr/Brd节点,默认指定其优先级值为1;在组播场景下仅需传输Hello消息;而单播模式则会同时传输DD数据包以及LBR`和LCK`控制包。
注:缺省下,Dead Time(Hello死亡时间)是Hello时间的四倍;在邻接关系建立过程中两端的Hello时间不一致会造成邻居关系建立不成功;
OSPF六种LSA类型介绍
LSA(Link State Advertisement),链路状态通告负责在整体网络中进行详细地交换和保存链路状态信息,并以此了解整个网络的连接情况。该机制能够自主计算路由路径以实现有效的数据传输。
LSA常见的类型有6类:1类、2类、3类、5类、4类和7类;
Type 1 LSAs (Router LSAs, 路由器LSA):
定义对应相关设备物理接口所连接的所有连接的链路或接口(标识设备存在),并明确该相关设备的接口信息(IP地址、子网掩码及MTU等详细参数);
发布本地OSPF区域内的网络拓扑状态信息;
- 覆盖范围:仅限于本地OSPF区域网络层( won't traverse ABR nodes);
- 提供者:所有路由器;

Type2 LSA(亦称为Network LSA,在网络领域中也常被提及):用于描述 DR/BGR 所处的 网络拓扑结构 。其传播范围限定于本地 OSPF 区域,并未跨越 ABR。其作为发送者的角色由特定的路由器承担——这些路由器通常被指定位处于 DR 或 BGR 状态的角色。

Type3 LSA(Network Summary LSA, Network Converge LSA): 概述所连接区域的完整拓扑架构 ,以便同AS内部其他OSPF域了解本域的拓扑架构和链路信息; 传播范围 :所有OSPF域(除全虚拟域和全非静态最短路径(NSSA)域外); 发起者 :由ABR发起;

Type5 LSA(AS External LSA, 自治系统外部LSA):为定义携带进入OSPF域的路由(即向所有OSPF域传达到达非OSPF区域内设备的状态信息);
* 传播范围:所有OSPF域(不包括NSSA和全NS SA等特殊区域);
* 发送者:由ASBR发起;

Type4 LSA(ASBR摘要型LSA、ASBR聚合型LSA):说明其他OSPF分区到达该ASBR的具体路径。由于第五类LSA在OSPF分区内的传播过程中不会更新下一跳信息,在这种情况下必须使用第四类LSA来明确指示到达ASBR的具体路径;其传播范围覆盖所有OSPF分区(不包括NSSA与Totally NSSA类型的特殊分区);发送者为ABR。

注:在 ASBR 所在区域内,每个 router 都 aware of reaching the external router belonging to ASBR. 因此,在这个区域内不会有前往本 ASBR 的 fourth class LSA(LSA),但会有前往其他 ASBR 的 fourth class LSA.
Type7 LSA(NSSA External LSA,NSSA外部LSA):
- NSSA/Totally NSSA特殊区域内包含的路由,在内容上与第五类LSA具有高度相似性;
- 覆盖区域:仅限于NSSA区域;
- 发起方:ASBR;
OSPF特殊区域
该方法旨在帮助部分性能较弱的路由器加入OSPF网络,并减轻其负载。该网络将其分为Stub、Total Stub、NSSA和Total NSSA区域。
末节区域(Stub Area):针对性能较弱的、位于AS边界上的路由器进行优化策略设计。
前提条件:
- 位于AS边界的单一ABR点;
- 不存在对应的ASBR;
- 不在任何虚拟链路穿越的非骨干网络中;
- 在特殊区域内所有路由器都需进行配置,并且这些路由器必须能够识别本区域内所有的其他路由器。
存在的LSA :通过过滤Type4 LSA 和Type5 LSA ,由ABR(Active Route Border)生成一条新的Type3 LSA 作为默认路由,并通过广播机制将此信息发送至本区域内所有路由器;这样做的目的是为了确保本区域内的所有路由器能够通过默认路由方式相互连接访问其他路由器;
完全末节区域(Totally Stub Area) :stub区域的一种优化版本,在过滤方面更为彻底,并大幅减少了路由的数量。
前提条件 :
- 仅在AS边界处,并且只有一个ABR存在;
- 所有节点均为非骨干区域,并且不存在任何ASBR节点;
- 不涉及虚拟链路穿越的非骨干区域;
- 所有位于该特殊区域内的路由器均需进行配置(即这些路由器均应掌握相关配置信息)。
当前存在的LSA情况如下:首先去除这些类型的LSA信息(即Type3、Type4以及Type5),然后由ABR负责创建一条新的Type3 LSA默认路由,并将此信息广播至本区域内所有的路由器。这样做的目的是确保区域内各路由器能够通过这条默认路由相互连接。

NSSA区域 :上述两种区域的升级版,降低了特殊区域所需的前提条件;
前提条件 :
- 被允许配置为支持多个 ABR 和 ASBR;
* 处于无虚链路穿越的非骨干网络中;
* 每个特殊区域内所有的 routers 都必须进行配置,并且这些 routers 内部都能互相确认这一设置;
该LSA方案首先对本区域的Type4 LSAs和其他外部型态的Type5 LSAs进行过滤处理。随后,在ASBR节点上将其转换为对应的Type7 LSAs,并将这些信息发送至其他节点区域。接着,在ABR节点上生成一条新的Type7 LSAs默认路由,并通知本区域内所有路由器以完成默认路由的建立与传播。最终效果是使得该区域能够通过默认路由接入其他AS域的路由信息。
完全NSSA区域(Totally NSSA Area) :NSSA区域的优化版
前提条件 :
- 允许设置在非AS边界区域,并支持配置多个ABR与ASBR实例;
* 无需经过虚链路穿越的非骨干区域;
* 在特殊区域内所有路由器都必须进行配置,并且该区域内所有路由器都能互相确认身份。
现有LSA机制:经过处理后将现有LSA中的Type3和Type4类型以及外部引入的Type5 LSAs进行过滤,并在ASBR上将其转换为新的Type7 LSA;随后通过ABR将本区域内生成的该型式的LSA转换为对应的原始型式(即Type5)发送至其他区域;与此同时,在同一个ABR内部生成新的Default Route信息,并向本区域内所有路由器发布这两条新的Default Route信息;最终实现整个网络区域内各节点间通过Default Route方式连接至其他区域的AS路由以及其他路由器。

注:OSPF骨干区域也是一种特殊区域,OSPF骨干区域是Area ID为0,不同区域之间的报文交换都必须经过骨干区域,并且其他非骨干区域必须直接或间接与骨干区域相连,因此OSPF网络必须要有骨干区域。
OSPF五种报文分析
OSPF五种报文包括:Hello报文、DD报文、LSR报文、LSU报文和LSAck报文;
五种报文的作用如下:
- Hello信息包:声明与邻居路由器之间的邻接关系并证明自身存在性;
- 数据库描述信息包(DBSI):携带带有链路状态数据库(LSDB)信息的链路状态摘要(lsa),用于验证其是否缺乏特定的链路状态数据;
- 链路状态请求(lsa):将自身缺失的链路状态数据发送给邻居以获取完整的网络拓扑视图;
- 补充链路状态数据:根据收到的信息提供有关缺失部分的具体细节;
- 确认应答:表明已经成功接收了所有必要的补充链路状
态数据。
OSPF报文结构
OSPF的五种报文(hello、DD、LSR、LSU和LSAck)采用的都是相同的OSPF报头;
注:OSPF报文解析在没有特殊说明的情况下,默认为广播网络环境=
OSPF报头格式:

| 报文字段 | 说明 |
|---|---|
| Version | 版本字段,指定当前OSPF协议使用的版本号,OSPFv2版本值为2; |
| Packet Type | 报文类型字段,标识报文类型,数值为1-5,分别对应五种报文; |
| Packet Length | 包长度字段,标识整个报文的字节长度(OSPF报头和各报文内容); |
| Router ID | 路由器ID字段,指定发送者的源路由器ID; |
| Area ID | 区域ID字段,指定发送报文的路由器接口所在的OPSF区域ID |
| Checksum | 校验和字段,对整个报文(不包含验证字段)的校验和,用于对端路由器确定报文的完整性和正确性; |
| Auth Type | 验证类型字段,0为不认证、1为简单认证、2为MD5认证 |
| Authentication | 验证字段,不认证时没有该字段无数据;简单认证时此字段为验证密码;MD5认证时此字段为MD5摘要信息; |
Hello报文结构:

| 报文字段 | 说明 |
|---|---|
| Network Mask | 子网掩码字段,指定发送报文的路由器接口的子网掩码 |
| Hello Interval | Hello发送时间间隔字段,指定路由器发送报文的时间间隔,缺省为10s; |
| Options | 可选项字段,置“0”代表没有相应特性,置“1”代表具有相应特性,特性包括:E 是否允许泛洪AS-external-LSA;MC 是否允许转发IP组播报文;N 是否允许处理Type7 LSA;DC 是否允许处理按需链路; |
| Rtr Pri | 优先级值字段,指定本路由器的DR优先级值,默认为1; |
| Router DeadInterval | Hello死亡时间间隔字段,指定本地路由器失效时间,默认为40s;如果在该时间内没有收到Hello报文,就表明邻居失效; |
| Designated Router | DR路由器IP地址字段,指明本路由器的DR接口的IP地址; |
| Backup Designated Router | BDR路由器IP地址字段,指明本路由器的BDR接口的IP地址; |
| Neighbor | 邻居路由ID字段,指明邻居路由器的RID,可以有多个邻居; |
DD报文结构:

| 报文字段 | 说明 |
|---|---|
| Interface MTU | 接口MTU字段,指明发送报文的接口在不分段的情况下,可发送的最大值 |
| Options | 可选项字段,置“0”代表没有相应特性,置“1”代表具有相应特性,特性包括:E 是否允许泛洪AS-external-LSA;MC 是否允许转发IP组播报文;N 是否允许处理Type7 LSA;DC 是否允许处理按需链路; |
| I | 指定连续发送多个DD报文所处的位置,置“1”代表第一个报文,置“0”代表其他报文; |
| M | 指定连续发送多个DD报文所处的位置,置“0”代表最后一个报文,置“1”代表其他报文; |
| M/S | 主从关系字段,本端为Master设备就置为“1”,为Salve就置为“0”; |
| DD Sequence Number | 序列号字段,指定发送报文使用的序列号,保证报文的正确性和可靠性; |
| LSA Header | 摘要字段,指定报文中包含的LSA头部,可以同时包含多个LSA摘要; |
注:MTU值不一致会导致状态机一直停留在Exstart状态
LSR博文结构:

| 报文字段 | 说明 |
|---|---|
| LSA Type | LSA类型字段,指明请求的LSA类型,取值为1-5,对应相应类型; |
| Link State ID | 指定OSPF所描述的部分区域,该字段根据LSA类型不同而不同,Type1 LSA时,该字段为产生该LSA的路由器ID;Type2 LSA时,该字段为DR;Type3 LSA时,该字段为目的网络地址;Type4 LSA时,该字段为ASBR的RID;Type5 LSA和Type7 LSA时,该字段为目的IP地址; |
| Advertising Router | 通告路由类型,指定发送LSR报文的路由器ID; |
LSU 报文结构:

| 报文字段 | 说明 |
|---|---|
| Number of LSA | 指定报文中LSA的数量 |
| LSAs | 包含完整详细的LSA信息,同一个报文可以有多条详细LSA |
LSAck报文结构:

| 报文字段 | 说明 |
|---|---|
| LSA Age | LSA时间字段,指明LSA产生后经过的时间,单位为秒。LSA在本地LSDB会随时间老化,当泛洪扩散时,路由器会将LSA的老化增加一个Trans-delay时间; |
| Options | 可选项字段,置“0”代表具有相应特性,置“1”代表具有相应特性,特性包括:E 是否允许泛洪AS-external-LSA;MC 是否允许转发IP组播报文;N 是否允许处理Type7 LSA;DC 是否允许处理按需链路; |
| LSA Type | LSA类型字段,指明应答的LSA类型,取值为1-5,对应相应类型; |
| Link State ID | 指定OSPF所描述的部分区域,该字段根据LSA类型不同而不同,Type1 LSA时,该字段为产生该LSA的路由器ID;Type2 LSA时,该字段为DR;Type3 LSA时,该字段为目的网络地址;Type4 LSA时,该字段为ASBR的RID;Type5 LSA和Type7 LSA时,该字段为目的IP地址; |
| Advertising Router | 通告路由字段,指定发送LSAck报文的RID; |
| LSA Sequence Number | LSA序列号字段,指定发送报文使用的序列号,保证报文的正确性和可靠性; |
| LSA Checksum | 校验和字段,对LSAck报文进行校验,确保接收方收到该报文是可靠的,安全的; |
| Length | 长度字段,标识LSAck的字节大小; |
OSPF工作原理
介绍各个状态机的作用以及迁移过程。
OSPF八种状态机
Down:所有OSPF设备处于起始状态时会生成包含自身RID等信息的Hello报文。
Attempt:在NBMA网络中当邻居失效导致计时超时后若未能接收到Hello应答,则会持续扫描以生成Hello报文。
Init:当接收到未携带自身DR号数的Hello报文时会切换至Init状态。
2-way:当接收到包含自身DR号数的Hello报文时会切换至2-way交换模式。
Exstart:完成DR/BDR选举过程随后会发出空DD报文以完成Master/Salve设备选举并确定序列号值。
Exchange:本设备会生成带有LSA摘要信息的同时也会接收邻近设备所发送的所有DD报文中用于比较当前LSDB中缺失的各项LSA数据项。
Loading:当本设备需要获取其他邻近设备缺少的部分信息时会向所有相关设备发出带有请求数据包(DS)的目标DS报告(DSR)。
Full:当两端设备完成了各自的LSDB同步操作后双方将互发ACK确认数据包以完成相互的数据交换确认流程。
注:状态机的切换不一定要依次切换,只要符合某个状态机的工作情况就会切换到该状态;
OSPF原理详细过程

在起始阶段,在广播网络中两端设备均处在线路故障状态。
假设R1最先发起,在其广播网络中仅带有本机DR的Hello请求报文中向另一端发送了应答。
当另一端接收到该 hello 应答报告时(即 R2接收到来自另一端的 hello 应答报告),发现其中未附带本机ID。
系统由此进入初始化状态,并随即向相邻节点发出带有自身ID及相邻节点ID的信息。
随后将携带自身ID及相邻节点ID的信息发送出相应的 hello 应答报告。
当R1接收到对端发送来的Hello应答报文后,在确认该报文中包含了自身的Router ID信息后,
系统会自动识别到该报文中包含了自身的Router ID信息,
于是会将对端设备的Router ID添加至本地邻居表中,
随后会生成并发送包含自身Router ID和目标路由器(如R2)Router ID的信息,
当接收方(如R2)接收到来自自身带有Router ID的信息时,
其状态会被更新至Two-way模式。
当 R1 与 R2 均进入 2-way 连接状态时
主设备R1持续不断地将非空LSA字段发送给从设备R2,并由于LSDB包含大量LSA字段(即多个数据分段),因此每次发送前会将它们拆分成多个DD报文进行传输;每当从设备R2接收到主设备发来的所有DD报文时(这些报文已按序列号排序),它们会按照接收到的时间顺序进行响应;当主设备发出了所有非空的数据分段(即所有带有有效Header信息的数据包)时,则系统状态将更新为Exchange;一旦主设备完成所有带有完整Header信息的数据包传输任务(即没有未处理的数据分段),则系统状态将更新为Loading状态
主设备完成发送LSA摘要后,在获取本地存储中的DSB数据时会发现部分主设备缺少了特定的RS信息。随后会向另一台主机发送带有请求信息的RS报文。当另一台主机接收到来自本机的第一个RS报告后,则会生成包含详细RS内容的信息包并发送出去。当接收方主机接收到此类型的信息包后,则会将相关数据整合到本地存储中,并立即回复RS确认报文以表明已成功接收数据包。如果后续检查中发现仍有主机未收到完整的报告列表,则会导致后续的操作流程相应延缓并逐步推进直到所有主机完成同步工作为止;在此过程中若出现异常情况则会在下一步骤中自动触发错误报告机制以便及时排查故障原因并采取相应措施恢复连接状态;最终成功完成全部主机间的同步操作之后系统将会切换到全连接状态;
注:两端路由的MTU值不同就会一直处于Exstart状态;由于双发都有可能没有对方的LSA,故在DD报文交互的过程中主从关系不是固定的;
上述过程,如下图:
路由器A状态机 路由器A 路由器B 路由器B状态机 Down 通过分组广播的方式发送给邻居节点,并包含本地设备标识信息的Hello报文 Initialization 通过分组广播的方式发送给邻居节点,并包含路由器A和B标识信息的Hello报文 Two-way 通过分组广播的方式发送给邻居节点,并包含路由器A和B标识信息的Hello报文 Two-way 发起DR/BDR选举过程 Exstart Exstart 交互空的数据差分(DD)报文以确定主从关系 Exchange 发布DD报文用于比较已存在的LSAs Exchange 发布LSR报文以请求进行LSDB更新操作 Send-LSR 发送LSU并响应来自LSR的请求 LSU-Response 进行至LSAs重传列表为空时完成 Loading Loading 实施路由器A和B之间的双向LSDB同步操作直至LLSA重传列表为空
注:启动DR/BDR选举流程,在零交互DD报文中完成主从端设备关系的确认;同时执行LSDB同步操作直至所有LSA重传列表为空时(此时完成双方邻接关系的建立)。
