一、OSPF 协议概述
OSPF(Open Shortest Path First,开放式最短路径优先协议)是一种链路状态路由协议,隶属于内部网关协议(IGP,Interior Gateway Protocol)范畴,核心功能是实现自治系统(AS,Autonomous System)内部路由器之间的路由信息交换,为数据传输提供最优路径指引。
分层网络架构:通过 “区域(Area)” 和 “特殊角色路由器” 划分网络层级,有效解决单区域网络中路由信息泛滥、设备资源占用过高的瓶颈问题,提升网络扩展性。
最优路径计算:基于 “最短路径优先”(SPF,Shortest Path First)算法(又称 Dijkstra 算法)计算路由,能精准选择跳数、带宽等综合成本最低的路径。
优势特性:具备收敛速度快(网络拓扑变化后快速更新路由)、路由选择精确(考虑多维度链路成本)、支持大型网络(分层架构适配复杂网络环境)等优点,是企业级核心网络、运营商骨干网中应用最广泛的路由协议之一。
二、OSPF 工作过程
OSPF 的路由计算流程遵循 “从建立邻居到生成路由表” 的逻辑,具体分为 4 个关键步骤
| 步骤 | 核心操作 | 说明 |
|---|---|---|
| 建立邻接关系 | 路由器之间通过 Hello 报文发现邻居,完成邻居身份验证、参数协商(如区域 ID、Hello 间隔等),最终建立稳定的邻接关系(Adjacency) | 邻接关系是 OSPF 信息交换的基础,仅邻接路由器之间会同步链路状态信息 |
| 构建链路状态数据库(LSDB) | 邻接路由器通过链路状态通告(LSA,Link State Advertisement)交换各自的链路状态信息(如接口 IP、链路成本、邻居信息等),并将这些信息存储到本地的 LSDB 中 | 整个区域内所有路由器的 LSDB 内容完全一致,确保路由计算的基础数据统一 |
| 生成最短路径树(SPT) | 路由器基于本地 LSDB,运行 Dijkstra 算法,以自身为根节点,计算到网络中所有其他目标网络的最短路径,形成最短路径树 | 最短路径树直观反映了 “自身到各目标网络” 的最优路径关系 |
| 生成路由表 | 从最短路径树中提取关键信息(目标网络地址、下一跳路由器、出接口、路径成本等),整理后生成本地的路由表,用于指导数据转发 | 路由表是路由器实际转发数据的 “导航表”,后续会随网络拓扑变化动态更新 |
三、OSPF 关键配置要素
1.区域 ID(Area ID)
作用:唯一标识 OSPF 区域,用于区分不同区域的路由器,确保区域内路由信息正常交互、区域间路由信息通过骨干区域传递。
表示形式:
十进制数字:如 Area 0、Area 1、Area 100 等,是最常用的表示方式。
IP 地址格式:如 Area 0.0.0.0(等同于 Area 0)、Area 1.0.0.1,本质与十进制数字一一对应,仅格式不同。
特殊说明:区域内的路由器需配置相同的区域 ID,才能加入该区域并参与路由信息交换。
2.骨干区域(Area 0)
核心作用:作为 OSPF 分层网络的 “中枢”,负责转发不同非骨干区域之间的路由信息,确保跨区域的通信正常实现。
强制规则:所有非骨干区域(如 Area 1、Area 2)必须直接与骨干区域 Area 0 相连;若某非骨干区域无法直接连接 Area 0,需通过 “虚链路(Virtual Link)” 间接关联,否则无法实现跨区域路由。
3.OSPF 支持的网络类型
OSPF 会根据接口连接的网络拓扑,自动适配不同的网络类型,不同网络类型的邻居发现方式、Hello 报文间隔、DR/BDR 选举规则不同,具体分类如下:
| 网络类型 | 特点 | 典型应用场景 |
|---|---|---|
| 点到点网络(Point-to-Point) | 仅连接两个路由器,无 DR/BDR 选举;Hello 报文间隔 10 秒 | PPP 链路、HDLC 链路(如路由器之间的专线连接) |
| 广播多路访问网络(Broadcast Multi-Access,BMA) | 支持多台路由器通过共享介质通信(如以太网),需选举 DR(指定路由器)和 BDR(备份指定路由器);Hello 报文间隔 10 秒 | 以太网(交换机连接多台路由器)、令牌环网 |
| 非广播多路访问网络(Non-Broadcast Multi-Access,NBMA) | 支持多台路由器通信,但无广播能力,需手动指定邻居;Hello 报文间隔 30 秒 | 帧中继(Frame Relay)、ATM 网络 |
| 点到多点网络(Point-to-Multipoint) | 将一个接口逻辑划分为多个 “点到点” 链路,无需 DR/BDR 选举;Hello 报文间隔 30 秒 | 由 NBMA 网络手动配置转换而来(如帧中继网络模拟点到点连接) |
4.OSPF的三种通信量(多区域)
-域内通信量(Intra-Area Traffic)
这是同一 OSPF 区域内部的路由器之间交换的流量,也是 OSPF 网络中最基础、占比最高的流量类型。
- 承载内容
- 邻居发现与建立:Hello 报文(用于维持邻居 / 邻接关系)。
- 链路状态同步:LSU(链路状态更新)、LSAck(链路状态确认)、LSR(链路状态请求)报文,传输的是Type 1(路由器 LSA) 和 Type 2(网络 LSA)。
- 特点
- 仅在区域内部传播,不会跨越 ABR(区域边界路由器)。
- 基于链路状态数据库(LSDB)的完全同步,区域内所有路由器的 LSDB 内容一致,能保证路由计算的准确性。
- 触发更新机制:仅当链路状态变化时才发送 LSU,平时仅靠 Hello 报文保活,流量开销低。
-域间通信量(Inter-Area Traffic)
这是不同 OSPF 区域之间,由 ABR 负责转发的流量,用于传递跨区域的路由信息。
- 承载内容
- 由 ABR 生成Type 3(网络汇总 LSA),将一个区域的路由信息汇总后,发布到其他区域。
- 特殊场景下还会包含Type 4(ASBR 汇总 LSA),用于告知其他区域 ASBR(自治系统边界路由器)的位置。
- 特点
- 只能通过ABR 转发,非骨干区域的路由信息必须经过骨干区域(Area 0)传递。
- 支持路由汇总和过滤,ABR 可以对 Type 3 LSA 进行聚合,减少其他区域的 LSDB 大小和路由表条目。
- 遵循 “非骨干区域必须与骨干区域直接相连” 的规则,否则需要配置虚链路来承载这类流量。
-外部通信量
这是OSPF 自治系统(AS)与外部网络之间的流量,由 ASBR 负责引入和发布外部路由。
- 承载内容
- ASBR 将外部路由(如静态路由、RIP 路由)转换为Type 5(自治系统外部 LSA),发布到整个 OSPF 域。
- 对于 NSSA(非纯末梢区域),则使用Type 7(NSSA 外部 LSA),再由 ABR 转换为 Type 5 LSA 传递到其他区域。
- 特点
- 可以跨越所有 OSPF 区域传播(除非被过滤)。
- 外部路由分为两类:E1 路由(计算总开销时包含内部 OSPF 开销 + 外部开销)、E2 路由(仅使用外部开销,默认类型)。
- 优先级低于区域内和区域间路由,OSPF 在选路时会优先选择 Intra-Area > Inter-Area > External 路由。
PS:链路状态通告LSA(1-7):同步OSPF链路状态数据库
四、OSPF 基本配置命令与验证
1.基础配置命令
| 配置目的 | 命令格式 | 说明 |
|---|---|---|
| 启动 OSPF 路由进程 | Router ospf process-id | process-id为 OSPF 进程号(1-65535),仅在本地路由器生效,不同路由器可相同 |
| 指定 OSPF 运行接口及区域 | Network address inverse-mask area area-id | address:接口的 IP 地址或网段;inverse-mask:反掩码(如 255.255.255.0 的反掩码为 0.0.0.255);area-id:接口所属的 OSPF 区域 ID |
2.状态验证命令
| 验证目的 | 命令格式 | 说明 |
|---|---|---|
| 查看路由器全局路由表 | Show ip route | 可查看所有路由协议(含 OSPF)生成的路由,OSPF 路由标记为 “O” |
| 查看 OSPF 全局配置信息 | Show ip ospf | 显示 OSPF 进程号、区域信息、路由器 ID、LSDB 摘要等全局参数 |
| 查看 OSPF 接口详细信息 | Show ip ospf interface type number | type number为接口类型 + 编号(如 Ethernet 0/0),显示接口的 OSPF 网络类型、Hello 间隔、DR/BDR 信息等 |
| 查看 OSPF 邻居关系表 | Show ip ospf neighbor | 显示邻居路由器的 IP、状态(如 FULL,代表邻接关系已建立)、接口等信息 |
| 查看OSPF数据库 | Show ip ospf database | 查看LSDB内的所有LSA数据信息 |
五、补充说明
路由器 ID(Router ID):OSPF 区域内唯一标识路由器的逻辑地址,默认选择路由器所有 Loopback 接口中 IP 最大的地址;若无 Loopback 接口,则选择物理接口中 IP 最大的地址。也可通过Router-id x.x.x.x手动配置,建议手动指定以避免地址变化导致的问题。
DR/BDR 选举:仅在广播多路访问(BMA)和非广播多路访问(NBMA)网络中存在,DR 负责统一收发 LSA,BDR 在 DR 故障时自动接替 DR 角色,减少邻接关系重建次数,提升网络稳定性。选举基于接口的优先级(0-255,0 表示不参与选举),优先级相同则比较路由器 ID,数值越大越优先。
链路成本(Cost):OSPF 衡量链路优劣的指标,计算公式为Cost = 100M / 链路带宽(100M 为参考带宽,可通过auto-cost reference-bandwidth修改),带宽越高,Cost 值越小,路径越优先。
六、实验
单区域

1.配置PC机及各个路由器接口ip
①PC0

②PC1

③R0
1Router>enable 进入特权模式 2Router#configure terminal 进入全局模式 3Router(config)#interface f0/0 切换接口 4Router(config-if)#ip address 192.168.10.2 255.255.255.0 配置接口IP 5Router(config-if)#no shutdown 开启接口 6Router(config-if)#exit 退出(返回全局模式) 7Router(config)#interface f0/1 8Router(config-if)#ip address 192.168.20.1 255.255.255.0 9Router(config-if)#no shutdown 10Router(config-if)#exit 11Router(config)#interface f1/0 12Router(config-if)#ip address 192.168.70.2 255.255.255.0 13Router(config-if)#no shutdown 14Router(config-if)#exit


④R1
1Router>enable 2Router#configure terminal 3Router(config)#interface f0/0 4Router(config-if)#ip address 192.168.20.2 255.255.255.0 5Router(config-if)#no shutdown 6Router(config-if)#exit 7Router(config)#interface f0/1 8Router(config-if)#ip address 192.168.30.1 255.255.255.0 9Router(config-if)#no shutdown 10Router(config-if)#exit

⑤R2
1Router>enable 2Router#configure 3Router(config)#interface f0/0 4Router(config-if)#ip address 192.168.30.2 255.255.255.0 5Router(config-if)#no shutdown 6Router(config-if)#exit 7Router(config)#interface f0/1 8Router(config-if)#ip address 192.168.40.1 255.255.255.0 9Router(config-if)#no shutdown 10Router(config-if)#exit

⑥R3
1Router>enable 2Router#configure 3Router(config)#interface f0/0 4Router(config-if)#ip address 192.168.40.2 255.255.255.0 5Router(config-if)#no shutdown 6Router(config-if)#exit 7Router(config)#interface f0/1 8Router(config-if)#ip address 192.168.50.1 255.255.255.0 9Router(config-if)#no shutdown 10Router(config-if)#exit 11Router(config)#interface f1/0 12Router(config-if)#ip address 192.168.60.1 255.255.255.0 13Router(config-if)#no shutdown 14Router(config-if)#exit

⑦R4
1Router>enable 2Router#configure terminal 3Router(config)#interface f0/1 4Router(config-if)#ip address 192.168.60.2 255.255.255.0 5Router(config-if)#exit 6Router(config)#interface f0/0 7Router(config-if)#ip address 192.168.70.1 255.255.255.0 8Router(config-if)#no shutdown 9Router(config-if)#exit

2.启动路由进程并公布网络
①R1
1Router(config)#router ospf 1 启用ospf,进程号为1 2Router(config-router)#network 192.168.10.0 0.0.0.255 area 0 公布网段并设置为Area 0 3Router(config-router)#network 192.168.20.0 0.0.0.255 area 0 4Router(config-router)#network 192.168.70.0 0.0.0.255 area 0 5Router(config-router)#exit 退出(返回到全局模式)

②R2
1Router(config)#router ospf 1 2Router(config-router)#network 192.168.20.0 0.0.0.255 area 0 3Router(config-router)#network 192.168.30.0 0.0.0.255 area 0 4Router(config-router)#exit

③R3
1Router(config)#router ospf 1 2Router(config-router)#network 192.168.30.0 0.0.0.255 area 0 3Router(config-router)#network 192.168.40.0 0.0.0.255 area 0 4Router(config-router)#exit

④R4
1Router(config)#router ospf 1 2Router(config-router)#network 192.168.40.0 0.0.0.255 area 0 3Router(config-router)#network 192.168.50.0 0.0.0.255 area 0 4Router(config-router)#network 192.168.60.0 0.0.0.255 area 0 5Router(config-router)#exit

⑤R5
1Router(config)#router ospf 1 2Router(config-router)#network 192.168.60.0 0.0.0.255 area 0 3Router(config-router)#network 192.168.70.0 0.0.0.255 area 0 4Router(config-router)#exit

3.测试

4.查看ospf设置
Router#show ip ospf 查看ospf配置

Router#show ip ospf neighbor 查看邻居关系表

多区域

1.配置PC机IP
①PC0

②PC1

③PC2

2.配置路由器IP
①R0
1Router(config)#interface f0/0 2Router(config-if)#ip address 192.168.1.1 255.255.255.0 3Router(config-if)#no shutdown 4Router(config-if)#exit 5Router(config)#interface f0/1 6Router(config-if)#ip address 192.168.2.1 255.255.255.0 7Router(config-if)#no shutdown 8Router(config-if)#exit 9Router(config)#interface f1/0 10Router(config-if)#ip address 192.168.5.1 255.255.255.0 11Router(config-if)#no shutdown 12Router(config-if)#exit

②R1
1Router(config)#interface f0/0 2Router(config-if)#ip address 192.168.2.2 255.255.255.0 3Router(config-if)#no shutdown 4Router(config-if)#exit 5Router(config)#interface f1/0 6Router(config-if)#ip address 192.168.3.1 255.255.255.0 7Router(config-if)#no shutdown 8Router(config-if)#exit

③R2
1Router(config)#interface f0/1 2Router(config-if)#ip address 192.168.5.2 255.255.255.0 3Router(config-if)#no shutdown 4Router(config-if)#exit 5Router(config)#interface f0/0 6Router(config-if)#ip address 192.168.6.1 255.255.255.0 7Router(config-if)#no shutdown 8Router(config-if)#exit

④R3
1Router(config)#interface f0/0 2Router(config-if)#ip address 192.168.3.2 255.255.255.0 3Router(config-if)#no shutdown 4Router(config-if)#exit 5Router(config)#interface f0/1 6Router(config-if)#ip address 192.168.4.1 255.255.255.0 7Router(config-if)#no shutdown 8Router(config-if)#exit

3.启动路由进程并公布网络
①R0
1Router(config)#router ospf 1 2Router(config-router)#network 192.168.1.0 0.0.0.255 area 0 3Router(config-router)#network 192.168.2.0 0.0.0.255 area 0 4Router(config-router)#network 192.168.5.0 0.0.0.255 area 0 5Router(config-router)#exit

②R1
1Router(config)#router ospf 1 2Router(config-router)#network 192.168.2.0 0.0.0.255 area 0 3Router(config-router)#network 192.168.3.0 0.0.0.255 area 2

③R2
1Router(config)#router ospf 1 2Router(config-router)#network 192.168.6.0 0.0.0.255 area 1 3Router(config-router)#network 192.168.5.0 0.0.0.255 area 0


④R3
1Router(config)#router ospf 1 2Router(config-router)#network 192.168.3.0 0.0.0.255 area 2 3Router(config-router)#network 192.168.4.0 0.0.0.255 area 2

4.测试

完成通讯
