OSPF(open shorest path first,开放最短路径优先)是一种动态的,基于链路状态的动态路由协议,广泛的应用在企业网络中,通过维护网络拓扑信息,利用 Dijkstra 算法实现最短路径,实现高效的路由选择。
目录
核心作用:将一种路由协议的路由,发布到另一种路由协议中(需指定 “种子 metric”)
一、OSPF特点
1、ospf协议是全世界最实用的路由协议,没有之一
2、使用spf算法来计算最优路径,具体实现的是Dijkstra(迪杰斯特拉算法)
3、ospf协议属于典型的链路状态型路由协议(每个路由器都维护一份完整的网路拓扑这个拓扑是用链路状态数据库来维护的)
4、ospf选择最优路径依靠的参数为开销cost
5、ospf协议使用应用层次化的网络结构来选择最优路径
6、ospf协议有三张表,邻居表,链路状态数据库表,路由表
二、OSPF协议的工作原理
(一)建立邻居关系(通过hello协议)
1、当路由器启动ospf后,路由器通过接口周期性的发送hello报文(默认十秒一次,广播)
2、报文中包含RouterID、Hello间隔、Dead时间(默认是4倍Hello间隔)、区域id等信息
3、如果想要接受方和发送方的区域id,认证信息相互匹配的话,就会形成邻居信息,记录在路由器的邻居表中
(二)信息同步(LSA交换)
邻居关系建立之后,路由器通过多种报文交换LSA,同步LSDB
- DD报文(数据库报文): 双方交换LSDB的摘要信息,用来发现彼此的LSDB的差异
- LSR报文(链路状态请求报文): 相对方请求自身缺少的LSA详细信息
- LSU报文(链路状态更新报文): 携带完整的LSA内容,相应LSR请求
- LSAck报文(链路状态确认报文):确认收到LSU,保证链接的可靠性
同步完成之后,同一个区域内的LSDB完全一致
(三)计算最短路径(SPF:Dijkstra算法)
基于LSDB,每个路由器以自身为根(就是以此路由器为触发点),运行Dijkstra算法生成最短路径树(SPT)
路径度量值为Cost(开销)默认计算公式:Cost = 100Mbit/s ÷ 接口带宽(这个流量的值可以自己定义)
从最短路径树种提取路由条目,假如OSPF协议的路由表(优先级华为设备默认是10)
(四)维护和更新机制
- 周期性Hello报文:维持邻居关系,如果Dead时间内没有收到Hello,则判定邻居失效
- 触发更新:当网络结构发生变化的时候,路由器立刻发送新的LSA,仅扩散变化的部分,减少带宽的消耗
- LSA老化机制: 每一个LSA都要老化的时间(默认 3600 秒),定期刷新(1800 秒),超时未刷新则从 LSDB 中删除。
三、OSPF的层次化是如何实现的
分区域
(一)、OSPF网络层次化的核心是区域(area)划分
将整个自治系统划分为多个非重叠的区域,每个区域内的路由器只维护当前区域的详细信息,对其他的区域仅仅了解汇总后的摘要
(二)区域的构建是有规则的
每个区域有唯一标识
必须存在 “骨干区域(Area 0)
区域内路由 “详细化”,区域间路由 “汇总化”
分角色
(一)OSPF将路由器划分成了四种不同的角色,每个角色职责明确,分工协作
内部路由器:仅仅属于一个区域,只维护本区域的路由信息,不参与区域之间的交互
区域边界路由器:同时属于骨干区域和一个或者多个常规区域,收集常规区域的明细路由,生成“区域汇总路由”并且发布到骨干区域,从骨干区域接受其他区域的汇总路由发布到所属的常规区域
骨干路由器:一定属于骨干区域,同时可能属于其他区域,负责骨干区域内的路由计算和区域间的路由传递
自治系统边界路由器:链接ospf自治系统和其他协议的网络,将其他协议的路由引入到OSPF网络中,生成外部的LSA,可以部署在任何区域
路由汇总
通过路由汇总,减少跨区域的信息交互
定义不同类型的链路状态通告
Type-3 LSA(区域间汇总 LSA)
Type-4 LSA(ASBR 位置通告 LSA)
Type-5 LSA(外部路由 LSA)
Type-7 LSA(NSSA 外部路由 LSA)
三、单区域的ospf协议的配置
当ospf没有划分区域的时候,所有的区域都默认为骨干区域
思科设备
基础环境配置
#全局基础设置
# 1. 关闭域名解析(避免输入错误命令时卡顿)
Router(config)# no ip domain-lookup
# 2. 配置Console口(防打断、永不超时)
Router(config)# line console 0
Router(config-line)# logging synchronous # 防命令被日志打断
Router(config-line)# exec-timeout 0 0 # 会话永不超时(0分0秒)
Router(config-line)# exit
#如果有三层交换机的话要开启三层交换机的路由功能,并且将接口转化为三层接口
# 1. 开启三层交换机路由功能(默认关闭)
Switch(config)# ip routing
# 2. 将二层接口转化为三层接口(可配置IP)
Switch(config)# interface 接口类型/编号 # 如GigabitEthernet0/0
Switch(config-if)# no switchport # 二层→三层
Switch(config-if)# ip address IP地址 子网掩码 # 如ip address 192.168.1.1 255.255.255.0
思科设备ospf详细配置
配置过程:进入ospf进程→配置router-id→宣告网络直连到area0
#接下来是ospf的详细配置
# 1. 进入OSPF进程(进程号1-65535,本地有效)
Router(config)# router ospf 进程号 # 如router ospf 1
# 2. 配置Router-ID(必配,优先用环回口最大IP;无环回则用物理接口最大IP)
# 方式1:手动指定(推荐)
Router(config-router)# router-id 0.0.0.1 # 示例:环回口192.168.0.1则用此ID
# 方式2:自动获取(需提前配置环回口,如interface Loopback0,ip address 192.168.0.1 255.255.255.255)
# 3. 宣告直连网络到Area 0(格式:network 网络号 反掩码 area 0)
# 示例:宣告192.168.1.0/24和10.0.0.0/8网段
Router(config-router)# network 192.168.1.0 0.0.0.255 area 0
Router(config-router)# network 10.0.0.0 0.255.255.255 area 0
注意:
router-id 192.168.1.1
是配置该命令的路由器自身在 OSPF 协议中的唯一标识。例如,当路由器 A 配置了
router-id 192.168.1.1
,那么在整个 OSPF 网络中,“192.168.1.1” 就唯一代表路由器 A,其他路由器会通过这个 ID 来区分它与其他设备。
华为设备
华为设备的单区域网络配置流程和思科大同小异
前期配置
<Huawei> system-view #进入系统视图
[Huawei] sysname AR1 #重命名设备
[Huawei] undo ter m #防止设备一直输出文本
ospf配置
#配置路由,也是要制定一个
[AR1] ospf 1 # 启动OSPF进程1(进程号1-65535,本地有效)
[AR1] router-id 10.0.1.1 #指定Router ID为环回IP(具有稳定性)
[AR1-ospf-1] area 0 # 进入区域0(单区域通常用区域0,骨干区域;也可使用其他区域ID,如1,但建议统一)
[AR1-ospf-1-area-0.0.0.0] network 192.168.1.0 0.0.0.255 # 宣告直连网段(网段+反掩码)
[AR1-ospf-1-area-0.0.0.0] network 10.0.1.1 0.0.0.0 # 宣告环回网段(32位掩码的反掩码是0.0.0.0)
#使用反码来匹配网段,使用环回口来代替一个其他网络
[AR1-ospf-1-area-0.0.0.0] quit
[AR1-ospf-1] quit
四、多区域的OSPF配置
- 区域内拓扑变化(如路由器故障)仅在本区域内传递,不影响其他区域;
- 即使变化需传递到骨干区域,ABR 会先对路由汇总(减少路由条目)再转发到 Area 0
思科设备
# ABR路由器配置(同时属于Area 0和Area 1)
#ABR区域边界路由器
Router(config)# router ospf 1
Router(config-router)# router-id 0.0.0.2 # ABR的Router-ID
# 宣告连接Area 0的直连网络
Router(config-router)# network 192.168.0.0 0.0.0.255 area 0
# 宣告连接Area 1的直连网络
Router(config-router)# network 192.168.2.0 0.0.0.255 area 1
# 非ABR(仅属于Area 1)配置
Router(config)# router ospf 1
Router(config-router)# router-id 0.0.0.3
Router(config-router)# network 192.168.2.0 0.0.0.255 area 1 # 仅宣告到Area 1
华为设备
#区域内路由器
[AR1] ospf 1 router-id 10.0.1.1 #创建OSPF进程1,手动指定路由器ID(环回0的IP)
[AR1-ospf-1] area 1 #进入Area 1视图
[AR1-ospf-1-area-0.0.0.1] network 192.168.1.0 0.0.0.255 #宣告接口网段(反掩码)
[AR1-ospf-1-area-0.0.0.1] network 10.0.1.1 0.0.0.0 ## 宣告环回接口网段
[AR1-ospf-1-area-0.0.0.1] quit
[AR1-ospf-1] quit
#边界网关路由器
[AR2] ospf 1 router-id 10.0.2.2 #路由器ID为环回0的IP
[AR2-ospf-1] area 0 # 进入骨干区域Area 0
[AR2-ospf-1-area-0.0.0.0] network 192.168.0.0 0.0.0.255 #宣告Area 0的接口网段
[AR2-ospf-1-area-0.0.0.0] network 10.0.2.2 0.0.0.0 #宣告环回接口(属于Area 0)
[AR2-ospf-1-area-0.0.0.0] quit
[AR2-ospf-1] area 1 #进入Area 1
[AR2-ospf-1-area-0.0.0.1] network 192.168.1.0 0.0.0.255 #宣告Area 1的接口网段
[AR2-ospf-1-area-0.0.0.1] quit
[AR2-ospf-1] quit
五、ACL 的作用
- 过滤通过路由器的数据包(如拒绝特定 IP 的流量);
- 过滤路由表中的路由条目(如阻止特定路由被学习)。
六、重分发(Redistribute)配置
这里只是思科的重新分发样例
核心作用:将一种路由协议的路由,发布到另一种路由协议中(需指定 “种子 metric”)
场景 1:其他协议(如 OSPF)→ RIP
# 进入RIP进程
Router(config)# router rip
Router(config-router)# version 2 # 启用RIP v2(支持子网)
# 重分发OSPF路由,指定metric(必须<15,RIP最大跳数15)
Router(config-router)# redistribute ospf 1 metric 3 # 示例:metric=3
场景 2:RIP → OSPF
# 进入OSPF进程
Router(config)# router ospf 1
# 重分发RIP路由,必须加subnets(否则不发布子网路由)
Router(config-router)# redistribute rip subnets
场景 3:静态路由 → OSPF
Router(config)# router ospf 1
Router(config-router)# redistribute static subnets # 加subnets支持子网
场景 4:直连路由 → OSPF
Router(config)# router ospf 1
Router(config-router)# redistribute connected subnets # 加subnets支持子网
七、常用 OSPF 补充查看命令
思科设备
# 1. 查看OSPF邻居详情(含邻居状态、Router-ID)
Router# show ip ospf neighbor detail
# 2. 查看OSPF进程信息(含SPF算法执行次数、Router-ID)
Router# show ip ospf
# 3. 查看指定接口的OSPF信息(含所属区域、Router-ID)
Router# show ip ospf interface 接口类型/编号 # 如show ip ospf interface GigabitEthernet0/0
# 4. 查看完整路由表(筛选OSPF路由可加“ospf”参数)
Router# show ip route
华为设备
display ospf peer
display ospf peer brief
display ospf peer [router-id] verbose