OSPF工作原理概述
OSPF(Open Shortest Path First)是一种链路状态路由协议,用于在IP网络中动态计算最优路径。它通过交换链路状态信息构建拓扑数据库,并使用Dijkstra算法计算最短路径树。
邻居发现与邻接关系建立
OSPF路由器通过发送Hello报文发现相邻路由器。Hello报文包含路由器ID、区域ID、Hello间隔和Dead间隔等信息。当两台路由器在共同网络中收到彼此的Hello报文并确认参数匹配后,形成邻居关系。
在广播或多播网络中,OSPF选举DR(指定路由器)和BDR(备份指定路由器)以减少邻接关系数量。DR和BDR与其他所有路由器建立邻接关系,非DR/BDR路由器之间保持邻居状态但不交换完整链路状态信息。
链路状态数据库同步
建立邻接关系的路由器通过交换链路状态通告(LSA)同步链路状态数据库(LSDB)。同步过程包括:
- 数据库描述(DBD)报文交换:比较LSDB摘要信息
- 链路状态请求(LSR)报文:请求缺失的LSA
- 链路状态更新(LSU)报文:发送请求的LSA
- 链路状态确认(LSAck)报文:确认LSA接收
使用wireshark抓包获取的各个报文
DBD
LSR
LSU
LSA
使用cisco完成ospf单区域实验
实验拓扑
第一步:配置各个接口IP地址
代码示例
Router>enable
Router#conf terminal
Router(config)#int f3/0
Router(config-if)#ip address 192.168.20.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#int f0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.252
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#int f1/0
Router(config-if)#ip address 192.168.1.9 255.255.255.252
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#int f2/0
Router(config-if)#ip address 192.168.2.9 255.255.255.248
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#int f4/0
Router(config-if)#ip address 192.168.21.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#int loopback 0
Router(config-if)#ip address 192.168.0.1 255.255.255.255
Router(config-if)#no shutdown
Router(config-if)#exit
第二步:配置ospf
代码示例(配置如拓扑图中router1 ospf)
R1(config)#router ospf 1
R1(config-router)#router-id 192.168.0.1
R1(config-router)#network 192.168.0.1 0.0.0.0 area 0
R1(config-router)#network 192.168.20.0 0.0.0.255 area 0
R1(config-router)#network 192.168.21.0 0.0.0.255 area 0
R1(config-router)#network 192.168.1.0 0.0.0.3 area 0
R1(config-router)#network 192.168.1.4 0.0.0.3 area 0
R1(config-router)#network 192.168.1.8 0.0.0.3 area 0
R1(config-router)#network 192.168.2.8 0.0.0.7 area 0
R1(config-router)#passive-interface fastEthernet 3/0 ###为业务网段配置被动接口
R1(config-router)#passive-interface fastEthernet 4/0
各个网段连通性
查看ospf邻居
查看ospf LSDB
SPF计算与路由表生成
每台OSPF路由器使用Dijkstra算法计算最短路径树(SPF树)。算法步骤如下:
- 将本地路由器作为根节点加入树中
- 计算根节点到所有邻居节点的最短路径
- 选择代价最小的路径加入树中
- 重复计算直到所有节点都在树中
计算完成后,路由器根据SPF树生成路由表。路径代价基于接口带宽计算,公式为: 参考带宽(默认100Mbps)/接口带宽
LSA类型与扩散机制
OSPF定义了多种LSA类型:
- Type 1(Router LSA):描述路由器链路
- Type 2(Network LSA):描述多路访问网络
- Type 3(Summary LSA):区域间路由
- Type 4(ASBR Summary LSA):指向ASBR的路由
- Type 5(AS External LSA):外部路由
- Type 7(NSSA LSA):NSSA区域外部路由
LSA扩散遵循以下规则:
- 在区域内泛洪Type 1和Type 2 LSA
- ABR在区域间传播Type 3和Type 4 LSA
- ASBR在整个OSPF域传播Type 5 LSA
区域设计与层次化结构
OSPF采用分区域设计实现层次化路由:
- 骨干区域(Area 0):必须存在且连接所有其他区域
- 常规区域:连接骨干区域的非骨干区域
- 特殊区域(Stub、NSSA等):优化外部路由传播
区域边界路由器(ABR)连接多个区域,自治系统边界路由器(ASBR)连接OSPF域和其他路由域。区域划分减少LSA传播范围,提高协议扩展性。
与其他 IGP 的对比
特性 | OSPF | RIP | IS-IS | EIGRP |
---|---|---|---|---|
算法 | 链路状态 | 距离矢量 | 链路状态 | 混合算法 |
路由度量 | Cost(带宽相关) | 跳数(最大 15) | Cost(默认 10) | 复合度量(带宽、延迟等) |
收敛速度 | 快 | 慢 | 快 | 极快 |
VLSM 支持 | 支持 | 不支持 | 支持 | 支持 |
层次结构 | 支持区域划分 | 不支持 | 支持区域和层级 | 支持 AS 号划分 |
厂商支持 | 开放标准 | 开放标准 | 开放标准 | Cisco 私有 |
总结
OSPF(Open Shortest Path First)是基于链路状态算法的内部网关协议,用于自治系统内动态路由。其核心特点包括:采用Dijkstra算法计算最短路径,支持VLSM/CIDR,通过区域划分构建分层网络结构。协议通过Hello包发现邻居,选举DR/BDR减少LSA泛洪,使用组播地址224.0.0.5/6交换信息。 OSPF路由器分内部、ABR、ASBR和骨干路由器,区域类型包括骨干区、标准区、末梢区等。LSA是其核心数据单元,包含链路状态信息,分多种类型实现不同功能。工作时先建立邻居关系,再同步LSDB,通过泛洪更新拓扑,最终计算最优路由。 配置时需指定Router ID、启用进程并宣告直连网段。验证可通过display ospf peer brief等命令。相比RIP,OSPF收敛快、扩展性强,适合中大型网络,但配置维护较复杂。它是企业网络主流IGP,广泛应用于园区网、数据中心等场景。