一、OSPF协议概述
1. 什么是OSPF?
OSPF(Open Shortest Path First,开放式最短路径优先协议)是一种基于链路状态的内部网关路由协议(IGP),主要用于自治系统(AS)内部的路由信息交换。
OSPF通过路由器之间交换链路状态信息,建立链路状态数据库(LSDB),然后利用SPF(Shortest Path First,最短路径优先)算法计算到达目标网络的最优路径,最终生成路由表。
OSPF属于动态路由协议,相比静态路由,它能够自动感知网络拓扑变化,并根据网络状态重新计算路由。
2. OSPF协议的特点
无环路: 通过SPF算法计算最短路径,避免路由环路。
收敛速度快: 网络拓扑发生变化时,可以快速触发路由更新。
支持VLSM: 支持可变长子网掩码,能够灵活划分IP地址。
支持区域划分: 可以将大型网络划分为多个区域,降低路由器的计算和维护压力。
支持认证: 可以对OSPF报文进行认证,提高网络安全性。
支持等价路由: 可以实现等价路径负载分担。
支持触发更新: 网络拓扑发生变化时,发送链路状态更新,而不是周期性发送完整路由表。
3. OSPF与RIP的区别
| 协议类型 | 链路状态型 | 距离矢量型 |
| 度量值 | Cost | Hop Count |
| 最大跳数 | 无固定跳数限制 | 15跳 |
| 收敛速度 | 较快 | 相对较慢 |
| 更新方式 | 触发式LSA更新及周期性刷新 | 周期性路由更新 |
| 网络规模 | 适合中大型网络 | 适合小型网络 |
| 算法 | SPF算法 | Bellman-Ford思想 |
二、OSPF核心工作原理
1. OSPF的工作过程
OSPF通过交换链路状态信息,让同一区域内的路由器掌握一致的网络拓扑信息。
其基本工作过程如下:
路由器启动OSPF进程。
路由器通过Hello报文发现邻居。
满足邻居建立条件后,建立邻接关系。
路由器之间交换链路状态信息LSA。
建立链路状态数据库LSDB。
使用SPF算法计算最优路径。
将计算得到的路由信息加入IP路由表。
简单理解:
发现邻居 → 建立邻接 → 同步LSDB → SPF计算 → 生成路由表。
2. Router ID
Router ID是OSPF路由器的唯一标识,采用IPv4地址的格式表示,例如:
1.1.1.1
Router ID主要用于标识OSPF设备身份,在邻居建立、LSA生成以及DR/BDR选举等过程中发挥作用。
Router ID的配置方式:
[R1] ospf 1 router-id 1.1.1.1
其中:
-
ospf 1:创建OSPF进程1。
-
router-id 1.1.1.1:指定OSPF Router ID。
建议在实际网络中手动规划Router ID,保证每台路由器的Router ID唯一。
3. OSPF的五种报文
OSPF共有五种报文类型:
| Hello | Hello报文 | 发现和维护邻居关系 |
| DBD | 数据库描述报文 | 描述LSDB中的LSA摘要信息 |
| LSR | 链路状态请求报文 | 请求缺少的LSA信息 |
| LSU | 链路状态更新报文 | 发送LSA信息 |
| LSAck | 链路状态确认报文 | 确认收到的LSA |
其中,Hello报文是建立OSPF邻居关系的重要报文。
4. OSPF邻居建立过程
OSPF邻居建立主要通过Hello报文完成。
其状态变化过程如下:
Down → Init → 2-Way → ExStart → Exchange → Loading → Full
各状态说明:
-
Down:尚未收到邻居的Hello报文。
-
Init:已经收到对方的Hello报文,但对方的Hello报文中还没有自己的Router ID。
-
2-Way:双方已经确认彼此存在,建立双向通信关系。
-
ExStart:开始协商主从关系以及DBD报文序列号。
-
Exchange:双方交换数据库描述信息。
-
Loading:请求并同步缺少的LSA信息。
-
Full:LSDB同步完成,邻接关系建立完成。
需要注意:
并不是所有邻居都必须达到Full状态。在广播型网络中,部分非DR/BDR路由器之间可能停留在2-Way状态,这是正常现象。
5. DR与BDR选举机制
在广播型网络中,如果所有路由器之间都建立完全邻接关系,会产生大量的LSA交互,增加网络资源消耗。
因此,OSPF引入了DR(Designated Router,指定路由器)和BDR(Backup Designated Router,备用指定路由器)。
作用:
-
DR:负责协调该广播网络中的LSA同步。
-
BDR:作为DR的备份,在DR失效时接替DR工作。
-
DROther:既不是DR也不是BDR的其他路由器。
选举规则:
首先比较接口OSPF优先级,优先级越大越优先。
优先级相同时,比较Router ID,数值越大越优先。
接口优先级为0的路由器不参与DR/BDR选举。
DR和BDR选举具有非抢占性,后加入的高优先级路由器通常不会直接替换已经选出的DR。
注意:DR/BDR选举主要发生在广播型和NBMA网络中,点到点网络不需要选举DR/BDR。
6. OSPF的Cost计算
OSPF使用Cost作为路由开销,Cost越小,路径越优。
华为设备中,OSPF接口Cost默认通常根据接口带宽计算:
Cost = 参考带宽 / 接口带宽
计算结果通常取整数,默认参考带宽为100Mbps。
例如:
-
100Mbps接口:Cost通常为1。
-
10Mbps接口:Cost通常为10。
-
1Mbps接口:Cost通常为100。
可以通过修改参考带宽或者手动配置接口Cost调整路径选择。
华为设备手动配置接口Cost:
[R1-GigabitEthernet0/0/0] ospf cost 10
三、OSPF区域划分
1. 为什么需要区域划分?
当网络规模不断扩大时,如果所有路由器都处于同一个区域,LSDB会变得非常庞大,增加设备的CPU、内存和路由计算压力。
因此,OSPF支持将一个自治系统划分为多个区域。
通过区域划分,可以减少LSA传播范围,降低路由计算压力,提高网络扩展能力。
2. 骨干区域Area 0
OSPF中存在一个特殊区域:骨干区域Area 0。
特点:
-
Area 0是OSPF网络的核心区域。
-
其他非骨干区域原则上需要通过Area 0进行互联。
-
区域间路由信息主要通过ABR进行传递。
3. 常见OSPF路由器类型
| Internal Router | 区域内路由器 | 所有接口属于同一个区域 |
| ABR | 区域边界路由器 | 连接多个OSPF区域 |
| ASBR | 自治系统边界路由器 | 引入OSPF域外的路由 |
| Backbone Router | 骨干路由器 | 至少有一个接口属于Area 0 |
四、华为设备OSPF基本配置
1. 创建OSPF进程
[R1] ospf 1
2. 配置Router ID
[R1] ospf 1 router-id 1.1.1.1
3. 进入OSPF区域
[R1-ospf-1] area 0
4. 宣告网络
[R1-ospf-1-area-0.0.0.0] network 192.168.1.0 0.0.0.255
其中:
-
192.168.1.0:需要宣告的网络地址。
-
0.0.0.255:反掩码,也叫通配符掩码。
OSPF通过network命令匹配本地接口IP地址,将匹配的接口激活到指定区域,并通告相应链路信息。
例如:
network 10.1.1.0 0.0.0.255
表示匹配10.1.1.0/24网段。
注意:network命令中的第二个参数是反掩码,不是普通子网掩码。
五、eNSP实验:OSPF单区域配置
1. 实验目的
通过eNSP模拟器搭建路由网络,完成OSPF单区域配置,实现不同网段之间的互联互通。
实验目标:
掌握OSPF进程创建方法。
掌握Router ID配置方法。
掌握OSPF区域划分方法。
掌握network命令的使用。
学会查看OSPF邻居关系。
学会查看OSPF路由表。
验证不同网段之间的通信。
2. 实验拓扑
根据实际实验拓扑,将路由器连接组成OSPF网络。
实验中需要保证:
-
相邻路由器之间接口IP地址处于同一网段。
-
各路由器配置唯一的Router ID。
-
参与OSPF的接口被正确宣告到对应区域。
-
相邻接口能够正常通信。
3. IP地址规划
根据实际拓扑规划设备接口IP地址。

以下仅为配置示例,实际实验需要替换为拓扑中的真实接口和IP地址。
| R1 | GE0/0/0 | 192.168.12.1 | 255.255.255.0 |
| R2 | GE0/0/0 | 192.168.12.2 | 255.255.255.0 |
| R2 | GE0/0/1 | 192.168.23.2 | 255.255.255.0 |
| R3 | GE0/0/0 | 192.168.23.3 | 255.255.255.0 |
4. 配置R1
[R1] sysname R1
[R1] interface GigabitEthernet 0/0/0
[R1-GigabitEthernet0/0/0] ip address 192.168.12.1 24
[R1-GigabitEthernet0/0/0] quit
[R1] ospf 1 router-id 1.1.1.1
[R1-ospf-1] area 0
[R1-ospf-1-area-0.0.0.0] network 192.168.12.0 0.0.0.255
5. 配置R2
[R2] sysname R2
[R2] interface GigabitEthernet 0/0/0
[R2-GigabitEthernet0/0/0] ip address 192.168.12.2 24
[R2-GigabitEthernet0/0/0] quit
[R2] interface GigabitEthernet 0/0/1
[R2-GigabitEthernet0/0/1] ip address 192.168.23.2 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 192.168.12.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0] network 192.168.23.0 0.0.0.255
6. 配置R3
[R3] sysname R3
[R3] interface GigabitEthernet 0/0/0
[R3-GigabitEthernet0/0/0] ip address 192.168.23.3 24
[R3-GigabitEthernet0/0/0] quit
[R3] ospf 1 router-id 3.3.3.3
[R3-ospf-1] area 0
[R3-ospf-1-area-0.0.0.0] network 192.168.23.0 0.0.0.255
7. OSPF实验验证
(1)查看OSPF邻居关系
<R1> display ospf peer
通过该命令查看OSPF邻居信息,包括:
-
邻居Router ID。
-
邻居状态。
-
邻居优先级。
-
邻居IP地址。
-
邻居接口。
如果邻接关系正常建立,可以看到Full等状态。
(2)查看OSPF接口信息
<R1> display ospf interface
用于查看OSPF接口运行情况,包括接口所属区域、接口网络类型、接口Cost等信息。
(3)查看OSPF路由信息
<R1> display ospf routing
用于查看OSPF计算生成的路由信息。
(4)查看IP路由表
<R1> display ip routing-table
在路由表中,可以看到通过OSPF学习到的路由。
华为设备中,OSPF路由通常以O标识,具体以设备显示结果为准。
(5)测试网络连通性
<R1> ping 192.168.23.3
通过Ping命令验证不同路由器之间是否能够正常通信。
如果能够正常收到响应,说明当前测试路径的网络连通性正常。
六、OSPF常见故障排查
在实际网络部署中,OSPF邻居无法建立通常与接口配置、区域配置、Hello参数或网络类型有关。
1. 邻居无法建立
常见原因:
-
两端接口IP地址配置错误。
-
接口没有正常启动。
-
两端不在同一个网段。
-
区域ID不一致。
-
Hello时间间隔或Dead时间间隔不一致。
-
网络类型不匹配。
-
认证配置不一致。
排查命令:
display ospf peer
display ospf interface
display ip interface brief
2. OSPF邻居停留在2-Way状态
可能原因:
-
广播网络中,两台DROther设备之间没有建立完全邻接关系。
-
网络类型或DR/BDR选举存在异常。
-
部分场景下邻接关系尚未正常完成。
注意:在广播型网络中,DROther之间保持2-Way状态通常是正常现象,不一定代表故障。
3. 邻居已经建立,但路由没有学习到
可能原因:
-
network命令没有正确匹配接口。
-
目标网段没有被正确宣告。
-
区域配置错误。
-
路由过滤策略影响了路由传播。
-
路由计算或LSA同步存在异常。
排查命令:
display ospf routing
display ospf lsdb
display ip routing-table
4. Ping不通
排查思路:
检查接口状态是否正常。
检查接口IP地址和掩码。
检查OSPF邻居是否建立。
检查目标网段是否已经学习到。
检查返回路径是否存在。
检查ACL等安全策略是否影响通信。



