OSPF路由协议详解
OSPF(Open Shortest Pass First 开放最短路径优先),一个链路状态协议。
区别于距离矢量路由协议,OSPF 每个路由器都掌握所在区域上所有路由器的链路状态信息,了解整个网络的拓扑情况,因此可以独立的计算出到达任意目的地的路由。
另外介绍一下 RIP 的缺点:RIP 是一步一步和邻居问路,走一步看一步,并且 RIP 以跳数为计算方式,不科学。
OSPF 特点
-
OSPF 是无类路由协议,支持 VLSM。(可变长度子网掩码)
-
组播地址 224.0.0.5 代表所有 OSPF 路由器的组,224.0.0.6 代表 DR(指定路由器 DesignatedRouter) /BDR(备份指定路由器 BackupDesignatedRouter)
可以把组播地址看成一个微信群号,任何成员(组播源)往微信群(组播IP)里发送消息(组播数据),这个群里的成员(组播接收者)都会接收到此消息。
-
SPF(最短路径优先算法)
SPF算法也被称为Dijkstra算法,这是因为最短路径优先算法SPF是由荷兰计算机科学家狄克斯特拉于1959年提出的。 SPF算法将每一个路由器作为根(ROOT)来计算其到每一个目的地路由器的距离,每一个路由器根据一个统一的数据库会计算出路由域的拓扑结构图,该结构图类似于一棵树,在SPF算法中,被称为最短路径树。
-
OSPF 支持认证。
OSPF支持报文验证功能,只有通过验证的报文才能接收,否则将不能正常建立邻居关系。 OSPF协议支持两种认证方式——区域认证和链路认证。 使用区域认证时,一个区域中所有的路由器在该区域下的认证模式和口令必须一致; OSPF链路认证相比于区域认证更加灵活,可专门针对某个邻居设置单独的认证模式和密码。 如果同时配置了接口认证和区域认证时,优先使用接口建立OSPF邻居。 每种认证方式又分为简单验证方式、MD5验证模式和Key chain验证模式。 简单验证模式在数据传递过程中,认证密钥和密钥ID都是明文传输,很容易被截获; MD5验证模式下的密钥是经过MD5加密传输,相当于简单验证模式更为安全; Key chain验证模式可以同时配置多个密钥,不同密钥可单独设置生效周期等。 # 原文链接:https://blog.csdn.net/weixin_57636278/article/details/121036855
OSPF 区域及其作用
OSPF 协议中的区域(Area)概念用于优化大型网络的路由管理。通过将网络划分为多个区域,OSPF 减少了路由器的负载,提高了网络的扩展性和稳定性。每个区域内的路由器只维护本区域的链路状态信息(LSDB),避免链路状态数据库过大,有助于 OSPF 在大型网络中的高效应用,并通过骨干区域(Area 0)与其他区域交换路由信息。
一、OSPF 区域的两大分类:
-
骨干区域(Area 0):
-
必须有且唯一:每个 OSPF 网络中必须有一个骨干区域,且只能有一个。
-
连接其他非骨干区域:骨干区域必须连接所有非骨干区域,负责区域间的路由信息传递。
-
一般无终端用户:骨干区域通常不包含终端用户。
-
-
非骨干区域:
-
根据实际需求划分:这些区域根据网络拓扑和终端用户分布进行划分。
-
必须连接 Area 0:所有非骨干区域必须直接或间接与 Area 0 相连,用来连接终端用户和资源。
-
二、OSPF 区域的详细分类(基于外部路由关系):
-
标准区域(Standard Area):
-
可以接收完整的链路状态更新和路由汇总信息,具备基本的区域特性。
-
-
骨干区域(Area 0):
-
除了承担标准区域的功能外,还负责在不同区域间传递路由信息。
-
-
存根区域(Stub Area):
-
不接收来自自治系统(AS)外部的路由信息,仅依赖默认路由访问外部网络,减少路由表大小。
-
-
完全存根区域(Totally Stub Area, TStub):
-
不接收外部 AS 路由信息及其他区域的路由信息,仅依赖默认路由,这进一步减少了路由表中的信息量。
-
-
不完全存根区域(Not-So-Stubby Area, NSSA):
-
类似于存根区域,但允许接收通过 LSA Type 7 发送的外部路由信息,并将其转换为 LSA Type 5,以便在其他区域中传播。
-
路由器身份
一、从整体网络视角
-
ABR(区域边界路由器):
作用:连接不同 OSPF 区域,通常在骨干区域(Area 0)与其他区域间传播路由信息。
职责:将本区域路由摘要发送至 Area 0,Area 0 的 ABR 再将其传播至其他区域,确保区域间的路由可达性。 -
ASBR(自治系统边界路由器):
作用:连接 OSPF 网络与非 OSPF 网络。
职责:将非 OSPF 网络的路由信息引入 OSPF 网络,通过生成 Type 5 或 Type 7 LSA 来传播外部路由。
二、从单一区域的视角
-
内部路由器:
定义:所有接口位于同一区域内的路由器。
职责:维护所在区域的链路状态数据库(LSDB),参与路由计算与信息传播。 -
主干路由器:
定义:连接骨干区域(Area 0)的路由器。
职责:在 Area 0 内传递和处理路由信息,确保非骨干区域互通。
三、从单个网段的视角
-
DR(指定路由器):
定义:在多访问网络中负责收集与传播 LSA 的路由器。
职责:集中处理 LSA 交换,减少泛洪流量,维护网段内路由信息。 -
BDR(备份指定路由器):
定义:DR 的备份,DR 失效时接替其工作。
职责:在 DR 不可用时接替其职责。 -
DRothers:
定义:非 DR 和 BDR 的路由器。
职责:通过 DR 和 BDR 间接交换 LSA,不直接参与路由转发。
DR/BDR 的选举
选举 DR/BDR 的目的与作用
在一个区域中,只需要DR作为区域中心与区域外路由器建立邻居关系,并收集所有链路状态信息,这样可以减少大量开销,节省带宽,降低路由器压力。
(这里的区域指同一网段的路由器,区分area几区域)
在广播网络上,DR和BDR都使用组播地址224.0.0.6来接收链路状态更新报文。
在下面这个图中,RTA 与 RTB 只需要与 DR/BDR 建立邻接关系,而 RTA 与 RTB 之间只是邻居关系即可,可以发现,DR 可以减少广播型网络中邻接关系的数量。
选举 DR/BDR 的规则与过程
选举环境
-
OSPF 在多访问网络(如广播和 NBMA 网络)中进行 DR/BDR 的选举,而在点对点网络中不需要选举。
几种OSPF网络类型
1.广播多路访问型(如以太网)
2.非广播多路访问型NBMA(如Frame Relay帧中继,X.25广域网,ATM)
3.点到点型(如PPP,HDLC)
4.点到多点型
-
每个多访问网络中的路由器都会参与选举,以确定一个 DR 和一个 BDR。
选举规则
-
每个路由器都有一个 OSPF 接口的优先级值(默认是 1,范围是 0 到 255),可以通过配置更改。如果优先级为 0,该路由器不参与 DR/BDR 选举。
-
在选举过程中,优先级最高的路由器被选为 DR,第二高的被选为 BDR。如果有多个路由器的优先级相同,则比较路由器的 Router ID(RID),RID 较高的被选为 DR/BDR。
选举过程
-
DR 的选举:所有参与选举的路由器根据优先级比较,优先级最高的成为 DR。如果有多个优先级相同,则 Router ID 较高者当选。
-
BDR 的选举:在选出 DR 后,优先级次高(或 Router ID 次高)的路由器会被选为 BDR。
-
没有重新选举的条件:
-
当 DR 或 BDR 已经选举完成后,即使有新的路由器加入,它们不会自动抢占现有的 DR 和 BDR,除非现有的 DR 或 BDR 失效或者被移除。
-
-
DR/BDR 的职责:
-
DR 负责在网络中作为路由更新的转发者,减少网络中的 LSA(链路状态通告)泛洪。
-
BDR 在 DR 失效时立即接管 DR 的职责,避免选举的延迟。
-
选举示例
假设有三个路由器 R1、R2 和 R3,配置如下:
-
R1:优先级 2,Router ID 为 192.168.1.1
-
R2:优先级 1,Router ID 为 192.168.1.2
-
R3:优先级 1,Router ID 为 192.168.1.3
在这种情况下:
-
R1 的优先级最高,因此它会被选为 DR。
-
R3 和 R2 优先级相同,比较 Router ID,R3 的 Router ID 较高,因此它会被选为 BDR。
最后是 DR/BDR 选举的几个小注意点:
1.只要是多路访问型网络(广播和NBMA),就会选举DR,BDR。
2.不同网段间选DR,BDR,而不是每个OSPF区域为单位选举。
3.DR,BDR,DRothers 说的都是接口,不是设备。
4.设备优先级设置为0不参与选举;DR,BDR不可以抢占;DR down掉后,BDR直升DR,重新选举BDR。
5.OSPF系统启动后,若40s内没有新设备接入就会开始选举,所以为保证DR与BDR的选举不发生意外,建议优先配置想成为DR与BDR的设备。
OSPF 工作过程概述
-
邻居关系的建立:OSPF 使用组播地址在所有启用 OSPF 协议的接口上发送 Hello 包,建立邻居关系并形成邻居表。
-
交换链路状态信息(LSA):建立邻居关系后,路由器互相发送 LSA(链路状态信息),共享路由信息。
-
形成链路状态数据库(LSDB):每台路由器通过接收并存储 LSA,形成其所在区域的 LSDB。
-
SPF 算法计算最佳路径:路由器通过无环的 SPF 算法计算从源到目的的最佳路径,将结果放入路由表中。
这与 EIGRP 类似,不同的是 OSPF 不是直接交换路由表,而是交换 LSA 来逐步建立完整的拓扑信息。
一、OSPF 邻居关系的建立过程
OSPF 的邻居关系有两个层次:
-
邻居(Neighbor):路由器之间交换了 Hello 包,但尚未交换 LSA。
-
邻接(Adjacency):在邻居基础上,路由器间交换了 LSA 并同步了 LSDB。
邻居关系的状态变化:
-
Down:邻居的初始状态,表示路由器未收到任何 Hello 包。
-
Attempt(NBMA 网络特有):表示没有收到 Hello 包,但路由器在周期性发送 Hello 包。如果在 RouterDeadInterval 内没有收到 Hello 包,状态回到 Down。
-
Init:路由器已收到来自邻居的 Hello 包,但自己尚未被邻居识别,还未建立双向通信。
-
2-Way:双向通信已经建立,路由器彼此在对方的 Hello 包中。到达 2-Way 状态意味着成功建立了邻居关系,但尚未建立邻接关系。
-
ExStart:邻接关系建立的第一步,路由器开始互相发送 DD(Database Description)报文以商定主从关系,确认初始 DD 序列号。
-
Exchange:路由器通过 DD 报文互相交换 LSDB 的摘要信息。
-
Loading:路由器通过 LSR(链路状态请求)请求缺失的 LSA,并通过 LSU(链路状态更新)报文发送 LSA。
-
Full:LSDB 完全同步,邻接关系正式建立。
二、OSPF 的路由更新过程
-
触发更新:OSPF 支持拓扑变化时的触发更新,一旦检测到链路变化或新增链路,立即发送更新报文。
-
周期性更新:即使没有拓扑变化,OSPF 每 30 分钟会进行一次更新,确保路由信息的一致性。
-
LSA 处理过程:
-
当路由器收到新的 LSA 时,首先检查该 LSA 是否已存在于本地 LSDB 中。
-
如果该 LSA 是新的,路由器会将其加入 LSDB,回复 LSAck 确认,并继续将该 LSA 泛洪至其他邻居。同时通过 SPF 算法重新计算路由并更新路由表。
-
如果收到的 LSA 已存在,则根据序列号判断是否较新。序列号较大的 LSA 为较新版本:
-
如果本地 LSA 较旧,则更新本地 LSDB 并继续泛洪该 LSA,同时通过 SPF 算法重新计算最佳路径。
-
如果本地 LSA 较新,则将本地较新的 LSA 泛洪给邻居。
-
-
-
泛洪机制
泛洪是 OSPF 更新 LSA 的重要机制。路由器收到 LSA 后会将其从除接收接口外的所有接口发送出去,确保 LSA 在网络中快速传播并保持同步。
这一过程确保了网络中的所有路由器可以通过互相交换信息,快速获得最新的路由信息并更新其路由表。
报文封装和 5 种报文类型
OSPF 报文封装
OSPF 报文封装在 IP 报文中,协议号为 89。
OSPF 报文类型
-
Hello 报文:
-
作用:最常用的 OSPF 报文,用于发现并维护邻居关系。在广播网络(如以太网)和 NBMA 网络中,还用于选举 DR(指定路由器)和 BDR(备份指定路由器)。
-
主要内容:Router ID、邻居列表、Hello 间隔、RouterDeadInterval 等参数。
-
-
DD 报文(Database Description,数据库描述报文):
-
作用:在两台 OSPF 路由器进行 LSDB(链路状态数据库)同步时,使用 DD 报文描述各自的 LSDB 内容。DD 报文类似一个目录清单,包含 LSA(链路状态广告)条目的头部信息。
-
主要内容:LSA 头部信息,如 LSA 类型、链路状态 ID、序列号等,用于快速比较 LSA 的新旧。
-
-
LSR 报文(Link State Request,链路状态请求报文):
-
作用:当两台路由器交换完 DD 报文后,如果一台路由器发现对方的 LSDB 中有自己缺少的 LSA,会发送 LSR 报文,明确请求对方发送这些缺失的 LSA。
-
主要内容:请求的 LSA ID、LSA 类型等,用于指定需要的 LSA。
-
-
LSU 报文(Link State Update,链路状态更新报文):
-
作用:回应 LSR 报文,发送所请求的 LSA 给邻居,以便对方更新其 LSDB。LSU 报文也可用来主动通告网络拓扑变化。
-
主要内容:具体的 LSA 数据,包含链路状态信息、序列号、老化时间等。
-
-
LSAck 报文(Link State Acknowledgment,链路状态确认报文):
-
作用:当路由器收到 LSU 报文后,必须发送 LSAck 报文来确认接收到的 LSA。这确保 LSA 更新过程中的可靠性,防止信息丢失。
-
主要内容:确认的 LSA 头部信息,用于确保对方收到更新。
-
这五种报文通过相互协作,完成 OSPF 的邻居发现、链路状态同步和路由信息传播,确保网络中的路由器能持续更新并同步最新的网络拓扑信息。
OSPF 的 6 种常用 OSPF LSA 类型
-
LSA Type 1:Router LSA:
-
由谁产生:每台路由器为所属区域生成。
-
作用:描述该区域内路由器链路的状态和代价信息。一个边界路由器(ABR)可能为每个连接的区域生成多个 Type 1 LSA。
-
传播范围:仅限于其所在的 OSPF 区域,不跨区域传播。
-
-
LSA Type 2:Network LSA:
-
由谁产生:由指定路由器(DR)生成。
-
作用:包含该网络中所有连接路由器的链路状态和代价信息。只有 DR 能够监测和生成此类信息。
-
适用范围:广播网络或 NBMA 网络中,表示连接在同一网段的所有路由器。
-
-
LSA Type 3:Summary LSA:
-
由谁产生:由区域边界路由器(ABR)生成。
-
作用:汇总并通告从 ABR 到其他区域(尤其是主干区域 area 0)的路由信息。它通常会汇总区域内的路由信息并通告给其他区域,而不是传递详细的路由信息。
-
适用范围:跨区域传播,主要用于连接区域到 area 0 的链路信息。
-
-
LSA Type 4:ASBR Summary LSA:
-
由谁产生:由 ABR 生成。
-
作用:通告 ASBR(自治系统边界路由器)的路由信息。与 LSA Type 3 不同,Type 4 LSA 用于描述从区域到 ASBR 的路由,而不是区域内部的路由。
-
适用范围:用于其他区域了解如何到达 ASBR。
-
-
LSA Type 5:External LSA:
-
由谁产生:由 ASBR 生成。
-
作用:通告自治系统外部的路由信息。Type 5 LSA 会在整个 OSPF 域中传播(除了 Stub 和完全 Stub 区域)。
-
适用范围:用于通告从 OSPF 域外引入的外部路由(如 BGP 引入的路由)。
-
-
LSA Type 7:NSSA LSA:
-
由谁产生:由 ASBR 在 NSSA(不完全存根区域)生成。
-
作用:通告 NSSA 区域内的外部路由信息。Type 7 LSA 在 NSSA 区域内部生成,但可通过 ABR 转换为 Type 5 LSA,以便传播到其他区域。
-
适用范围:仅用于 NSSA 区域,允许外部路由信息的有限传播。
-
这些 LSA 类型通过不同的路由器和区域之间的协作,确保 OSPF 网络中路由信息的精确传播和同步,优化整个网络的路由选择。
配置命令
1. OSPF 基础配置
配置 OSPF 并启用区域
# 进入OSPF配置模式
[Huawei] ospf 1 router-id 1.1.1.1
# 在指定接口上启用OSPF(假设接口为GigabitEthernet0/0/0)
[Huawei-ospf-1] area 0
[Huawei-ospf-1-area-0.0.0.0] network 192.168.1.0 0.0.0.255
# 退出到全局模式
[Huawei-ospf-1] quit
2. 配置 OSPF 的认证
配置简单认证
# 进入接口模式(假设接口为GigabitEthernet0/0/0)
[Huawei] interface GigabitEthernet0/0/0
# 启用OSPF的简单密码认证
[Huawei-GigabitEthernet0/0/0] ospf authentication-mode simple huawei123
配置 MD5 认证
# 进入接口模式
[Huawei] interface GigabitEthernet0/0/0
# 启用OSPF的MD5认证
[Huawei-GigabitEthernet0/0/0] ospf authentication-mode md5 1 huawei123
3. 查看 OSPF 状态
查看 OSPF 基本信息
# 查看OSPF进程、Router ID、区域等信息
[Huawei] display ospf
查看邻居状态
# 查看与OSPF邻居的邻接关系状态
[Huawei] display ospf peer
查看 LSA 信息
# 查看OSPF的LSA信息
[Huawei] display ospf lsdb
4. 配置 OSPF 的 DR/BDR 优先级
配置接口优先级来影响 DR/BDR 选举
# 进入接口模式(假设接口为GigabitEthernet0/0/0)
[Huawei] interface GigabitEthernet0/0/0
# 设置OSPF接口优先级
[Huawei-GigabitEthernet0/0/0] ospf dr-priority 100
5. 配置 OSPF 的区域类型
配置 OSPF 存根区域(Stub Area)
# 进入OSPF进程配置模式
[Huawei] ospf 1
# 将area 1配置为存根区域
[Huawei-ospf-1] area 1
[Huawei-ospf-1-area-0.0.0.1] stub
配置 OSPF 完全存根区域(Totally Stub Area)
# 配置完全存根区域
[Huawei-ospf-1-area-0.0.0.1] stub no-summary
6. 配置 OSPF 静态路由重分发
在 OSPF 中重分发静态路由
# 进入OSPF进程配置模式
[Huawei] ospf 1
# 重分发静态路由到OSPF
[Huawei-ospf-1] import-route static
完。
- 感谢你赐予我前进的力量