OSPF路由协议(单区域)
1. RIP的不足
(1)路径选择不优:仅以跳数评估路由,易选非最优路径(如带宽窄但跳数少的链路 )。
(2)网络规模受限:最大跳数 16,网络直径超 16 跳则不可达,限制网络尺度。
(3)收敛速度慢:依赖 30 秒更新、180 秒失效、240 秒清除计时器,拓扑变化后需久才能稳定。
(4)资源浪费严重:定期发送全路由表更新,路由多(如千条 )时,占用大量带宽(如单方向 160Kb )。
2. OSPF简介
SPF— —最短路径优先
3. OSFP基本概念
3.1 Router ID(RID,路由器ID)
3.2 LS(链路状态)
3.3 LSA(链路状态通告)
3.4 LSDB(链路状态数据库)
3.5 SPF(最短路径优先)
3.6 OSPF网络类型
MA(Multi-Access)多路访问网络有两种类型:广播型多路访问网络(BMA)及非广播型多路访问网络(NBMA)。以太网(Ethernet)是一种典型的广播型多路访问网络。
3.6.1 维持邻居关系(点到点)
3.6.2 DR(指定路由器)/ BDR(备份指定路由器)的选举(广播多路访问)
DR/BDR的选举原则:
在上图拓扑图中,有4个广播域,在选举DR、BDR的时候要在广播域里面选举,并且有几个广播域,就有几个DR和BDR。
问题1:点到点(广域网)与广播多路访问(局域网)有什么区别?
A:是否有第三方参与。
问题2:点到点网络中,Hello报文的发送周期是多久?超时时间是多久?
A:发送周期是10s,超时时间是4个周期=40s。
问题3:广播多路访问中,Hello报文的发送周期是多久?超时时间是多久?
A:发生周期是10s,超时时间是4个周期=40s。
注意:网络类型可以手动修改,但是一条链路上的网络类型要一致。
3.7 OSPF报文类型与封装(5个报文)
3.8 邻居状态变换(Down、Init、2-Way、ExStart、Exchange、Full、Loading)
1、 Down(没有发现任何的 OSPF 邻居):开启了 OSPF 协议,但是没有收到邻居发送的 Hello 报文。
2、 Init(代表自身发现了邻居的存在,但是邻居并没有发现自身的存在):收到了邻居的 Hello 报文,但是没有在 Hello 报文中看到自身的Router ID。
3、 Two-Way:收到了邻居的 Hello 报文,同时在 Hello 报文看到自身的 Router ID。
4、 Exstart(预开始):邻居之间发送 DD 报文(不携带任何 LSA 的摘要信息),进行主从协商,确定序列号,为了保证后续可靠的交互DD 报文做准备 • 主从协商的规则:比较路由器的 Router ID,大为主,小的为从。
5、 Exchange(更改):从向主发送一个带有 LSA 摘要信息的 DD 报文,主设备收到从的 DD 报文之后回复一个 DD 报文(里面携带了LSA 的摘要信息)同时序列号+1 告诉从你的 DD 报文我收到。
6、 Loading(加载):收到M=0的DD报文,会进入loading状态,继续向对方发送 LSR 报文进行请求本地 LSDB 缺失的LSA,对方收到 LSR 报文之后,回复一个 LSU 报文里面携带LSA的详细信息,本端收到 LSU 报文之后回复 LSAcK,针对LSU 里面的 LSA 进行确认。
7、Full:本地 LSDB 没有任何 LSA 的缺失,邻接关系建立。
OSPF完成邻接关系的建立有四个步骤,建立邻居关系、协商主/从、交互LSDB信息,同步LSDB。
第一阶段(Down、Init、2-way):建立邻居关系
解释:
首先,路由器(RTA、RTB)刚启动 OSPF,或接口未激活、链路断开时,处于 DOWN 状态 ,无邻居信息。
RTA 发送 Hello 报文(携带自身 Router ID:1.1.1.1,及 “Neighbors seen = 0” ),RTB 收到后,在邻居表标记 RTA 状态为 Init(仅单向发现邻居 )。
Hello 报文作用:周期性发送(默认 10 秒),用于发现邻居、维持邻接,还包含网络掩码、Hello 时间、DR/BDR 信息。
由于,RTB收到RTA发送的Hello报文后,知道了RTA的RID和地址,因此可以比较RID得出谁是DR(谁大谁DR,RTB大,RTB为DR)。
RTB 回复 Hello 报文(携带 Router ID:2.2.2.2,及 “Neighbors seen = RTA” ),RTA 收到后,添加邻居表,并且邻居表中 RTB 状态变为 Two - way(双向确认邻居 )。
RTA 回复 Hello 报文(携带 Router ID:1.1.1.1,及 “Neighbors seen = RTB” ),RTB收到后,将邻居表中RTA状态变为 Two - way(双向确认邻居 )。
第二阶段(Exstart、Exchange):协商主/从、交互LSDB信息
解释:
1. ExStart阶段(步骤① - ②:主从协商)
- 目标:协商 主从关系(Master/Slave),确定 DD 报文序列号(Seq)的同步规则。
- 步骤 ①(RTA → RTB):
- RTA 进入 ExStart 状态,发送 DD 报文:
Seq=552A
:初始序列号(随机值,仅本地意义)。I(Initialize)
:标记为初始化报文,用于启动主从协商。M(More)
:表示后续还有更多 DD 报文。MS(Master/Slave)
:声明自己尝试成为 Master(需协商确认)。- 步骤 ②(RTB → RTA):
- RTB 收到后,比较 Router ID(RTB:2.2.2.2 > RTA:1.1.1.1),成为 Master,回复 DD 报文:
Seq=5528
:Master 确定的起始序列号(Slave 需按此同步)。I, M, MS
:同样标记初始化、更多报文,且声明 Master 身份。- RTA 接受主从关系,进入 ExStart→Exchange 过渡状态;RTB 仍为 ExStart 状态。
2. Exchange阶段(步骤③ - ⑤:LSDB摘要同步)
- 目标:交换 链路状态数据库(LSDB)摘要(仅传 LSA 头部,不包含完整内容),快速对比双方 LSDB 差异。
- 步骤 ③(RTA → RTB):
- RTA 进入 Exchange 状态,发送 DD 报文:
Seq=5528
:严格跟随 Master(RTB)的序列号,确认同步。- 无
I, MS
:已完成主从协商,无需重复声明;M
仍为 1(还有内容要发)。- RTB 收到后,进入 ExStart→Exchange 过渡状态。
- 步骤 ④(RTB → RTA):
- RTB 发送 DD 报文:
Seq=5529
:Master 递增序列号(确保有序传输)。MS
:重申 Master 身份;M=1
(还有更多摘要)。- RTA 收到后,确认序列号同步,保持 Exchange 状态。
- 步骤 ⑤(RTA → RTB):
- RTA 回复 DD 报文:
Seq=5529
:跟随 Master 序列号,确认接收。M=0
:表示本批次摘要已发完(后续无更多 DD 报文)。- RTB 收到后,
M
标记根据自身情况判断:若还有更多摘要,M=1
;此处因已同步,M
最终会置 0。- RTA 进入 Exchange→Loading 过渡状态(准备请求缺失 LSA);RTB 进入 Exchange→Full 状态(摘要同步完成)。
第三阶段(Loading、Full):同步LSDB
解释:
1. Loading 状态(步骤 ① :请求缺失 LSA)
- 触发条件:Exchange 阶段交换完 LSDB 摘要后,RTA 发现自身 LSDB 缺少 RTB 有的 LSA(通过对比摘要发现差异 )。
- 动作:RTA 进入 Loading 状态,向 RTB 发送 LS Request 报文,明确请求缺失的 LSA(仅列 LSA 头部,如类型、ID、通告者 )。
2. LS Update 响应(步骤 ② :发送完整 LSA)
- RTB 状态:RTB 已完成 LSDB 摘要同步,处于 Full 状态(无需再交换摘要 )。
- 动作:RTB 收到 LS Request 后,用 LS Update 报文 回复,包含 RTA 请求的完整 LSA 内容(如网络掩码、度量值等 )。
3. LS Ack 确认(步骤 ③ :确认接收完成)
- RTA 状态:RTA 收到 LS Update 后,验证 LSA 完整性,进入 Loading→Full 过渡状态。 动作:RTA 发送 LS Ack 报文,确认已接收并同步 LSA;RTB 收到 Ack 后,维持 Full 状态。
4. Full 状态(邻接关系稳定)
当双方 LSDB 完全一致,RTA 和 RTB 均进入 Full 状态,表示:
- 链路状态数据库同步完成。
- 邻接关系稳定,可基于 LSDB 运行 SPF 算法计算路由。
邻居关系无法建立原因总结
4. OSPF的基本工作原理(4张表+5个报文+6类LSA+7个状态)
OSPF的四张表
邻居表:
- 定义:记录了与本地路由器建立了邻接关系的邻居路由器信息。
- 内容:包含邻居路由器的 Router ID、接口 IP 地址、邻居状态(如 Full、Init 等)、Hello 间隔、Dead 间隔等。
- 作用:用于维护邻居关系,确保与相邻路由器之间的通信正常。通过定期发送和接收 Hello 报文来发现和维护邻居关系,当邻居状态变为 Full 时,表示双方已经成功建立邻接关系,可以进行链路状态信息的交换。
- 生成过程:本地路由器启动 OSPF 协议后,会通过启用 OSPF 的接口向外发送 Hello 报文,收到相邻路由器回应的 Hello 报文且满足条件(如区域 ID 匹配、认证匹配等)后,就会将邻居信息添加到邻居表中。
LSDB(链路状态数据库):
- 定义:存储了本区域内所有路由器的链路状态信息,是对整个区域网络拓扑的完整描述。
- 内容:包含各种类型的链路状态通告(LSA,Link State Advertisement),如 Router LSA(描述路由器自身接口信息)、Network LSA(描述广播型网络信息)等。每条 LSA 都包含了链路的状态、开销、连接的邻居等详细信息。
- 作用:为 SPF(最短路径优先)算法提供计算依据。路由器根据 LSDB 中的信息,以自身为根节点,通过 SPF 算法计算出到其他所有节点的最短路径树,进而生成 OSPF 路由表。
- 生成过程:在邻居关系建立后,路由器通过链路状态更新报文(LSU,Link State Update)向邻居发送自己的 LSA,同时接收邻居发送的 LSA,将这些 LSA 存储到 LSDB 中,并通过链路状态确认报文(LSAck,Link State Acknowledgment)进行确认,最终确保所有路由器的 LSDB 保持一致。
OSPF路由表:
- 定义:是根据 LSDB 通过 SPF 算法计算得出的,包含了通过 OSPF 协议学习到的路由信息。
- 内容:目标网络地址、子网掩码、下一跳地址、出接口、度量值(Cost)等。
- 作用:指导路由器转发目的地址属于 OSPF 路由表中目标网络的数据包。路由器根据 OSPF 路由表中的信息,选择最优的路径将数据包转发出去。
- 生成过程:路由器在 LSDB 构建完成后,运行 SPF 算法,计算出到各个目标网络的最短路径,将这些路径信息添加到 OSPF 路由表中。
全局路由表:
- 定义:也叫主路由表,是路由器中用于指导数据包转发的最终路由表,包含了路由器通过各种路由协议(如 OSPF、RIP、BGP 等)以及静态路由配置学习到的所有路由信息。
- 内容:目标网络地址、子网掩码、下一跳地址、出接口、管理距离(Administrative Distance,用于比较不同路由协议的优先级)、度量值等。
- 作用:当数据包到达路由器时,路由器会根据全局路由表中的信息,选择最佳的路径将数据包转发到目的网络。如果有多条路由协议学习到相同的目标网络,路由器会根据管理距离和度量值来选择最优的路由。
- 生成过程:路由器将通过不同路由协议(如 OSPF 计算出的 OSPF 路由表、RIP 计算出的 RIP 路由表等)和静态配置获取的路由信息进行整合,根据管理距离和度量值进行优选后,将最优的路由信息添加到全局路由表中。
邻居表用于维护邻居关系,LSDB 用于存储网络拓扑信息,OSPF 路由表是基于 LSDB 计算出的 OSPF 路由信息,全局路由表则是综合了所有路由来源的最终转发依据,四张表在 OSPF 协议运行和数据包转发过程中各自承担着不同的重要角色。
5. LSA报文头部
1. LS age(链路状态年龄,2 字节)
- 作用:记录 LSA 从产生到当前的时间(秒),范围 0 - 3600(1 小时 )。
- 机制: 初始为 0(新生成 LSA ),每经过 1 秒加 1; 若 LSA 老化到 3600 秒,会被标记为 “过期” 并删除,触发网络重新同步。
2. Options(选项,1 字节)
- 作用:标记 LSA 支持的 OSPF 功能(如是否支持 NSSA、IPv6 等 )。
- 常见标记: E(External):表示是否传播外部路由(ASBR 相关 ); N/P(NSSA):与非完全 Stub 区域(NSSA)功能相关。
3. LS type(链路状态类型,1 字节)
作用:区分 LSA 的类型,决定其内容和传播范围,常见类型:
- Type 1(路由器 LSA):由路由器生成,描述自身直连链路;
- Type 2(网络 LSA):由 DR 生成,描述广播型网络(如以太网)的链路;
- Type 3(网络汇总 LSA):由 ABR 生成,描述区域间路由;
- Type 4(ASBR汇总 LSA):由 ABR 生成,告知其他区域如何到达 ASBR,辅助跨区域找外部路由引入点。
- Type 5(外部 LSA):由 ASBR 生成,描述 AS 外部路由(如引入静态路由 )。
- Type 7 (NSSA外部 LSA):由 NSSA(非完全末梢区域)区域内的 ASBR 产生,描述本区域引入的外部路由,ABR 会转成 Type 5 向外传播。
4. Link State ID(链路状态 ID,4 字节)
- 作用:唯一标识 LSA 的 “主题”,含义随 LS type 变化。
5. Advertising Router(通告路由器,4 字节)
- 作用:记录生成并发布该 LSA 的路由器的 Router ID(标识 LSA 来源 )。
- 意义:用于判断 LSA 可靠性(如防环、优先选择高优先级通告者 )。
6. LS sequence number(链路状态序列号,4 字节)
- 作用:保证 LSA 更新的有序性和唯一性,范围 0x80000001 - 0x7FFFFFFF(避免 0x80000000,因代表 “空” )。
- 机制: 新 LSA 序列号比旧的大(如从 0x80000001 递增到 0x80000002 ); 若收到同序列号 LSA,忽略;若收到更小序列号,拒绝并回复最新 LSA。
7. LS checksum(链路状态校验和,2 字节)
- 作用:对 LSA 内容做 CRC 校验,检测传输过程中的数据损坏。
- 机制:每更新一次 LSA(内容或序列号变化 ),校验和重新计算。
8. Length(长度,2 字节)
- 作用:记录 LSA 头部 + 数据部分的总字节数(方便接收方解析 )。
6. 泛洪新LSA
当有新的LSA生成或收到时,这条新的LSA应当被泛洪。
1. 当RTA有新的LSA要泛洪时,RTA向RTB发送一个LS Update报文,在这个报文里包含这条LSA。2. 收到新的LSA以后,RTB向RTA泛洪一个LS Ack报文进行确认。

7. 广播网络中LSDB更新
在广播和NBMA网络中,链路状态发生变化时,主要是通过DR路由器发送更新报文。
8. OSPF LSA 洪泛与老化
9. OSPF 协议分区域管理及路由器角色(骨干区域[区域0]和其他区域)
其他非骨干区域只能接骨干区域(区域0)。
路由信息的传递只能在骨干区域和其他区域内传递。
运行了同一个路由协议的路由信息和,就叫一个自治系统。
1、区域内部路由器:所有接口属于同一个区域。
2、骨干路由器:至少有一个接口接到了区域0。
3、区域边界路由器ABR:至少一个接口接在了骨干区域,同时又有其他接口接了其他区域。
4、自治系统边界路由器ASBR:至少一个接口接在当前OSPF的任意区域,另外至少有一个接口接在了其他的自治系统。
10. OSPF 区域号
- OSPF路由域:运行OSPF路由协议的网络。
- OSPF区域:OSPF是一种支持划分多区域的协议。
- Area ID:32位,用数字或IP地址表示。