20.OSPF路由协议·单区域
OSPF–单区域
课程目标
了解为什么要用OSPF?
掌握OSPF路由协议基本原理
熟练配置单区域OSPF
一 RIP的不足
1 以跳数评估的路由并非最优路径
- 如果RTA选择S0/0传输,传输需时会大大缩短为3s
2 最大跳数16导致网络尺度小
- RIP协议限制网络直径不能超过16跳
3 收敛速度慢
RIP定期路由更新
更新计时器:定期路由更新的时间间隔,默认30秒
失效计时器:失效计时器内未收到更新,路由失效,默认180秒
清除计时器:清除计时器内未收到更新,路由清除,默认240秒
4 更新发送全部路由表浪费网络资源
- 假设RTA和RTB各有1000条路由,每条路由需占用20个字节
- 每次路由更新时,RTA和RTB之间单向需消耗至少160Kb的带宽资源
二 OSPF简介
1 OSPF的概念
OSPF英文全称Open Shortest Path First (开放式最短路径优先)
OSPF是IETF开发的一种链路状态路由协议,使用基于带宽的度量值
OSPF采用SPF算法计算路由,从算法上保证了无路由环路
OSPF通过邻居关系维护路由,避免了定期更新对带宽的消耗
OSPF路由更新效率高,网络收敛快,适用于大中型网络
OSPF报文封装于IP,协议号89,组播地址
224.0.0.5
与224.0.0.6
2 OSPF的组成
1.四张表(核心数据存储结构)
OSPF 通过四张表实现路由信息的收集、计算和转发,四者分工明确且相互关联:
OSPF 邻居表(Neighbor Table)
作用
- 记录与本地路由器建立邻居关系的其他路由器信息,是 OSPF 通信的基础
内容
- 包括邻居路由器的 Router ID、接口 IP、邻居状态、hello 报文发送间隔等
举例
- 若路由器 A 与路由器 B 通过以太网相连,A 的邻居表中会显示 B 的 Router ID、B 连接 A 的接口 IP,以及当前邻居状态
链路状态数据库(LSDB,对应 DBD 相关存储)
作用
- 存储全网的链路状态信息(以 LSA 为单位),是 OSPF 计算路由的 “原始数据”
- 同一区域内的所有路由器 LSDB 完全一致
内容
- 包含各类 LSA(如路由器 LSA、网络 LSA 等),记录了网络拓扑(如链路带宽、接口 IP、路由器连接关系)
OSPF 路由表(OSPF Routing Table)
- 作用
- 基于 LSDB,通过 SPF(最短路径优先)算法计算出的、针对 OSPF 网络的最优路由
- 内容
- 包括目的网络、掩码、下一跳路由器、出接口、度量值(Cost,与链路带宽相关)等
- 仅包含 OSPF 协议发现的路由
全局路由表(Routing Table)
作用
- 整合所有路由协议(如 OSPF、RIP、静态路由)发现的路由,最终用于数据包转发的 “总路由表”
内容
- 从各协议路由表中选择最优路由(按路由优先级和度量值),包含目的网络、出接口、下一跳等转发关键信息
2.五种报文(OSPF 通信的 “语言”)
OSPF 通过五种报文完成邻居建立、LSA 交换和路由计算,所有报文均基于 IP 协议(协议号 89)发送:
Hello 报文
作用
- 发现和维护邻居关系,周期性发送
- 如广播网络中默认 10 秒
- 点对点链路中默认 30 秒
关键信息
- 包含本地 Router ID、Hello 间隔、死亡时间(默认 4 倍 Hello 间隔)、区域 ID、掩码等
- 只有参数匹配的路由器才能建立邻居
DBD(数据库描述)报文
作用
- 交换 LSDB 的 “目录”(LSA 头部信息),用于同步双方 LSDB
- 类似 “图书目录”,告知对方自己有哪些 LSA。
特点
- 包含 LSA 的摘要信息(如 LSA 类型、链路状态 ID、通告路由器、序列号),不包含完整 LSA 内容
LSR(链路状态请求)报文
作用
- 向邻居请求本地缺少或更新的 LSA
- 当通过 DBD 发现对方有自己没有的 LSA 时,发送 LSR 请求
内容
- 指定需要请求的 LSA
- 通过 LSA 类型、链路状态 ID、通告路由器标识
LSU(链路状态更新)报文
作用
- 响应 LSR 请求,或主动发送新的 LSA(如链路状态变化时),是传递 LSA 完整内容的核心报文
特点
- 一个 LSU 可包含多个 LSA,发送后需要对方回复 LSAck 确认
LSAck(链路状态应答)报文
作用
- 确认收到 LSU 报文,保证 LSA 传输的可靠性。
内容
- 包含已接收 LSA 的头部信息,告知对方 “已收到指定 LSA”
3.六类核心 LSA(链路状态信息的 “载体”)
LSA(链路状态通告)是 OSPF 描述网络拓扑的基本单元,不同类型 LSA 用于传递不同场景的信息,常见核心类型有 6 类
LSA 类型 名称 作用范围 主要内容 1 类 路由器 LSA(Router LSA) 仅本区域 描述路由器自身接口的链路状态(如接口 IP、Cost、连接的网络) 2 类 网络 LSA(Network LSA) 仅本区域 由 DR(指定路由器)生成,描述广播 / NBMA 网络中所有连接的路由器 3 类 网络汇总 LSA(Summary LSA) 区域间(通过 ABR) 由 ABR(区域边界路由器)生成,将本区域路由汇总后通告到其他区域 4 类 ASBR 汇总 LSA(ASBR Summary LSA) 区域间(通过 ABR) 描述到 ASBR(自治系统边界路由器)的路由,用于指引访问外部路由 5 类 AS 外部 LSA(AS External LSA) 全网(除 Stub 区域) 由 ASBR 生成,描述自治系统外部的路由(如外部网络、其他 AS 的路由) 7 类 NSSA 外部 LSA(NSSA External LSA) 仅 NSSA 区域内 在 NSSA(非完全 Stub 区域)中替代 5 类 LSA,描述外部路由,需经 ABR 转换为 3 类 LSA 传递到其他区域
4 七个状态(邻居关系建立的 “生命周期”)
OSPF 邻居从发现到完全邻接需经历七个状态,状态转换反映了邻居关系的进展:
Down(down)
- 初始状态,未收到任何 Hello 报文,无邻居信息
Init(初始化)
- 收到邻居的 Hello 报文,但对方 Hello 中未包含本地 Router ID(未被对方发现)
2-Way(双向通信)
- 双方互相在对方 Hello 报文中发现自己的 Router ID,确认 “双向可达”
- 此时若为广播 / NBMA 网络,会选举 DR/BDR(指定路由器 / 备份指定路由器)
ExStart(交换开始)
- 准备交换 DBD 报文,双方协商主从关系(主路由器控制报文交互节奏),确定初始序列号
Exchange(交换)
- 发送 DBD 报文,交换 LSDB 的 LSA 摘要,双方了解对方的 LSDB 内容
Loading(加载)
- 根据 DBD 对比结果,发送 LSR 请求缺少的 LSA,接收 LSU 并回复 LSAck
- 此阶段补充完整 LSDB
Full(完全邻接)
- 双方 LSDB 完全同步,邻居关系建立完成
- 此时可基于 LSDB 计算路由
Attempt(尝试)-- 不常用
- 适用于NBMA中:帧中继
三 OSPF的基本工作原理
1 OSPF协议模型
OSPF基本协议模型
OSPF四张表
2 OSPF基本概念
1.Router ID
一台路由器如果要运行OSPF协议,则必须存在Router ID(RID)
RID是一个32比特无符号整数,可以在一个自治系统中唯一的标识一台路由器
RID可以手工配置,也可以自动生成
如果没有通过命令指定RID,将按照如下顺序自动生成一个RID:
如果当前设备配置了Loopback接口,将选取所Loopback接口上数值最大的IP地址作为RID
如果当前设备没有配置Loopback接口,将选取它所有已经配置IP地址且链路UP的接口上数值最大的IP地址作为RID
Router ID建议手工配置–默认生成最大的IP地址
Router ID选取示例
2.LS
链路状态(LS):路由器周边的链路的状态
直连网段状态:通过接口网段和接口状态感知
- 描述直连网段:(网段,掩码,接口开销)
直连拓扑状态:通过OSPF邻居和邻居状态感知
- 描述直连拓扑:(邻居RouterID,连接接口,接口开销)
接口开销:OSPF参考带宽/接口带宽
OSPF参考带宽默认为100Mbps
Loopback接口的开销默认为1
3.LSA
链路状态通告(LSA)
按一定格式封装后的链路状态信息。
LSA 1:路由器链路状态通告
- 每台路由器都会发起自己的LSA 1
LSA 2:传送网络链路状态通告
- 一个链路状态报文可以携带多个链路状态更新信息
3.LSDB
链路状态数据库(LSDB)
每台OSPF路由器都有一个LSDB,用于存储LSA
同一个区域中的OSPF路由器的LSDB一致
LSA封装在LSU报文中,在区域内洪泛,最终达到区域内LSDB一致
LSA在洪泛过程中内容保持不变
5.SPF
SPF计算
以自己LSA 1为根,进行SPF计算
各OSPF路由器单独进行SPF计算,互不影响
SPF开销计算
OSPF路由开销计算
- 以自己为根,到目标网段的出接口开销和
OSPF的度量值为cost,也叫开销,是以链路的接口带宽为依据
计算方法为10的8次方除以带宽
6 OSPF网络类型
Broadcast广播多路访问:以太网接口
NBMA(Non-Broadcast Multi-Access,非广播多点访问网络):帧中继接口*
P2MP(Point-to-MultiPoint,点到多点)
P2P(Point-to-Point,点到点):PPP HDLC接口
- 接口的网络类型可以通过命令修改,但是两个端口网络类型要一致
- 处于同一个广播域内的网络接口类型要一致
- 路由器/三层交换机是根据接口类型来确定网络类型
7 OSPF报文类型与封装
OSPF报文类型
- OSPF报文直接封装在IP报文中,协议号为89
OSPF报文的目的地址
8 DR/BDR的选举(广播多路访问)
- 采用DR/BDR建立邻接关系,可以降低需要维护的邻接关系数量
DR/BDR选举在广播多路访问中的广播域中,几个广播域几个DR/BDR
DR/BDR是相对于路由器接口的而不是路由器,一个路由器可以有多个选举状态
DR/BDR的选举原则
首先比较Hello报文中携带的优先级
优先级最高的被选举为DR,优先级次高的被选举为BDR
优先级为0的不参与选举
优先级一致的情况下,比较Router ID
- Router ID越大越优先
保持稳定原则
- 当DR/BDR已经选举完毕,就算一台具有更高优先级的路由器变为有效,也不会替换该网段中已经选举的DR/BDR成为新的DR/BDR
DR/BDR的选举示例
- RTE后来加入网络,虽然它的Router ID比原有的DRBDR都高,但是出于稳定性的考虑,只能成为DRother路由器
当DR失效时,BDR立刻成为新的DR
DRother路由器进行竞争,Router ID高的成为新的BDR
只有当DR和BDR都失效时,RTE才会重新选举为DR
9 邻居状态变换
- DR/BDR选举 发现邻居之后,发送链路状态同步数据库之前
- 2-way之后路由器会判断接口的网络类型,手动配置的接口类型优于默认
- 同一时间 路由器 的状态可以不一致,可以根据报文改变
- DOther之间不建立邻接关系,不同步数据库,状态停留2-way
状态背景:ExStart
- 在 OSPF 邻居关系中,ExStart 状态是链路状态数据库同步的初始阶段
- 两台路由器(RTA 和 RTB)通过 Hello 报文建立双向通信(2-Way 状态)后,进入 ExStart 状态,准备交换数据库描述(DD)报文
DD 报文
- DD 报文:用于描述链路状态数据库(LSDB)的摘要信息,包含 LSA(链路状态通告)的头部信息(如类型、ID、通告路由器、序列号等)
- 关键标志位
I
(Initial):表示这是初始 DD 报文M
(More):表示后续还有更多 DD 报文MS
(Master/Slave):用于选举主从关系(Master 路由器控制报文交换节奏)步骤详解
步骤 1:RTA 发送初始 DD 报文
- RTA 向 RTB 发送 DD 报文,内容包括:
Seq=552A
:初始序列号(随机生成)。I, M, MS
:表示这是初始报文,后续还有更多报文,并声明自己为 Master。- RTB 收到此报文后,确认进入 ExStart 状态。
步骤 2:RTB 回复 DD 报文
- RTB 生成新的 DD 报文,内容包括:
Seq=5528
:新的序列号(通常比 RTA 的序列号小,因为 RTB 可能未完全准备好)。I, M, MS
:同样声明自己为 Master。- RTA 收到此报文后,比较序列号,发现 RTB 的序列号更小,因此确认 RTB 为 Master(主路由器),自己为 Slave(从路由器)。
步骤 3:RTA 确认 Master 并发送 DD 报文
- RTA 确认 RTB 为 Master 后,使用 RTB 的序列号(5528)发送 DD 报文,表示接受 Master 的控制。
- 此时,RTA 的状态从 ExStart 转换为 Exchange。
步骤 4:RTB 发送新的 DD 报文
- RTB 生成新的 DD 报文,内容包括:
Seq=5529
:递增的序列号(Master 控制序列号)。MS
:声明自己为 Master。- RTA 收到此报文后,确认 RTB 的 Master 角色,并继续同步数据库。
步骤 5:RTA 确认并发送 DD 报文
- RTA 使用 RTB 的序列号(5529)发送 DD 报文,表示已收到并确认。
- 此时,RTB 的状态从 Exchange 转换为 Full(完全邻接),RTA 的状态从 Exchange 转换为 Loading(加载 LSA)
核心原理
- 主从选举(Master/Slave)
- 通过 DD 报文中的 MS 标志位选举 Master 路由器,Master 控制序列号的生成和同步节奏
- 序列号同步
- Master 生成递增的序列号,Slave 使用 Master 的序列号回复,确保 DD 报文的有序性和可靠性
- 数据库同步
- 通过交换 DD 报文的摘要信息,路由器能够发现对方数据库中缺少的 LSA,并在后续步骤中通过 LSR(链路状态请求)和 LSU(链路状态更新)报文请求和发送完整的 LSA
- OSPF协议包具备超时重传机制
- OSPF协议包具备序列号,对重复包不做处理
10 LSA报文格式
字段 长度(位) 含义 LS age 16 LSA 的老化时间(秒),初始为 0,最大为 3600 秒(1 小时) Options 8 包含一些可选标志位,用于支持特殊功能(如 NSSA、多播 OSPF 等) LS type 8 LSA 的类型(如 1 类、2 类、3 类等),决定 LSA 的格式和用途 Link State ID 32 LSA 的标识符,具体含义取决于 LSA 类型(如路由器 ID、网络地址等) Advertising Router 32 生成此 LSA 的路由器的 Router ID LS sequence number 32 LSA 的序列号,用于检测 LSA 的新旧(序列号越大,LSA 越新) LS checksum 16 LSA 的校验和,用于检测数据完整性 Length 16 LSA 的总长度(字节)
- 只有 Hello 报文不需要序列号,其余四种报文都依赖序列号机制确保可靠性
- 需要重传的报文:DD、LSR、LSU 报文在发送后会启动重传定时器,若未收到确认(如 LSAck),则会重传
- 不需要重传的报文:Hello 报文是周期性发送的,丢失的 Hello 报文会被后续的 Hello 报文自动弥补,因此不需要重传
包含在各种报文中的LSA信息
3 LSA洪泛与更新
泛洪新LSA
当有新的LSA生成或收到时,这条新的LSA应当被泛洪
泛洪新的LSA时,只需要使用LS Update报文和LS Ack报文
当RTA有新的LSA要泛洪时,RTA向RTB发送一个LS Update报文,在这个报文里包含这条LSA
收到新的LSA以后,RTB向RTA泛洪一个LS Ack报文进行确认
当在两个处于完全邻接状态(邻居状态为Full)的路由器之间泛洪新的LSA时,邻居状态不受影响
广播网络中LSDB更新
- 在广播和NBMA网络中,链路状态发生变化时,主要是通过DR路由器发送更新报文
OSPF LSA洪泛与老化
OSPF LSA老化
LSA不老化的缺点:当网络长时间中断,故障网络中的设备发起的LSA长时间无效,但仍然存储在LSDB中,浪费设备内存
OSPF LSA采用递增老化
LSA自发起时开始计时,到达最大老化时间后,从LSDB中清除
OSPF最大老化时间3600秒,LSA头部的老化时间字段用于计时
OSPF LSA老化与全网刷新
正常OSPF网络的路由维护
LSA老化时间到达最大老化时间的一半(30分钟),发起路由器随机等待一段时间后重新发起该LSA,然后洪泛,刷新所有路由器LSDB
新发起的LSA序列号加1,老化时间为0
LSA在整个洪泛过程中,除老化时间外,其余各字段都保持不变
- 半小时更新一次,一小时未更新则删除
四 OSPF区域划分
OSPF协议分区域管理及路由器角色
OSPF区域号
OSPF路由域:运行OSPF路由协议的网络
OSPF区域:OSPF是一种支持划分多区域的协议
- Area ID:32位,用数字或IP地址表示
OSPF协议区域LSA发布
五 OSPF单区域配置案例
OSPF基本配置命令
router ospf <进程号>:启动OSPF进程,进程号本路由器有效
router-id < router-id >:手动指定router-id
network <IP地址> <通配符> area <区域号>
落在通配范围内的接口启动OSPF,并放入<区域号>指定的区域中
发现并描述直连网段至自己的LSA 1
在该接口上发送Hello报文探测邻居
通配符
按位通配,位为0表示这一位不能变,位为1表示这一位可变
一般将<IP地址>写成接口的IP网段,<通配符>写成接口掩码的反码,那么接口IP刚好落在该通配范围内
network + 被动接口
发现并描述直连网段至自己的LSA 1
只收不发Hello报文,无法形成邻居
因无法建邻居,不能从该接口学习路由,也不能向该接口通告路由
OSPF基本配置
单区域OSPF
单区域OSPF配置
单区域OSPF查看