OSPF路由详细讲解

一、OSPF 存在的理由:与 RIP 的三维对比

讲义的切入点是三个维度------选路、收敛、占用资源。这三个维度就是"为什么要有 OSPF"的全部答案。

维度 RIP 的表现 OSPF 的表现 谁更优
选路 距离矢量,以跳数为度量,只看"经过几台设备",不看链路快慢 链路状态,先收集拓扑、再用 SPF 算最短路 ;以带宽为度量 OSPF 完胜
收敛 计时器长(30/180/120s),收敛慢,靠"传闻"逐跳传 计时器短(Hello 10s / Dead 40s),拓扑一变立刻触发更新 OSPF 更好
占用资源 传的是路由信息 ,单个报文小;但30s 一次高频周期更新,长期开销大 传的是拓扑信息 ,单个报文大;但不做高频周期更新(仅 30min 一次),且设计了大量优化机制 整体上 OSPF 略优

1. 选路:为什么 OSPF 不会出环

复制代码
链路状态型协议的解题步骤:
  ① 每台路由器收集全网 LSA(拓扑信息)
  ② 拼出完整的拓扑图(LSDB)
  ③ 以自己为根,用 SPF(Dijkstra)算出一棵最短路径树
  ④ 依树生成路由表

树形结构天生无环 ------因为树上任意两点之间只有唯一路径。这是链路状态协议与距离矢量协议最本质的差别:RIP 是"听邻居说",OSPF 是"自己画地图再算路"。

同时,OSPF 用带宽算 Cost,能反映链路优劣。RIP 用跳数,一条 10G 链路和一条 1M 链路在它眼里一样"便宜",这是它选路不佳的根本原因。

2. 收敛:为什么 OSPF 更快

环节 RIP OSPF
邻居探测 靠 30s 周期报文"间接"感知 靠 Hello 10s 主动探测,Dead 40s(4 倍)判定失效
拓扑变化 触发更新 + 逐跳"传闻",可能计数到无穷 变化点直接泛洪 LSA,全网同时重算 SPF
失效判定 180s 才判失效 40s 即判失效

一句话:RIP 收敛慢在"要等很久才知道出事了 "和"要靠邻居一个个传话"。

3. 占用资源:为什么"单个报文大"却"整体更省"

  • 单包角度 :RIP 一个报文最多 25 条路由(504 字节),很小;OSPF 的 LSU 要装 LSA,报文明显更大。所以单包 OSPF 吃亏。

  • 长期角度 :RIP 每 30 秒 把整张路由表重发一遍,一天 2880 次;OSPF 收敛完成后只发 Hello(很小)保活,LSA 每 30 分钟才刷新一次(1800 秒),且只在变化时泛洪。

  • 加上 OSPF 的区域划分、DR/BDR、组播、LSA 老化等优化机制,整体资源占用 OSPF 略优。


二、OSPF 基础认知

1. 名称与版本

OSPF = Open Shortest Path First,开放式最短路径优先协议。

版本 适用 说明
OSPFv1 --- 实验室阶段夭折,从未实际部署
OSPFv2 IPv4 本课主体
OSPFv3 IPv6 报文结构变化较大,靠 Link-Local 地址建邻居

"开放式"指它是由 IETF 制定的公开标准,任何厂商都能实现,不像 EIGRP 早期是思科私有。

2. 关键参数(必背)【补充】

项目 取值
协议号 IP 协议号 89 (直接封装在 IP 之上,不用 TCP/UDP)
组播地址 224.0.0.5 (AllSPFRouters,所有 OSPF 路由器都监听) 224.0.0.6 (AllDRouters,只有 DR/BDR 监听)
华为默认优先级(Preference) 10(优于 RIP 的 100,同样路由 OSPF 必赢)
度量 Cost = 参考带宽 / 接口带宽
参考带宽 默认 100 Mbps
Hello 时间 10s(广播 / P2P 网络)
Dead 时间 4 × Hello = 40s
LSA 刷新周期 1800s(30 分钟)

3. 进程与 Router ID

  • ospf 1 中的 1 是本地进程号 ,只在本机有效,两端进程号不同也能建邻居。

  • Router ID(RID) :用于在 OSPF 域内唯一标识一台路由器,格式与 IP 地址一致(点分十进制)。

RID 的两个要求 :① 全网唯一 ;② 格式统一(点分十进制)。

RID 的选举顺序(重要):

优先级 来源 说明
① 最高 手工配置 router-id 1.1.1.1 只要满足"唯一 + 格式合法"即可,不要求是本机真实 IP
② 次之 环回接口中最大的 IP 设备配了 Loopback 就选它
③ 最后 物理接口中最大的 IP 没有环回口时使用

【补充】RID 一旦选定,修改后必须重启 OSPF 进程才生效 (reset ospf process)。生产环境强烈建议手工指定,否则接口 IP 变动会导致 RID 跳变、邻居重建。


三、OSPFv2 与 RIPv2 的异同

1. 相同点(三条)

# 相同点 说明
① 都是无类别路由协议 都支持 VLSM (变长子网掩码)和 CIDR(无类域间路由)
② 都用组播发送 RIP 用 224.0.0.9;OSPF 用 224.0.0.5 / 224.0.0.6
③ 都支持等开销负载均衡 默认最多 4 条(可调)

【补充】"无类别"是相对 RIPv1 而言的:RIPv1 属于有类协议,通告路由不携带掩码,只能按 A/B/C 主类识别网络,因此不支持 VLSM、不支持不连续子网。RIPv2 与 OSPFv2 都携带掩码,没有这些限制。

2. 不同点(一条,但决定一切)

协议 适用规模
RIP 中小型网络
OSPF 中大型网络

为什么规模不同? 因为 RIP 有 15 跳的硬上限、收敛慢、且按跳数选路;而 OSPF 若要支撑大型网络,就必须解决"拓扑信息太多、SPF 计算太慢"的问题------于是有了结构化部署:区域划分。


四、区域划分(OSPF 的结构化部署)

1. 单区域与多区域

类型 说明
单区域 OSPF 全网只有一个区域,所有路由器 LSDB 完全一致
多区域 OSPF 划分为多个区域,区域内维护完整拓扑,区域间只传路由

2. 区域划分的目的(核心一句话)

区域内部传递拓扑信息,区域之间传递路由信息。

这句话的深层含义:

  • 区域内 :所有路由器 LSDB 一致,跑 SPF,知道每一条链路------这是链路状态特征。

  • 区域间 :ABR 把"我这边有哪些网段"汇总成 Type 3 LSA 发出去,对方只知道"能到",不知道内部拓扑 ------这实际上是距离矢量的特征。

所以说 OSPF 是"链路状态型协议带了一点距离矢量的特征 "。这也解释了为什么区域划分能减小 LSDB 规模、降低 SPF 计算压力:把大图切成小图,图与图之间只交换结论,不交换细节。

3. ABR ------ 区域边界路由器

定义 :一个接口属于一个区域 ;同时连接两个及以上区域的路由器称为 ABR(Area Border Router)。

  • 区域之间可以存在多个 ABR(提供冗余)。

  • ABR 是区域间路由的"翻译官":把区域 A 的拓扑翻译成路由,注入区域 B。

【补充】路由器角色完整版:

角色 判定
内部路由器 IR 所有接口在同一区域
骨干路由器 BR 至少一个接口在 Area 0
ABR 同时连接骨干区域和至少一个非骨干区域
ASBR 引入外部路由(如静态、直连、其他协议)的路由器

4. 区域划分的两条硬性要求

# 要求 解释
① 区域之间必须存在 ABR 设备 没有 ABR,两个区域就是两座孤岛,路由传不过去
② 必须按星型拓扑划分 中间的区域叫骨干区域 ,其余所有非骨干区域都必须围绕骨干区域 ,且必须直连骨干
复制代码
        ┌──────────┐
        │  Area 0  │  ← 骨干区域(星型中心)
        └──┬────┬──┘
     ┌─────┘    └─────┐
┌────▼───┐      ┌────▼───┐
│ Area 1 │      │ Area 2 │   ← 非骨干区域必须直连 Area 0
└────────┘      └────────┘

【补充】如果某个非骨干区域无法物理直连骨干区域,可用 Virtual Link(虚连接) 逻辑上"拉一条线"到骨干区域,属于过渡方案。

5. 区域 ID

项目 内容
长度 32 位二进制
表示 十进制(0、1)或点分十进制 (0.0.0.0、0.0.0.1)
骨干区域 固定为 0 (0.0.0.0)

注意:区域 ID 长得像 IP 地址,但它不是 IP 地址,只是 32 位编号。


五、OSPF 的五种数据包

OSPF 不用 TCP/UDP,五种报文直接封装在 IP 报文中(协议号 89)。

# 报文 全称 作用 讲义里的比喻
1 Hello Hello Packet 周期性发现、建立、保活邻居关系 打招呼
2 DBD / DD Database Description 数据库描述报文 ,描述本地 LSDB 中 LSA 的摘要(不是完整 LSA) "菜单"
3 LSR Link State Request 链路状态请求报文 ,基于 DBD 摘要,请求自己未知的 LSA "点菜"
4 LSU Link State Update 链路状态更新报文 ,真正携带 LSA 数据的报文 "上菜"
5 LSACK Link State Acknowledgment 链路状态确认报文,确认收到 LSU 签收

记忆链条:Hello 打招呼 → DBD 递菜单 → LSR 点菜 → LSU 上菜 → LSACK 签收。这五步正好对应后面的状态机。

1. Hello 报文详解【补充】

Hello 报文虽然是"最小"的报文,但它携带的参数决定了能不能建邻居:

字段 含义 不一致的后果
Router ID 发送者身份 不导致失败,但影响选举
Area ID 所属区域 必须一致,否则建不了邻居
Hello Interval Hello 周期 必须一致
Router Dead Interval 死亡时间(4×Hello) 必须一致
Router Priority DR 选举优先级 影响 DR/BDR 归属
Network Mask 接口掩码 广播网络下必须一致
DR / BDR 本网段 DR/BDR 的接口地址 用于选举
Neighbor 已知邻居的 RID 列表 Init → 2-Way 的关键
Authentication 认证类型与口令 必须一致
Stub 标志 区域是否为 Stub 必须一致

邻居建不起来的 90% 原因,都在这张表里:Area ID 不一致、Hello/Dead 不一致、认证不一致、掩码不一致、Stub 标志不一致、网络类型不一致、MTU 不一致(MTU 在 ExStart 才检查)。

2. Hello 与 Dead 的关系

复制代码
Hello Interval = 10s(默认)
Router Dead Interval = 4 × Hello = 40s

含义:40 秒内一个 Hello 都没收到,就判定邻居失效,立即断开邻居关系并重新计算。

【补充】华为设备不同网络类型的默认计时器:

网络类型 Hello Dead
Broadcast(广播,以太网默认) 10s 40s
Point-to-Point(P2P) 10s 40s
NBMA 30s 120s
P2MP 30s 120s

3. OSPF 的周期更新

OSPF 存在每 30 分钟一次的周期更新。

【补充】30 分钟不是"重发路由",而是 LSA 老化到 1800s(LS Refresh Time)时由产生者重新泛洪一次 ,用来防止 LSA 老死。LSA 的 MaxAge 是 3600s ,超过就失效删除。所以 OSPF 的"周期更新"是按 LSA 刷新,不是 RIP 那种"整表重发"。


六、OSPF 的七个状态机(本天最难,也是最爱考)

1. 状态总表

# 状态 名称 触发条件 / 发生了什么 是否稳定态
1 Down 关闭 刚启动,发送 Hello 后进入下一状态 ---
2 Init 初始化 收到 Hello 报文中包含自己的 RID 时,进入下一状态 ---
3 Two-Way 双向通信 标志"邻居关系"建立 ;此阶段做条件匹配 ✔ 稳定态①
4 ExStart 预启动 用不带数据的 DBD 进行主从选举,比较 RID ---
5 Exchange 交换 用携带数据的 DBD 交换 LSDB 的摘要信息 ---
6 Loading 加载 用 LSR / LSU / LSACK 获取完整的未知 LSA ---
7 Full 完全邻接 标志"邻接关系"建立,LSDB 已同步 ✔ 稳定态②

2. 邻居关系 vs 邻接关系(最容易混)

邻居关系(Neighbor) 邻接关系(Adjacency)
对应状态 停在 Two-Way 走到 Full
含义 只是"互相看得见、能通 Hello" "LSDB 完全同步"
交换内容 只有 Hello Hello + DBD + LSR + LSU + LSACK
是否交换 LSA 不交换 交换

一句话:邻居是"认识",邻接是"交底"。 认识的人很多(邻居),真正交底的没几个(邻接)。

3. 条件匹配(Two-Way 之后的"关卡")

只有匹配成功的设备之间才可以进入下一个状态;匹配失败则停留在邻居状态,仅用 Hello 包进行周期性保活。

这是讲义反复强调的一句,含义是:

  • 两台设备 Hello 参数一致 → 通过条件匹配 → 继续 ExStart → ... → Full(建立邻接)

  • 两台设备"不够格"互相同步 LSDB(例如同一广播域里的两台 DROther )→ 停在 Two-Way,只发 Hello 保活

所以看到 display ospf peer 里两台 DROther 之间是 2-Way,是正常现象,不是故障。

4. ExStart:主从关系选举

怎么选 :双方发送没有携带数据的 DBD 包 ,比较 Router ID ,RID 大的成为 Master(主)。

为什么非要选主从?

主从关系选举主要是为了错开 LSA 摘要信息的交换过程,减少同一时间的资源占用。

具体做法:由 Master 统一控制 DBD 的序列号(Slave 只能回应 Master 的序号),把"双方同时猛发报文"变成"一问一答的串行过程",避免报文风暴、避免重复发送。

讲义原图(ExStart / Exchange)

复制代码
   R1 (RID 1.1.1.1)                          R2 (RID 2.2.2.2)
        │                                          │
        │  DD(内容为空,序列号 X)                 │
        │  我是 Master,我的 Router-ID 是 1.1.1.1   │
        ├─────────────────────────────────────────►│  Ex-start
        │                                          │
        │        DD(内容为空,序列号 Y)            │
        │        我是 Master,我的 Router-ID 是 2.2.2.2
        │◄─────────────────────────────────────────┤
        │                                          │
        │  ← 比较 RID,2.2.2.2 更大 → R2 为 Master   │
        │                                          │
        │  DD(序列号 Y)这是我的 LSDB 中的 LSA 摘要信息
        │◄─────────────────────────────────────────┤  Exchange
        │  DD(序列号 Y+1)这是我的 LSDB 中的 LSA 摘要信息
        ├─────────────────────────────────────────►│

注意:双方一开始都自称 Master ,选举结果靠比较 RID 得出。在 Exchange 阶段双方交换 DD 报文,用于描述自己所拥有的 LSA 的摘要信息。

5. Exchange 与 Loading

  • Exchange :交换的是摘要 (相当于给菜单),此时双方都还不知道对方具体有哪些 LSA 的内容。

  • Loading :根据摘要比对出"我缺哪些",用 LSR 请求 → LSU 送完整 LSA → LSACK 确认,逐条补齐。

讲义原图(Loading)

复制代码
   R1 (RID 1.1.1.1)                          R2 (RID 2.2.2.2)
        │  LSR  我要请求 xx LSA 的完整信息          │
        ├─────────────────────────────────────────►│  Loading
        │  LSU  这是你请求的 xx LSA 的完整信息       │
        │◄─────────────────────────────────────────┤
        │  LS ACK  确认收到 LSU                     │
        ├─────────────────────────────────────────►│
        │  LSR  我要请求 yy LSA 的完整信息           │
        ├─────────────────────────────────────────►│
        │              ……(重复,直到补齐)          │
        ▼                                          ▼
   Full:我和 R2 的 LSDB 同步了         Full:我和 R1 的 LSDB 同步了

最后一句"我和 R2 的 LSDB 同步了 "就是 Full 的定义:双方数据库完全一致。

6. 状态机速记口诀

复制代码
Down(哑)→ Init(听到你提我)→ 2-Way(互相认识)→ ExStart(选老大)
→ Exchange(对菜单)→ Loading(点菜上菜)→ Full(交底完成)

两个稳定态 :2-Way(邻居)、Full(邻接)。两个"容易卡住"的状态 :2-Way(条件匹配失败)、ExStart(MTU 不一致 / 主从选举失败)。


七、OSPF 的工作过程(全景串联)

1. 从启动到收敛(讲义原文逻辑 + 注释)

复制代码
① 启动 OSPF 进程,配置完成
        ↓
② 向本地所有运行 OSPF 的接口,以组播 224.0.0.5 发送 Hello 包
   (Hello 中携带自己的 RID,以及本地已知邻居的 RID)
        ↓
③ 把收集到的邻居关系记录在「邻居表」
        ↓
④ 邻居关系建立后 → 条件匹配
   ├─ 匹配失败 → 停留在邻居状态,只用 Hello 保活
   └─ 匹配成功 → 开始建立邻接关系
        ↓
⑤ 用「不带数据的 DBD」进行主从选举(比 RID,大者为 Master)
        ↓
⑥ 用「携带数据的 DBD」共享目录摘要信息
        ↓
⑦ 基于 DBD,用 LSR / LSU / LSACK 获取未知的 LSA
        ↓
⑧ 所有 LSA 存入本地「LSDB 数据库表」
        ↓
⑨ 基于 LSDB,用 SPF 算法计算 → 得到未知网段的路由 → 加载到「路由表」
        ↓
⑩ 收敛完成:周期发送 Hello 保活,每 30 分钟刷新一次 LSA

2. 三张表(OSPF 的核心数据结构)

表 内容 查看命令
邻居表 谁是我的邻居、处于什么状态 display ospf peer
LSDB(数据库表) 全网所有 LSA(拓扑) display ospf lsdb
路由表 SPF 算出来的最优路由 display ip routing-table / display ospf routing

三张表的关系:邻居表 →(交换 LSA)→ LSDB →(SPF 计算)→ 路由表。

3. 结构突变的四种情况

# 情况 OSPF 的反应
1 突然新增一个网段 产生新的 LSA,立即泛洪 → 全网重算 SPF
2 突然断开一个网段 产生更新的 LSA(或 MaxAge 撤销),立即泛洪
3 无法通信(Dead Time 到期) 40s 未收到 Hello → 判定邻居失效 → 删除邻居、重算
4 (隐含)接口状态变化 接口 UP/DOWN 引起 LSA 变化,同样触发泛洪

【补充】这四种都属于触发更新 :OSPF 不需要像 RIP 那样等周期,拓扑一变立即用 LSU 泛洪,这是它收敛快的关键。


八、DR 与 BDR(指定路由器与备份指定路由器)

1. 三种角色

角色 全称 行为
DR Designated Router,指定路由器 在一个广播域内,与其余所有设备建立邻接关系
BDR Backup Designated Router,备份指定路由器 在一个广播域内,也与其余设备建立邻接关系(随时接管 DR)
DROther 其余没有角色的设备 它们之间只建立邻居关系(互相停在 2-Way)

2. 为什么需要 DR/BDR(条件匹配的由来)

在一个广播域中,若所有设备均建立邻接关系,将出现大量的重复更新。

算一笔账:一个广播域里有 n 台路由器,全互联需要 n(n-1)/2 条邻接关系。

设备数 n 全互联邻接数 有 DR/BDR 后
3 3 3
5 10 7
10 45 17
20 190 37

解决办法 :只让 DR 和 BDR 与其他设备建立邻接 ,其余 DROther 之间全部维持邻居关系即可。

复制代码
      无 DR:全互联(n(n-1)/2 条)          有 DR/BDR:星型(2(n-2)+1 条)
​
        R1 ──── R2                          R1 ─┐
        │ ╲   ╱ │                              ├── DR
        │   ╳   │                           R2 ─┤
        │ ╱   ╲ │                           R3 ─┘   (BDR 同时与所有设备邻接)
        R3 ──── R4

好处有三:① 邻接数量从 O(n²) 降到 O(n);② LSA 泛洪只往 DR/BDR 发,减少重复;③ SPF 计算压力下降。

3. 选举规则(两步)

顺序 比较项 规则
① 接口 DR 优先级(priority) 越大越优 ;默认 1 ;范围 0~255
② 优先级相同 时比 Router ID RID 大的 当选 DR,次大的当选 BDR

关键细节

  • 优先级改为 0 的接口不参与 DR/BDR 选举(常用于让某台设备永远不当 DR)。

  • 选举只在广播网络和 NBMA 网络 进行;P2P、P2MP 网络不选举。

  • 选举发生在 Two-Way 之后、ExStart 之前 ;广播网络会等一个 Wait Timer(= Dead Time 40s) 再定论,给后到的设备留出参与机会。

4. 非抢占模式(重要考点)

DR 和 BDR 的选举是非抢占模式 ------一旦选举成功,不会因为后来加入的设备(哪怕优先级更高)而重新选举。

  • 后加入的设备只能当 DROther。

  • 想抢回 DR,只能让原 DR 失效(重启、接口 down),或手动 reset ospf process。

  • 非抢占模式的选举时间为死亡时间(40s)。

记忆:DR 是"终身制",除非它自己倒下,否则新人再强也得排队。

5. 组播地址的使用【补充】

发送者 目的地址 说明
DROther → DR/BDR 224.0.0.6(AllDRouters) 只有 DR/BDR 监听这个地址
DR → 所有设备 224.0.0.5(AllSPFRouters) 所有人监听
首次发现(Hello) 224.0.0.5 此时还不知道谁是 DR

讲义写"224.0.0.5 和 224.0.0.6(DR 和 BDR 监听)",准确说是:所有 OSPF 路由器都监听 224.0.0.5,只有 DR/BDR 额外监听 224.0.0.6。


九、开销(Cost)与选路

1. Cost 的计算公式

Cost = 参考带宽 / 接口带宽

  • 参考带宽默认 100 Mbps (即 100M)。

  • 计算结果是整数 ,不足 1 按 1 计。

举例(参考带宽 100M)

接口带宽 计算 实际 Cost
10 Mbps 100/10 10
100 Mbps 100/100 1
1000 Mbps(GE) 100/1000 = 0.1 1(不足 1 按 1)
10000 Mbps(10GE) 100/10000 = 0.01 1

2. 参考带宽必须改大(实战要点)【补充】

上面的表暴露了一个问题:GE 和 10GE 的 Cost 都是 1 ,OSPF 就分不出千兆和万兆谁更快了------高速链路"带宽优势"被抹平。

解决办法:把参考带宽改大,让高速链路的差异体现出来。

复制代码
[R1-ospf-1] bandwidth-reference 10000        // 参考带宽改为 10000 Mbps(10G)

改完后:GE = 10000/1000 = 10 ,10GE = 10000/10000 = 1,差异就出来了。

注意 :参考带宽建议全网统一 (同一 OSPF 域内保持一致),否则各设备算出的 Cost 不可比,会算出奇怪的路径。 【补充】环回口(Loopback)在 OSPF 中 Cost 默认为 0 ,且以 /32 主机路由发布------这也是它常被用作 RID 来源和测试地址的原因。

3. OSPF 的路由类型【补充】

路由标记 类型 产生者 含义
O 区域内路由 区域内 通过 Type 1/2 LSA 算出,最可信
O IA 区域间路由(Inter-Area) ABR 通过 Type 3 LSA 学到
O ASE1 / ASE2 外部路由 ASBR 通过 Type 5(或 7)LSA 学到

ASE1 与 ASE2 的区别(常考)

类型 Cost 计算 默认
ASE1 外部 Cost + 内部到达 ASBR 的 Cost 否
ASE2 只算外部 Cost,不算内部开销 ✔ 默认 Type 2

选路优先级(同目的网段) :区域内 > 区域间 > 外部(ASE1 > ASE2)。

【补充】再叠加"优先级(Preference)":OSPF 内部路由 Pre = 10,OSPF 外部(ASE)路由 Pre = 150。所以 OSPF 外部路由打不过静态路由(60),但能打过 RIP(100)------这类"Pre 对比"是经典考点。


十、LSA 与 LSDB【补充】(讲义只提到名词,这里补齐)

OSPF 用 LSA(Link State Advertisement,链路状态通告) 描述拓扑,所有 LSA 汇总成 LSDB。常见的六类:

类型 名称 产生者 传播范围 描述内容
Type 1 Router LSA(路由器 LSA) 每台路由器 本区域 自己的接口、邻居、链路开销
Type 2 Network LSA(网络 LSA) DR 本区域 广播网段的子网信息 + 该网段上的路由器列表
Type 3 Summary LSA(网络汇总) ABR 其他区域 把区域内网段"翻译"成路由通告出去
Type 4 ASBR Summary LSA ABR 除 ASBR 所在区域外 告诉其他区域"ASBR 在哪里"
Type 5 AS External LSA(外部 LSA) ASBR 全网(除特殊区域) 引入的外部路由(静态/直连/其他协议)
Type 7 NSSA External LSA ASBR(在 NSSA 内) 仅本 NSSA NSSA 区域内的外部路由,到 ABR 转成 Type 5

LSDB 中一条 LSA 的唯一标识(三元组)

复制代码
LS Type(类型) + Link State ID(链路状态 ID) + Advertising Router(通告者 RID)

这三个字段共同唯一确定一条 LSA。所以 display ospf lsdb router 2.2.2.2 就是在查"Type 1 + 通告者是 2.2.2.2"那条 LSA。

区域类型(了解即可,进阶内容)

区域类型 允许的 LSA 特点
普通区域 1/2/3/4/5 默认
Stub 1/2/3 不接收 Type 4/5,ABR 下发一条默认路由代替外部路由
Totally Stub 1/2 + 一条默认 连 Type 3 都不接收
NSSA 1/2/3/7 不允许 Type 5,但允许 Type 7(自己引入外部路由)
Totally NSSA 1/2/7 + 默认 NSSA + 过滤 Type 3

十一、OSPF 基础配置

1. 三个步骤

复制代码
[R1] ospf 1 router-id 1.1.1.1              // ① 启动 OSPF 进程并指定 RID
[R1-ospf-1] area 0                          // ② 创建(进入)区域 0
[R1-ospf-1-area-0.0.0.0] network 1.1.1.1 0.0.0.0     // ③ 宣告
[R1-ospf-1-area-0.0.0.0] network 12.0.0.0 0.0.0.255

视图层级要记清:[R1] → [R1-ospf-1](进程视图)→ [R1-ospf-1-area-0.0.0.0](区域视图)。network 是在区域视图下敲的,这正是"接口属于区域"的体现。

2. 宣告的两大意义(与 RIP 完全一致)

意义 说明
① 激活接口 只有被激活的接口才可以收发 OSPF 数据包
② 发布路由 只有被激活接口所对应的直连路由信息才可以被发布

所以"为什么邻居起不来"的第一排查项就是:接口有没有被 network 覆盖到。

3. 反掩码(Wildcard Mask)------ 必须搞懂的坑

network 12.0.0.0 0.0.0.255 里最后那段 不是子网掩码,是反掩码。

规则 说明
构成 由连续的 0 和连续的 1 组成
0 对应不可变位(必须精确匹配)
1 对应可变位(任意值都行)
顺序 0 在前,1 在后 ,且 0 和 1 不能穿插使用

对照表

子网掩码 反掩码 作用范围
255.255.255.255(/32) 0.0.0.0 精确匹配一个地址
255.255.255.0(/24) 0.0.0.255 匹配一个 /24 网段
255.255.254.0(/23) 0.0.1.255 匹配一个 /23 网段
255.255.0.0(/16) 0.0.255.255 匹配一个 /16 网段
0.0.0.0(/0) 255.255.255.255 匹配全部

换算技巧:反掩码 = 255.255.255.255 − 子网掩码 (逐字节相减)。 常见错误:network 12.0.0.0 255.255.255.0(写成子网掩码)→ 反掩码不连续合法?实际上 255.255.255.0 也是连续的 1 后跟 0,语法能通过但语义完全相反 ,会把 12.0.0.x 里的可变位当成前 24 位 ,等于宣告了 0.0.0.0/0 之外的一大片错误范围,务必避免。

4. 完整配置示例【补充】

拓扑 :AR1(1.1.1.0/24、12.0.0.0/24)--- AR2(12.0.0.0/24、2.2.2.0/24),Area 0

复制代码
# AR1
[R1] interface GigabitEthernet0/0/0
[R1-GigabitEthernet0/0/0] ip address 12.0.0.1 24
[R1-GigabitEthernet0/0/0] quit
[R1] interface GigabitEthernet0/0/1
[R1-GigabitEthernet0/0/1] ip address 1.1.1.1 24
[R1-GigabitEthernet0/0/1] quit
[R1] ospf 1 router-id 1.1.1.1
[R1-ospf-1] area 0
[R1-ospf-1-area-0.0.0.0] network 1.1.1.1 0.0.0.0
[R1-ospf-1-area-0.0.0.0] network 12.0.0.0 0.0.0.255

# AR2
[R2] interface GigabitEthernet0/0/0
[R2-GigabitEthernet0/0/0] ip address 12.0.0.2 24
[R2-GigabitEthernet0/0/0] quit
[R2] interface GigabitEthernet0/0/1
[R2-GigabitEthernet0/0/1] ip address 2.2.2.1 24
[R2-GigabitEthernet0/0/1] quit
[R2] ospf 1 router-id 2.2.2.2
[R2-ospf-1] area 0
[R2-ospf-1-area-0.0.0.0] network 2.2.2.1 0.0.0.0
[R2-ospf-1-area-0.0.0.0] network 12.0.0.0 0.0.0.255

5. 验证命令

命令 作用
display ospf peer 查看邻居表(状态、DR/BDR 归属、Dead 倒计时)
display ospf peer brief 查看邻居关系简表(一眼看全所有邻居状态)
display ospf lsdb 查看数据库表(所有 LSA)
display ospf lsdb router 2.2.2.2 查看一条具体 LSA(这里是 2.2.2.2 产生的 Type 1)
display ospf interface 查看 OSPF 接口参数(Cost、网络类型、DR、Hello/Dead)【补充】
display ospf routing 查看 OSPF 算出的路由表【补充】
display ospf brief 查看进程概览(RID、区域、SPF 次数)【补充】
display ospf error 查看 OSPF 错误统计,排错神器【补充】

正常输出示例

复制代码
[R1] display ospf peer brief

         OSPF Process 1 with Router ID 1.1.1.1
                  Peer Statistic Information
 ----------------------------------------------------------------------------
 Area Id          Interface                        Neighbor id      State
 0.0.0.0          GigabitEthernet0/0/0             2.2.2.2          Full
 ----------------------------------------------------------------------------

看到 Full 才叫"邻接成功"。如果卡在 2-Way 且对端是 DROther,属正常;如果卡在 ExStart ,优先查 MTU。


十二、OSPF 的扩展配置(五项)

1. 手工认证

复制代码
[R1-GigabitEthernet0/0/0] ospf authentication-mode md5 1 plain 123456

参数拆解

参数 含义
md5 认证算法(也可 simple 明文、hmac-sha256 等)
1 Key ID(密钥号),双方必须一致
plain 本地存储时口令不加密(配置里能看到明文)
cipher 本地存储时口令加密(配置里显示乱码)
123456 认证口令

要点

  • 认证信息携带在 Hello 报文中 ,所以认证不一致 → 邻居根本建不起来(连 Init 都到不了)。

  • 两端必须:算法一致 + Key ID 一致 + 口令一致。

  • plain / cipher 只影响本地存储方式,不影响互通。

2. 手工汇总(区域汇总)

复制代码
[R2-ospf-1-area-0.0.0.0] abr-summary 192.168.0.0 255.255.254.0
  • 命令在 区域视图 下配置,只能在 ABR 上做(因为是"区域间"汇总)。

  • 作用:把多条明细的 Type 3 LSA 合并成一条,减小其他区域的 LSDB 和路由表。

【补充】与 RIP 汇总的关键差别:OSPF 汇总不需要配 NULL0 空接口路由 。因为 OSPF 汇总后,ABR 上仍保留明细路由(明细在 LSDB 里),不会出现"汇总了却找不到出口"的情况;而 RIP 汇总会丢掉明细,才需要 NULL0 兜底。 【补充】还有 asbr-summary(ASBR 上汇总外部路由,影响 Type 5 LSA)。

3. 沉默接口(Silent-Interface)

复制代码
[R2-ospf-1] silent-interface GigabitEthernet0/0/0
  • 只接收、不发送 OSPF 报文(不建立邻居、不发 Hello)。

  • 适用:连接用户终端的网段 (下联 PC/服务器),不需要跑 OSPF,但该网段仍需被发布。

  • 命令在进程视图下配。

与 RIP 的沉默接口完全同构:不发报文,但照常发布该网段的直连路由。

4. 加速收敛(改计时器)

复制代码
[R2-GigabitEthernet0/0/0] ospf timer hello 10      // 修改 hello 时间
[R2-GigabitEthernet0/0/0] ospf timer dead 40       // 修改死亡时间

两条铁律(考点)

# 规则
① 邻居双方的 Hello 时间和 Dead 时间必须相同 ,不同则无法建立邻居关系
② 改 Hello 时间,Dead 时间会自动按倍数关系(4 倍)修改;改 Dead 时间,Hello 时间不会自动改

所以最稳的做法:只改 hello ,让 dead 自动跟随;或者两边同时把两个值都改对。 【补充】计时器在接口视图下配置(因为 Hello 是按接口发的),不是进程视图。

5. 缺省路由下发

复制代码
[R3-ospf-1] default-route-advertise              // 把设备配成"缺省源"
[R3-ospf-1] default-route-advertise always       // 强制下发
命令 行为
default-route-advertise 需要保证边界设备自己已有缺省路由 ,才会自动向下发;没有则不下发
default-route-advertise always 即使边界设备自己没有缺省路由,也强制给内网下发

典型场景:企业出口 R3 上联 ISP,先配 ip route-static 0.0.0.0 0 200.1.1.1,再在 OSPF 里 default-route-advertise,内网所有路由器自动学到默认出口。 【补充】对比 RIP 的同名功能:RIP 的 default-route originate 没有 always 这种强制模式,而 OSPF 有------这是两者一个细微但常考的差异。


十三、排错:邻居起不来怎么查

排查顺序:先看状态停在哪,再对症下药。

卡在哪个状态 最可能原因 排查手段
一直 Down ① 接口未宣告/未激活 ② 物理或二层不通 ③ 组播被拦截(如 ACL) display ospf interface、ping 直连、查 ACL
卡在 Init 单向收到 Hello(对方没收到我的)→ 通常是我发出的 Hello 被丢,或 RID 重复 双向抓包、检查 RID 是否冲突
卡在 2-Way ① 条件匹配失败(区域 ID / 认证 / 掩码 / Stub 标志不一致)② 两台 DROther(正常现象) display ospf peer、display ospf error
卡在 ExStart MTU 不一致(最常见)、RID 冲突、主从选举失败 两端 display interface 看 MTU;display ospf error
卡在 Exchange DBD 报文被丢、序列号错乱、链路质量差 抓包看 DBD、查 display ospf error
卡在 Loading LSR 请求的 LSA 一直没送到(路由/ACL 问题) display ospf lsdb 对比两端是否一致
到了 Full 但没有路由 ① 对端没宣告该网段 ② 被汇总/过滤 ③ 外部路由未引入 两端 display ospf lsdb、display ip routing-table

补充:三个高频"坑"

  1. RID 冲突:两台设备 RID 相同 → 邻居反复抖动、状态不稳。必须保证 RID 全网唯一。

  2. MTU 不一致 :一端 1500、一端 1400,会卡在 ExStart ,且日志几乎不报错,极难发现。

  3. 静默接口误配 :把该跑 OSPF 的互联口配成 silent-interface,邻居永远起不来。


十四、本天小结与考点速记

1. 一张图串起全过程

复制代码
OSPF = 链路状态 + 带宽度量 + 区域划分

   启动 → 发 Hello(224.0.0.5)→ 邻居表
        → 条件匹配(2-Way)
              ├─ 失败 → 停在邻居,只发 Hello
              └─ 成功 → ExStart(选主从,比 RID 大者胜)
                       → Exchange(DBD 换摘要)
                       → Loading(LSR/LSU/LSACK 补全 LSA)
                       → Full(LSDB 同步 = 邻接)
                       → SPF 算树 → 路由表
                       → 稳定后:Hello 保活 + 30min LSA 刷新

2. 必背数字

数字 含义
89 IP 协议号
224.0.0.5 / 224.0.0.6 AllSPFRouters / AllDRouters
10s / 40s Hello / Dead(4 倍关系)
10 华为 OSPF 默认优先级(Preference)
100 Mbps 默认参考带宽
1800s(30min) LSA 刷新周期
3600s LSA MaxAge
0 骨干区域 ID;也是"不参与 DR 选举"的优先级
1 DR 优先级默认值(范围 0~255)
7 状态机个数(Down→Init→2-Way→ExStart→Exchange→Loading→Full)
5 报文种类(Hello/DBD/LSR/LSU/LSACK)
2 稳定态个数(2-Way 邻居、Full 邻接)

3. 最容易考的五个对比

对比 结论
邻居 vs 邻接 2-Way 是邻居(只 Hello);Full 是邻接(LSDB 同步)
DR 选举 先比 priority(大者胜,默认 1,0 不参选),再比 RID(大者胜),非抢占
反掩码 0 不可变、1 可变,需连续;= 255.255.255.255 − 子网掩码
ASE1 vs ASE2 ASE1 含内部开销,ASE2 只算外部开销且默认
RIP 汇总 vs OSPF 汇总 RIP 需配 NULL0 防空口,OSPF 不需要

4. 与 RIP 的一句话总结

RIP 靠"邻居告诉我",OSPF 靠"自己算地图";RIP 数跳数,OSPF 量带宽;RIP 一个区域管到底,OSPF 分而治之。

相关推荐
2401_868534782 小时前
论新技术在网络规划中的应用
网络
QH139292318802 小时前
R&S ZNA43 ZNB3044 10MHz~43.5GHz网络分析仪
网络·5g
Brilliantwxx2 小时前
【STM32】 内部 Flash 的 HAL 库函数详解与自定义封装实战
linux·服务器·网络
西索斯coding3 小时前
qwen3.8-max-0902 和 minimax-m3 改真实仓库差多少?2026 年 50 个缺陷复现实测框架
java·服务器·网络·ai
外收内放3 小时前
ENSP学习记录(2)
网络·智能路由器
m0_738120723 小时前
JWT 安全从入门到实战:六种典型攻击场景解析
前端·网络·python·安全·网络安全
zdd567893 小时前
tcpdump测试
网络
xbzb3 小时前
OpenStack 网络管理(实操):建网络、连路由、浮动 IP 与安全组
网络·安全·openstack·ip·安全组·浮动
叼烟扛炮3 小时前
Linux 学习笔记(四十七):TCP 状态机与 tcpdump 抓包排雷实战
linux·网络·笔记·学习·tcp/ip·tcpdump