OSPF动态路由协议

OSPF(开放最短路径优先)

OSPF和RIP对比

对比项 OSPF RIP
协议类型 链路状态协议 距离矢量协议
选路依据 Cost,通常与带宽有关 跳数
最大路径范围 无 15 跳限制 最大 15 跳,16 跳表示不可达
收敛速度 快,拓扑变化可触发更新 较慢,默认约每 30 秒周期更新
网络规模 适合中大型网络 适合小型网络
更新内容 主要泛洪 LSA,维护拓扑信息 定期发送路由信息
环路处理 SPF 算法,较少产生环路 依赖水平分割、路由中毒、抑制计时器等机制
分层能力 支持 Area 区域划分和路由汇总 RIPv2 支持简单汇总,但无区域层次
资源消耗 较高,需要维护 LSDB、运行 SPF 较低,配置和维护简单
支持 VLSM/CIDR 支持 RIPv1 不支持;RIPv2 支持
认证 支持 RIPv2 支持,RIPv1 不支持
OSPF 的缺点
  • 占用更多 CPU 和内存,尤其在 LSDB 大、拓扑频繁变化时。

  • 初始 LSDB 同步、SPF 计算会带来一定开销。

  • 多区域设计不合理时,可能增加运维难度;Area 0 连通性要求也会限制网络设计。

  • 广播网络中 DR/BDR 选举与邻接问题是常见故障点。

RIP 的缺点
  • 最多支持 15 跳,无法用于大型或层级较深的网络

  • 只按跳数选路,无法准确反映带宽、时延、链路质量,可能选到性能较差的路径。

  • 收敛慢,故障后可能短暂形成路由环路或出现"计数到无穷"问题。

  • 周期性发送路由更新,会持续占用带宽。

  • RIPv1 是有类路由协议,不支持 VLSM、CIDR,也不携带子网掩码。

  • 不支持区域化,路由规模扩大后可扩展性较差。

一句话:OSPF 的主要代价是复杂和资源消耗;RIP 的主要问题是规模小、收敛慢、选路不够精确。

邻居表,LSDB,OSPF路由表

  • 邻居表(Neighbor Table):记录已发现、已建立邻接关系的 OSPF 邻居。通过 Hello 报文维护
  • 链路状态数据库(LSDB):保存 本区域内所有路由器产生的 LSA, 反映区域拓扑。正常情况下,同一区域 LSDB 应一致。
  • OSPF 路由表:路由器以 LSDB 为输入运行 SPF 后生成 ,保存最终用于转发的最优路由

SPF 算法

每台 OSPF 路由器都根据 LSDB 构建拓扑树,以自身为根运行 Dijkstra 算法,逐步选择到各节点累计 Cost 最小的路径,最终将最优结果写入 OSPF 路由表。Cost 越小,路径越优。

Router ID 选取

Router ID 是 32 位、点分十进制格式的路由器唯一标识,不等同于接口 IP。

通常优先级为:

  1. 手工配置的 Router ID。

  2. Loopback 接口中最大的 IP 地址

  3. 物理接口中最大的 IP 地址。

Router ID 在 OSPF 进程启动时确定;若后续接口 IP 变化,通常需重启 OSPF 进程才会重新选取。

DR,BDR

**DR(Designated Router,指定路由器)和 BDR(Backup Designated Router,备份指定路由器)**用于 OSPF 的多路访问网络,核心目的是减少邻接关系数量和 LSA 泛洪量。

适用网络类型:

  • Broadcast(广播):如以太网,自动发现邻居,需选举 DR/BDR。

  • NBMA:如传统 Frame Relay,需选举 DR/BDR。

  • Point-to-Point、Point-to-Multipoint:不选举 DR/BDR。

没有 DR/BDR 时,若同一二层网络有 n 台路由器,需要建立 n(n-1)/2 个邻接关系;有 DR/BDR 后,DROther 路由器主要与 DR、BDR 建立完全邻接,显著减少同步和泛洪开销。

复制代码
DROther ── Full ── DR
   │                  │
   └──── Full ── BDR ─┘
​
DROther 与 DROther:通常保持 2-Way,不建立 Full 邻接
角色 主要职责
DR 维护多访问网络的 LSDB 同步;生成 Type 2 Network LSA;接收其他路由器的 LSA 后再泛洪给所有路由器。
BDR 与所有路由器保持 Full 邻接,持续同步 LSDB;平时不代替 DR 泛洪,DR 故障时立即接任。
DROther 普通路由器,向 224.0.0.6 发送 LSU 给 DR/BDR;从 DR 接收泛洪的更新。

报文与组播地址:

  • 224.0.0.5:AllSPFRouters,所有 OSPF 路由器。DR 向该地址泛洪 LSA。

  • 224.0.0.6:AllDRouters,DR 和 BDR。DROther 将需要泛洪的 LSU 发往此地址。

选举规则

  1. 接口 OSPF Priority 最大者当选 DR。

  2. 若 Priority 相同,Router ID 最大者当选

  3. Priority 为 0 的接口不能成为 DR/BDR,但仍可成为 OSPF 邻居。

  4. 先选 BDR,再选 DR。

  5. 选举默认不抢占:已有 DR/BDR 不会因为后来出现了更高优先级或更大 Router ID 的设备而自动更换。

DR 故障时,BDR 立即升为 DR,再从其他符合条件的 DROther 中选举新的 BDR。因此 BDR 能降低 DR 故障时的收敛时间。

注意:DR/BDR 是每个多路访问网段、每个 OSPF 区域独立选举的,不是全网只有一台 DR 或 BDR。同一台路由器可以在一个网段是 DR,在另一个网段是 DROther。

常见排错点:

  • 邻居停留在 2-Way:DROther 之间通常正常,不代表故障。

  • 多台路由器认为自己是 DR:检查二层隔离、Hello 报文是否互通、Area ID 和网络类型是否一致。

  • 修改 Priority 后角色没变化:默认不抢占,需要重启 OSPF 进程或清除邻居关系后重新选举。

  • DR/BDR 选举异常:检查接口 Priority、Router ID、OSPF 网络类型、Hello/Dead 时间和二层组播能力。

LSA 与 LSDB

LSA(Link-State Advertisement,链路状态通告)是描述网络拓扑的一条信息 ,例如路由器接口、链路、网络前缀和开销等。LSDB 是大量 LSA 组成的数据库

常见 LSA 类型:

  • Type 1:Router LSA,描述路由器在本区域内的链路

  • Type 2:Network LSA,由 DR 产生 ,描述多路访问网络上的所有路由器

  • Type 3:Summary LSA,由 ABR 产生,用于区域间路由 ,将所连接区域的路由以子网形式传给相邻区域。

  • Type 4:ASBR Summary LSA,指向 ASBR

  • Type 5:AS External LSA,由 ASBR 产生,描述外部路由,知道这个外部路由的存在。

    分为2种

    • O E1:外部类型 1,总代价 = 到 ASBR 的内部 Cost + 外部 Cost。

    • O E2:外部类型 2,主要比较外部 Cost,默认常见。 思科外部开销默认20

  • Type 7:NSSA External LSA,用于 NSSA 区域 。(在NSSA中替代 5类 LSA,其实性质和5类 LSA是一样的

OSPF 网络类型

  • Broadcast(广播):以太网常见类型,支持自动发现邻居并选举 DR/BDR。

  • NBMA:如传统 Frame Relay,不支持广播,通常需要手工指定邻居,也会选举 DR/BDR。

  • Point-to-Point(点对点):点到点链路,不选 DR/BDR。

  • Point-to-Multipoint:一个接口连接多个点到点邻居,不选 DR/BDR。

DR/BDR 的作用是减少多路访问网络中的邻接和 LSA 泛洪数量。**DR 优先级最高者当选;优先级相同时 Router ID 最大者当选。**Priority 为 0 的接口不能成为 DR/BDR。

OSPF 报文类型与封装

OSPF 使用 IP 协议直接承载,不使用 TCP 或 UDP。

  • IP 协议号:89

  • 组播地址:

    • 224.0.0.5:AllSPFRouters,所有 OSPF 路由器

    • 224.0.0.6:AllDRouters,DR 和 BDR

  • TTL:通常为 1,报文一般不会被路由转发到其他网

类型 报文 作用
Type 1 Hello 发现、建立和维护邻居关系;在 Broadcast/NBMA 网络中参与 DR/BDR 选举。
Type 2 DD / DBD(Database Description) 交换 LSDB 中 LSA 的摘要信息,用于比较双方数据库。
Type 3 LSR(Link-State Request) 请求本地缺少或版本较旧的 LSA 详细内容。
Type 4 LSU(Link-State Update) 携带一个或多个完整 LSA,用于同步或泛洪链路状态信息。
Type 5 LSAck(Link-State Acknowledgment) 确认已收到 LSA,保证 LSA 可靠泛洪。

OSPF 工作过程

  1. 通过 Hello 报文发现邻居,并检查 Area ID、认证、Hello/Dead 时间、网络掩码等参数是否匹配。

  2. Broadcast /NBMA 网络中选举 DR 和 BDR

  3. 邻居建立邻接关系后交换 DD (Database Description)报文。DD 只携带 LSA 的摘要,而非完整 LSA。

  4. 若发现自己缺少或拥有旧版 LSA,则发送 LSR(Link-State Request)请求。

  5. 对端使用 LSU(Link-State Update)发送完整 LSA

  6. 接收方通过 LSAck 确认

  7. LSDB 同步 完成后,路由器运行 SPF 算法,生成 OSPF 路由。

区域与骨干区域

Area 0 是 OSPF 骨干区域 ,负责连接各非 骨干区域。一般要求所有非骨干区域必须直接或逻辑上连接到 Area 0,跨区域流量原则上经过 Area 0。

  • Internal Router(区域内路由):所有接口都在同一 OSPF 区域。

  • ABR(区域边界路由) :连接 Area 0 与其他区域,负责区域间路由通告与路由汇总。

  • ASBR(自治系统区域路由) :将外部路由重分发进入 OSPF。

无法物理连接 Area 0 时,可使用虚链路临时实现逻辑连接,但设计上应尽量避免。

划分区域的好处:
  • 缩小 LSDB 和 SPF 计算范围降低 CPU、内存消耗

  • 限制 LSA 泛洪,减少拓扑变化影响范围。

  • 支持路由汇总,缩小路由表,方便管理

  • 提升 大规模网络的稳定性和收敛效率。

OSPF 路由类型

  • O:区域内路由(Intra-Area)。

  • O IA:区域间路由(Inter-Area)。

  • O E1:外部类型 1,总代价 = 到 ASBR 的内部 Cost + 外部 Cost。

  • O E2:外部类型 2,主要比较外部 Cost,默认常见。

  • O N1 / O N2:NSSA 区域引入的外部路由。

优先级通常为:区域内路由优于区域间路由,区域间路由优于外部路由。

LSDB 更新与老化

正常情况下:

  • LSA 的最大老化时间(MaxAge)是 1 小时,即 3600 秒;达到后会被刷新或清除。

  • LSA 通常每 30 分钟,即 1800 秒刷新一次,即使拓扑未变化,序列号也会更新。

拓扑发生变化时:

  • OSPF 立即产生新的 LSA 并触发泛洪更新,不需要等待 30 分钟。

  • 相邻路由器收到更新后同步 LSDB,重新运行 SPF,尽快更新路由表。

除hello报文,都要经过DR路由器,没有就找BDR

OSPF协议配置

Router ID

复制代码
router id 1.1.1.1
ospf 1 router-id 1.1.1.1

单区域 OSPF

复制代码
ospf 1 router-id 1.1.1.1
 area 0.0.0.0
  network 10.0.0.0 0.0.0.255

多区域 OSPF

复制代码
ospf 1 router-id 2.2.2.2
 area 0.0.0.0
  network 10.0.0.0 0.0.0.255
 area 0.0.0.1
  network 20.0.0.0 0.0.0.255

1. 查看与排障命令

目标 常用命令 关注点
查看邻居 display ospf peer brief Area、邻居 RID、状态是否为 Full
查看 OSPF 接口 display ospf interface 网络类型、Cost、DR/BDR、定时器
查看 OSPF 路由 display ospf routing 路由类型、下一跳、通告者、Area
查看全局路由表 display ip routing-table O_INTRAO_INTERO_ASE1/2
查看 LSDB display ospf lsdb LSA 类型、LS ID、AdvRouter、序列号
查看进程/统计/错误 display ospf briefdisplay ospf statisticsdisplay ospf error 进程状态与异常计数
排查过程 debugging ospf eventdebugging ospf packetdebugging ospf lsadebugging ospf spf 实验环境短时使用,完成后关闭调试

邻居正常建立的典型状态变化是:Down -> Init -> 2-Way -> ExStart -> Exchange -> Loading -> Full。其中 ExStart/Exchange 常见于 MTU 或主从协商问题。

2. OSPF 优化参数

网络类型与 DR/BDR

复制代码
interface GigabitEthernet 0/0/0
 ospf network-type { broadcast | nbma | p2mp | p2p }
 ospf dr-priority 100
  • Broadcast 网络会选举 DR/BDR。

  • P2P 网络不选举 DR/BDR,点到点链路通常应使用 P2P 类型。

  • **两端网络类型必须匹配。**P2P 与 Broadcast 混用会导致华为设备无法建立邻居或路由计算异常。

  • DR/BDR 选举由接口优先级和 Router ID 决定;优先级为 0 的接口不参与选举。DR/BDR 默认不抢占,修改优先级后通常需要重建邻居才会重新选举。

Cost 与参考带宽

复制代码
interface GigabitEthernet 0/0/0
 ospf cost 100
​
ospf 1
 bandwidth-reference 10000

可以直接配置接口 Cost,也可通过参考带宽统一计算。默认参考带宽常为 100 Mbps, 百兆与千兆接口的 Cost 都可能是 1,无法体现带宽差异。全网应统一调整参考带宽,否则不同设备计算的路径可能不一致。(无法做到负载均衡)

Hello 与 Dead 定时器 (一般不会动)

复制代码
interface GigabitEthernet 0/0/0
 ospf timer hello 10
 ospf timer dead 40

同一链路两端的 Hello/Dead 定时器必须兼容。缩短定时器可加快故障发现,但会增加控制报文和 CPU 负担。

缺省路由

复制代码
ospf 1
 default-route-advertise
 default-route-advertise always

default-route-advertise 在本机已有默认路由时发布默认路由;always 表示即使本机没有默认路由也强制发布。可同时设置 Cost、外部类型或路由策略。

OSPF高级特性及常用技术

1. 虚连接

虚连接用于两种不规范拓扑Area 0 被分割,或非骨干区域不能直接连接到 Area 0。它在一个非骨干 Transit Area 中建立逻辑的 P2P 骨干连接。

复制代码
ospf 1
 area 0.0.0.1
  vlink-peer 3.3.3.3

两端必须在同一个 Transit Area 下相互指定对方 Router ID。虚连接是对拓扑设计的补救措施,会增加复杂度;优先通过物理/逻辑设计 保持连续骨干区域。使用 display ospf vlink 验证状态是否为 Full

2. LSA 与路由类型

LSA 名称 产生者 传播范围 作用
Type 1 Router LSA 区域内每台路由器 本区域 描述路由器直连链路、链路类型和 Cost
Type 2 Network LSA 广播/NBMA 网段的 DR 本区域 描述该多路访问网络及相连路由器
Type 3 Summary LSA ABR 区域间 将一个区域的网段通告到其他区域
Type 4 ASBR Summary LSA ABR 区域间 描述到 ASBR Router ID 的可达性
Type 5 AS External LSA ASBR 除 Stub/NSSA 外的 OSPF 域 描述引入的外部路由
Type 7 NSSA External LSA NSSA 内 ASBR NSSA 内 NSSA 内的外部路由,离开 NSSA 时可转换为 Type 5

LSA 头中的关键字段:LS Type 表示类型,Link State ID 的含义随 LSA 类型变化,Advertising Router 是始发路由器的 Router ID。

3. OSPF 路由优选

先比较路由类别,再比较 Cost。常见优选顺序为:

复制代码
区域内路由(Intra Area)
区域间路由(Inter Area)
第一类外部路由(Type1 External)           1类NSSA路由:	O N1; LSA 7类型1;
第二类外部路由(Type2 External)           2类NSSA路由:	O N2; LSA 7类型2。

直连>O>O IA>ON1>OE1>ON2>OE2
  • 区域内路由对应 Type 1/2 LSA。

  • 区域间路由对应 Type 3 LSA。

  • E1/N1 的度量会叠加到达 ASBR 的内部 Cost;E2/N2 主要比较外部度量。

  • 同类路由优先 Cost 更小的路径,可形成等价负载分担。

4. 特殊区域

区域 主要特征 限制/默认路由 常用配置
Stub 阻止 Type 4/5;保留 Type 1/2/3 ABR 下发 Type 3 默认路由;区域内不能有 ASBR 所有区域设备配置 stub
Totally Stub 比 Stub 更彻底地压缩路由表 仅保留本区域 Type 1/2 和一条默认路由 ABR stub no-summary,内部路由器 stub
NSSA 阻止 Type 5,但允许本区域引入外部路由 ASBR 产生 Type 7,ABR 可转换为 Type 5 区域设备 nssa,ABR 可配置默认路由通告

特殊区域通常位于网络边缘,并应直接或间接通过 ABR 连接骨干区域。Stub 与 NSSA 属性必须在该区域相关设备上保持一致,否则邻居无法建立

5. 路由汇总、过滤与路由引入

路由汇总

  • ABR 对区域内路由进行汇总:在对应 Area 视图配置 abr-summary

  • ASBR 对引入的外部路由进行汇总:在 OSPF 视图配置 asbr-summary

  • not-advertise 可只抑制对外发布聚合前缀;汇总能减小 LSDB、路由表和 LSA 洪泛量,但会牺牲明细可见性。

复制代码
ospf 1
 area 0.0.0.1
  abr-summary 192.168.0.0 255.255.252.0

ospf 1
 asbr-summary 192.168.0.0 255.255.252.0

过滤计算结果与过滤 Type 3 LSA

两者位置和效果不同:

  • OSPF 视图的 filter-policy ... import:过滤本机计算后准备加入路由表的路由,不必删除 LSDB 中的 LSA。

  • Area 视图的 filter ... export/import:用于控制 Type 3 LSA 的区域间传播。

Type 3 LSA 过滤命令需要结合"当前 Area"判断方向。对本实验而言,2.2.2.2/32 是 AR4 从其他区域引入到 Area 2 的区域间路由,故应在 AR4 的 Area 2 使用 import,阻止 AR5 学习该三类 LSA:

复制代码
acl number 2000
 rule 5 deny source 2.2.2.2 0
 rule 10 permit source any

ospf 1
 area 0.0.0.2
  filter 2000 import

其中反掩码 00.0.0.0,精确匹配 2.2.2.2/32。若设备使用前缀列表,可在同一 Area 2 使用对应的 filter-policy ip-prefix ... import。过滤完成后重启/刷新 OSPF 进程,再先确认 AR5 不存在该 OSPF 路由,最后确认 AR6 的 RIP 表不存在该路由。

双向路由引入

双向引入可实现协议间可达,但多边界设备容易发生路由回灌和环路,也可能出现次优路径。应规划引入点、初始 Cost 和路由 Tag;引入时打 Tag,在反向引入时通过策略拒绝带有该 Tag 的路由。

6. 安全与稳定性

认证

OSPF 可使用简单认证或 MD5/HMAC-MD5 认证:

复制代码
interface GigabitEthernet 0/0/0
 ospf authentication-mode simple plain 123
 ospf authentication-mode md5 1 plain 123

同一链路两端的认证模式、密钥和密钥 ID 必须一致。生产环境避免明文口令,优先采用更强的认证方式。

静默接口

复制代码
ospf 1
 silent-interface GigabitEthernet 0/0/0

静默接口不发送 OSPF 报文,适用于连接终端的网段,避免无关设备获得路由信息;接口网段仍可由 OSPF 发布。不要把需要建立 OSPF 邻居的互联接口配置为静默接口。

7. 邻居无法建立的高频原因

按以下顺序检查通常最高效:

  1. 链路、IP 地址和掩码是否正确,接口是否 Up。

  2. Router ID、Area ID 是否一致且未重复

  3. 两端 OSPF 网络类型是否一致,NBMA 是否手工指定邻居。

  4. Hello/Dead 定时器、认证方式和口令是否一致。

  5. Stub/NSSA 区域属性及相关选项是否一致。

  6. 广播网络中 DR/BDR 选举是否正常;优先级全为 0 会停留在 2-Way。

  7. ExStart/Exchange 状态重点检查 MTU ;同时检查 ACL 是否阻断 OSPF 报文

8. OSPF 的可靠性机制

  • 拓扑信息可靠 :每台路由器泛洪自身的 LSA ;同一区域路由器最终拥有一致的 LSDB,从而得到完整拓扑。

  • 传递可靠 :先通过 Hello 建立邻居再在邻居间同步 LSDB。

  • 确认与重传:LSU 携带 LSA,接收端以 LSAck 确认;未收到确认时,发送方会超时重传。

  • 计算可靠 :以一致的 LSDB 为基础运行 SPF 算法,计算最短路径树和最优路由。

9. OSPF 为什么通常不会产生路由环路

  • 每个区域内的路由器都根据完整 LSDB 建立相同拓扑视图。

  • SPF 算法计算得到以本路由器为根的最短路径树,树中的路径不会重复经过节点,因此正常稳定状态下不会形成环路。

  • 多区域网络以 Area 0 为骨干,非骨干区域原则上必须与 Area 0 连通,区域间通信经由骨干区域,形成层次化结构。

注意:OSPF 并非在任何收敛瞬间都绝对不会出现短暂转发环路。链路故障传播和各设备 SPF 重算存在时间差时,仍可能出现短暂微环路;稳定收敛后则不会。

10. 划分 OSPF 区域的好处

  • 缩小每台路由器维护的 LSDB,减少内存占用。

  • 限制 SPF 计算范围,降低 CPU 负担。

  • 将 LSA 泛洪和拓扑变化限制在本区域内,提高稳定性。

  • ABR 可在区域边界做路由汇总,缩小路由表,降低转发与管理负担。

  • 可使用 Stub、Totally Stub、NSSA、Totally NSSA 等区域类型,减少不必要的外部路由。

  • 便于扩展,适合构建大规模网络。

11. 复习速记

复制代码
RID 唯一,Area 0 连续。
建邻先看 Area、类型、认证、定时器、MTU。
看状态用 peer,看接口用 interface,看拓扑用 lsdb,看结果用 routing-table。
Type 1/2 区域内,Type 3 区域间,Type 4 找 ASBR,Type 5 外部,Type 7 NSSA 外部。
选路:直连 > O > O IA > N1 > E1 > N2 > E2。
汇总:ABR 用 abr-summary,ASBR 用 asbr-summary。
双向引入防回灌:规划边界、Cost 与 Tag。
相关推荐
en.en..1 小时前
C 语言嵌入式事件驱动状态机完整教程(枚举配套)
c语言·开发语言
Tim_102 小时前
【C++】024、new[]与delete[]配对使用
java·开发语言
Yyyyyy~2 小时前
[C语言]break和continue作业
c语言·开发语言
此生决int2 小时前
深入理解C++系列(10)——lsit
开发语言·c++
NoteStream2 小时前
【C语言基础】分支和循环(上)
c语言·开发语言·c++·经验分享·笔记·算法·c#
2401_827499992 小时前
C++(黑马)05-提高编程
java·开发语言·c++
进击的程序猿~3 小时前
Go Interface源码深度解析指南
开发语言·后端·golang
Data_Journal3 小时前
如何使用 Java 和 Jsoup 解析 HTML
大数据·开发语言·数据库·python·scrapy
吃好睡好便好3 小时前
MATLAB仿真框图2
开发语言·matlab·仿真·simulink