什么是OSPF
OSPF(开放最短路径优先)是由IETF开发的基于链路状态的自治系统内部路由协议,用来代替存在一些问题的RIP协议。与距离矢量协议不同,链路状态路由协议关心网络中链路活接口的状态(包括UP、DOWN、IP地址、掩码、带宽、利用率和延迟等),每个路由将其已知的链路状态向该区域的其他路由器通告,通过这种方式,网络上的每台路由对网络结构都会有相同的认识。随后,路由器以其为依据,使用SPF算法计算和选择路由。
OSPF协议在有组播发送能力的链路层上以组播地址发送协议包,即达到了节约资源的目的,又最大程度地减少了对其他网络设备的干扰。
OSPF将协议包直接封装在IP包中,协议号为89。由于IP协议本身是无连接的,所以OSFP传输的可靠性需要协议本身来保证。因此,OSPF协议定义了一些机制保证协议包安全可靠地传输。
OSPF工作过程
OSPF协议大致工作过程主要分为:寻找邻居、建立邻接关系、链路状态信息传递、计算路由
OSPF工作原理
-
链路状态收集
-
路由器通过发送 Hello 报文发现邻居,交换链路状态信息,涵盖链路、接口状态、网络类型等。
-
链路状态数据库构建
路由器将收集的链路状态信息存入本地链路状态数据库,数据库完整呈现网络拓扑结构。
-
最短路径计算
路由器以自身为根节点,运用 Dijkstra 算法,依据链路状态数据库计算至其他网络节点的最短路径。
OSPF配置与实践
实验拓扑
实验需求
- 按照拓扑图示给设备命名以及配置 IP 地址
- 按照图示分区域配置 OSPF ,实现全网互通
- 为了路由结构稳定,要求路由器使用环回口作为 Router-id,ABR 的环回口宣告进骨干区域
实验步骤
-
配置环回口IP(设备命名和配置 IP 地址部分省略)
[R1]int lo0 [R1-LoopBack0]ip add 1.1.1.1 32
[R2]int lo0 [R2-LoopBack0]ip add 2.2.2.2 32
[R3]int lo0 [R3-LoopBack0]ip add 3.3.3.3 32
[R4]int lo0 [R4-LoopBack0]ip add 4.4.4.4 32
[R5]int lo0 [R5-LoopBack0]ip add 5.5.5.5 32
IP地址配置完成后,应如下图所示
-
按照图示分区域配置 OSPF ,实现全网互通
分析:实现全网互通,意味着每台路由器都要宣告本地的所有直连网段,包括环回口所在的网段。要求 ABR 的环回口宣告进骨干区域,即区域 0,同时,每台路由器手动配置各自环回口的 IP 地址作为 Router-id
步骤 1:在路由器上分别配置 OSPF,按区域宣告所有直连网段和环回口
[R1]ospf 1 router-id 1.1.1.1 [R1-ospf-1]area 0 [R1-ospf-1-area-0.0.0.0]network 10.1.12.0 0.0.0.255 [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]dis th #area 0.0.0.0network 1.1.1.1 0.0.0.0network 10.1.12.0 0.0.0.255 # return [R1-ospf-1-area-0.0.0.0]area 1 [R1-ospf-1-area-0.0.0.1]network 10.1.14.0 0.0.0.255 [R1-ospf-1-area-0.0.0.1]dis th #area 0.0.0.1network 10.1.14.0 0.0.0.255 # return
[R2]ospf 1 router-id 2.2.2.2 [R2-ospf-1]area 0 [R2-ospf-1-area-0.0.0.0]network 10.1.12.0 0.0.0.255 [R2-ospf-1-area-0.0.0.0]network 10.1.23.0 0.0.0.255 [R2-ospf-1-area-0.0.0.0]network 2.2.2.2 0.0.0.0 [R2-ospf-1-area-0.0.0.0]dis th #area 0.0.0.0network 2.2.2.2 0.0.0.0network 10.1.12.0 0.0.0.255network 10.1.23.0 0.0.0.255 # return
[R3]ospf 1 router-id 3.3.3.3 [R3-ospf-1]a 0 [R3-ospf-1-area-0.0.0.0]network 10.1.23.0 0.0.0.255 [R3-ospf-1-area-0.0.0.0]network 3.3.3.3 0.0.0.0 [R3-ospf-1-area-0.0.0.0]dis th #area 0.0.0.0network 3.3.3.3 0.0.0.0network 10.1.23.0 0.0.0.255 # return [R3-ospf-1-area-0.0.0.0]a 2 [R3-ospf-1-area-0.0.0.2]network 10.1.35.0 0.0.0.255 [R3-ospf-1-area-0.0.0.2]dis th #area 0.0.0.2network 10.1.35.0 0.0.0.255 # return
[R4]ospf 1 router-id 4.4.4.4 [R4-ospf-1]a 1 [R4-ospf-1-area-0.0.0.1]network 10.1.14.0 0.0.0.255 [R4-ospf-1-area-0.0.0.1]network 4.4.4.4 0.0.0.0 [R4-ospf-1-area-0.0.0.1]dis th #area 0.0.0.1network 4.4.4.4 0.0.0.0network 10.1.14.0 0.0.0.255 # return
[R5]ospf 1 router-id 5.5.5.5 [R5-ospf-1]a 2 [R5-ospf-1-area-0.0.0.2]network 10.1.35.0 0.0.0.255 [R5-ospf-1-area-0.0.0.2]network 5.5.5.5 0.0.0.0 [R5-ospf-1-area-0.0.0.2]dis th #area 0.0.0.2network 5.5.5.5 0.0.0.0network 10.1.35.0 0.0.0.255 # return
-
检查是否全网互通
分析:检查 OSPF 是否全网互通,一个是检查邻居关系表,看邻居关系是否正常;另一个是检查路由表,看是否学习到全网路由 这里只展示 R1 的检查结果
步骤 1:#display ospf peer 查看邻居关系表[R1]dis ospf peer OSPF Process 1 with Router ID 1.1.1.1Neighbor Brief InformationArea: 0.0.0.0 Router ID Address Pri Dead-Time State Interface2.2.2.2 10.1.12.2 1 34 Full/BDR GE0/0Area: 0.0.0.1 Router ID Address Pri Dead-Time State Interface4.4.4.4 10.1.14.4 1 38 Full/BDR GE0/1
[R2]dis ospf peer OSPF Process 1 with Router ID 2.2.2.2Neighbor Brief InformationArea: 0.0.0.0 Router ID Address Pri Dead-Time State Interface1.1.1.1 10.1.12.1 1 37 Full/DR GE0/03.3.3.3 10.1.23.3 1 39 Full/BDR GE0/1
[R3]dis ospf peer OSPF Process 1 with Router ID 3.3.3.3Neighbor Brief InformationArea: 0.0.0.0 Router ID Address Pri Dead-Time State Interface2.2.2.2 10.1.23.2 1 34 Full/DR GE0/0Area: 0.0.0.2 Router ID Address Pri Dead-Time State Interface5.5.5.5 10.1.35.5 1 39 Full/BDR GE0/1
[R4]dis ospf peer OSPF Process 1 with Router ID 4.4.4.4Neighbor Brief InformationArea: 0.0.0.1 Router ID Address Pri Dead-Time State Interface1.1.1.1 10.1.14.1 1 36 Full/DR GE0/0
[R5]dis ospf peer OSPF Process 1 with Router ID 5.5.5.5Neighbor Brief InformationArea: 0.0.0.2 Router ID Address Pri Dead-Time State Interface3.3.3.3 10.1.35.3 1 35 Full/DR GE0/0
说明:状态为FULL,说明邻接关系已建立
步骤 2:查看路由表
[R1]dis ip routing-table Destinations : 20 Routes : 20Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
1.1.1.1/32 Direct 0 0 127.0.0.1 InLoop0
2.2.2.2/32 O_INTRA 10 1 10.1.12.2 GE0/0
3.3.3.3/32 O_INTRA 10 2 10.1.12.2 GE0/0
4.4.4.4/32 O_INTRA 10 1 10.1.14.4 GE0/1
5.5.5.5/32 O_INTER 10 3 10.1.12.2 GE0/0
10.1.12.0/24 Direct 0 0 10.1.12.1 GE0/0
10.1.12.1/32 Direct 0 0 127.0.0.1 InLoop0
10.1.12.255/32 Direct 0 0 10.1.12.1 GE0/0
10.1.14.0/24 Direct 0 0 10.1.14.1 GE0/1
10.1.14.1/32 Direct 0 0 127.0.0.1 InLoop0
10.1.14.255/32 Direct 0 0 10.1.14.1 GE0/1
10.1.23.0/24 O_INTRA 10 2 10.1.12.2 GE0/0
10.1.35.0/24 O_INTER 10 3 10.1.12.2 GE0/0
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
224.0.0.0/4 Direct 0 0 0.0.0.0 NULL0
224.0.0.0/24 Direct 0 0 0.0.0.0 NULL0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
[R2]dis ip routing-table Destinations : 20 Routes : 20Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
1.1.1.1/32 O_INTRA 10 1 10.1.12.1 GE0/0
2.2.2.2/32 Direct 0 0 127.0.0.1 InLoop0
3.3.3.3/32 O_INTRA 10 1 10.1.23.3 GE0/1
4.4.4.4/32 O_INTER 10 2 10.1.12.1 GE0/0
5.5.5.5/32 O_INTER 10 2 10.1.23.3 GE0/1
10.1.12.0/24 Direct 0 0 10.1.12.2 GE0/0
10.1.12.2/32 Direct 0 0 127.0.0.1 InLoop0
10.1.12.255/32 Direct 0 0 10.1.12.2 GE0/0
10.1.14.0/24 O_INTER 10 2 10.1.12.1 GE0/0
10.1.23.0/24 Direct 0 0 10.1.23.2 GE0/1
10.1.23.2/32 Direct 0 0 127.0.0.1 InLoop0
10.1.23.255/32 Direct 0 0 10.1.23.2 GE0/1
10.1.35.0/24 O_INTER 10 2 10.1.23.3 GE0/1
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
224.0.0.0/4 Direct 0 0 0.0.0.0 NULL0
224.0.0.0/24 Direct 0 0 0.0.0.0 NULL0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
[R3]dis ip routing-table Destinations : 20 Routes : 20Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
1.1.1.1/32 O_INTRA 10 2 10.1.23.2 GE0/0
2.2.2.2/32 O_INTRA 10 1 10.1.23.2 GE0/0
3.3.3.3/32 Direct 0 0 127.0.0.1 InLoop0
4.4.4.4/32 O_INTER 10 3 10.1.23.2 GE0/0
5.5.5.5/32 O_INTRA 10 1 10.1.35.5 GE0/1
10.1.12.0/24 O_INTRA 10 2 10.1.23.2 GE0/0
10.1.14.0/24 O_INTER 10 3 10.1.23.2 GE0/0
10.1.23.0/24 Direct 0 0 10.1.23.3 GE0/0
10.1.23.3/32 Direct 0 0 127.0.0.1 InLoop0
10.1.23.255/32 Direct 0 0 10.1.23.3 GE0/0
10.1.35.0/24 Direct 0 0 10.1.35.3 GE0/1
10.1.35.3/32 Direct 0 0 127.0.0.1 InLoop0
10.1.35.255/32 Direct 0 0 10.1.35.3 GE0/1
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
224.0.0.0/4 Direct 0 0 0.0.0.0 NULL0
224.0.0.0/24 Direct 0 0 0.0.0.0 NULL0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
[R4]dis ip routing-table Destinations : 18 Routes : 18Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
1.1.1.1/32 O_INTER 10 1 10.1.14.1 GE0/0
2.2.2.2/32 O_INTER 10 2 10.1.14.1 GE0/0
3.3.3.3/32 O_INTER 10 3 10.1.14.1 GE0/0
4.4.4.4/32 Direct 0 0 127.0.0.1 InLoop0
5.5.5.5/32 O_INTER 10 4 10.1.14.1 GE0/0
10.1.12.0/24 O_INTER 10 2 10.1.14.1 GE0/0
10.1.14.0/24 Direct 0 0 10.1.14.4 GE0/0
10.1.14.4/32 Direct 0 0 127.0.0.1 InLoop0
10.1.14.255/32 Direct 0 0 10.1.14.4 GE0/0
10.1.23.0/24 O_INTER 10 3 10.1.14.1 GE0/0
10.1.35.0/24 O_INTER 10 4 10.1.14.1 GE0/0
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
224.0.0.0/4 Direct 0 0 0.0.0.0 NULL0
224.0.0.0/24 Direct 0 0 0.0.0.0 NULL0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
[R5]dis ip routing-table Destinations : 18 Routes : 18Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
1.1.1.1/32 O_INTER 10 3 10.1.35.3 GE0/0
2.2.2.2/32 O_INTER 10 2 10.1.35.3 GE0/0
3.3.3.3/32 O_INTER 10 1 10.1.35.3 GE0/0
4.4.4.4/32 O_INTER 10 4 10.1.35.3 GE0/0
5.5.5.5/32 Direct 0 0 127.0.0.1 InLoop0
10.1.12.0/24 O_INTER 10 3 10.1.35.3 GE0/0
10.1.14.0/24 O_INTER 10 4 10.1.35.3 GE0/0
10.1.23.0/24 O_INTER 10 2 10.1.35.3 GE0/0
10.1.35.0/24 Direct 0 0 10.1.35.5 GE0/0
10.1.35.5/32 Direct 0 0 127.0.0.1 InLoop0
10.1.35.255/32 Direct 0 0 10.1.35.5 GE0/0
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
224.0.0.0/4 Direct 0 0 0.0.0.0 NULL0
224.0.0.0/24 Direct 0 0 0.0.0.0 NULL0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
说明:可以看到,分别已经学习到了全网所有网段的路由信息
-
测试在R4上ping R5
[R4]ping 10.1.35.5 Ping 10.1.35.5 (10.1.35.5): 56 data bytes, press CTRL+C to break 56 bytes from 10.1.35.5: icmp_seq=0 ttl=252 time=1.758 ms 56 bytes from 10.1.35.5: icmp_seq=1 ttl=252 time=1.174 ms 56 bytes from 10.1.35.5: icmp_seq=2 ttl=252 time=1.067 ms 56 bytes from 10.1.35.5: icmp_seq=3 ttl=252 time=1.087 ms 56 bytes from 10.1.35.5: icmp_seq=4 ttl=252 time=1.761 ms--- Ping statistics for 10.1.35.5 --- 5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss round-trip min/avg/max/std-dev = 1.067/1.369/1.761/0.321 ms [R4]%Mar 19 16:27:11:744 2025 R4 PING/6/PING_STATISTICS: Ping statistics for 10.1.35.5: 5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss, round-trip min/avg/max/std-dev = 1.067/1.369/1.761/0.321 ms.
[R4]ping 5.5.5.5
Ping 5.5.5.5 (5.5.5.5): 56 data bytes, press CTRL+C to break
56 bytes from 5.5.5.5: icmp_seq=0 ttl=252 time=1.471 ms
56 bytes from 5.5.5.5: icmp_seq=1 ttl=252 time=0.854 ms
56 bytes from 5.5.5.5: icmp_seq=2 ttl=252 time=1.449 ms
56 bytes from 5.5.5.5: icmp_seq=3 ttl=252 time=1.697 ms
56 bytes from 5.5.5.5: icmp_seq=4 ttl=252 time=1.818 ms--- Ping statistics for 5.5.5.5 ---
5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss
round-trip min/avg/max/std-dev = 0.854/1.458/1.818/0.332 ms
[R4]%Mar 19 16:26:22:237 2025 R4 PING/6/PING_STATISTICS: Ping statistics for 5.5.5.5: 5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss, round-trip min/avg/max/std-dev = 0.854/1.458/1.818/0.332 ms.
OSPF知识点
OSPF 区域
(1)区域概念
区域从逻辑上划分网络,各区域拥有独立链路状态数据库与路由计算,能减少链路状态信息传播范围,减轻路由器负担,提升网络可管理性与稳定性。
(2)骨干区域与非骨干区域
骨干区域(Area 0)至关重要,连接非骨干区域,非骨干区域间路由信息需经骨干区域中转。
(3)区域间路由汇总
区域边界路由器进行路由汇总,将多个具体路由条目合并为一条,减少区域间传递的路由信息数量,提升路由效率。
OSPF 路由器角色
(1)DR 和 BDR
在广播型或 NBMA 网络中,DR(指定路由器)负责与其他路由器交换链路状态信息,BDR(备份指定路由器)在 DR 故障时接替工作,减少链路状态信息泛洪及邻接关系数量。
(2)内部路由器、区域边界路由器和自治系统边界路由器
内部路由器负责所在区域内路由;区域边界路由器连接不同区域,传递区域间路由信息;自治系统边界路由器连接 OSPF 自治系统与其他自治系统,引入外部路由。
OSPF 报文
(1)Hello 报文
作用为发现邻居、建立与维护邻居关系、选举 DR 和 BDR。报文中包含路由器 ID、区域 ID、Hello 间隔、死亡间隔等字段。
(2)其他报文类型
数据库描述(DBD)报文、链路状态请求(LSR)报文、链路状态更新(LSU)报文和链路状态确认(LSAck)报文等,各自承担特定功能,相互协作实现 OSPF 各项功能。
区域(Area):区域是从逻辑上将路由器划分为不同的组,每个组用区域号(Area ID)来标识。区域的边界是路由器,而不是链路。其中,Area 0 通常被称为骨干区域,负责区域之间的路由,非骨干区域之间的路由信息必须通过骨干区域来转发。
路由器 ID(Router ID):唯一标识一个 OSPF 路由器,通常使用环回接口的 IP 地址。如果没有配置环回接口,则选取物理接口中 IP 地址最大的接口地址作为 Router ID。
链路状态通告(LSA):用于在 OSPF 路由器之间传递链路状态信息,描述了网络中的链路、路由器以及它们之间的连接关系等。
邻居(Neighbor):两台 OSPF 路由器之间建立邻接关系,就互为邻居。它们通过交换 Hello 报文来发现和维护邻居关系。
邻接(Adjacency):两台 OSPF 路由器之间建立完全邻接关系后,会同步链路状态数据库,以便拥有相同的网络拓扑信息。
指定路由器(DR)和备份指定路由器(BDR):在广播型网络和非广播多路访问网络(NBMA)中,为了减少网络中链路状态信息的泛洪和路由器之间的邻接关系数量,会选举出 DR 和 BDR。DR 负责与其他路由器交换链路状态信息,BDR 在 DR 出现故障时接替其工作。
开销(Cost):OSPF 协议采用链路开销作为度量值,用于衡量到达目标网络的路径代价。链路开销与链路带宽成反比,即带宽越高,开销越小,选路主要基于带宽因素。
OSPF 报文类型:包括 Hello 报文、数据库描述(DBD)报文、链路状态请求(LSR)报文、链路状态更新(LSU)报文和链路状态确认(LSAck)报文等。Hello 报文用于发现和维护邻居关系;DBD 报文用于描述链路状态数据库的内容;LSR 报文用于请求特定的链路状态信息;LSU 报文用于发送链路状态更新信息;LSAck 报文用于对收到的 LSU 报文进行确认。
Dijkstra 算法: