🎯 课程摘要:OSPF(开放最短路径优先) 是为克服 RIP(路由信息协议) 缺点而于 1989 年开发的内部网关协议,基于链路状态并采用 Dijkstra(迪杰斯特拉) 最短路径算法,从算法上保证不会产生路由环路。OSPF(开放最短路径优先) 不限制网络规模,更新效率高、收敛速度快,并通过划分区域支持大型自治系统。
- 名称含义:
- 开放:协议不受某一厂商控制,而是公开发表。
- 最短路径优先:使用 Dijkstra(迪杰斯特拉) 提出的最短路径算法。
- ⚠️ 注意:OSPF(开放最短路径优先) 只是协议名称,并不表示其他协议不是最短路径优先;AS(自治系统) 内部各种路由选择协议(如 RIP) 都要寻找最短路径。
- 算法基础:基于链路状态(而非距离向量),采用最短路径算法计算路由,从算法上保证不会产生路由环路。
- 优点:不限制网络规模,更新效率高,收敛速度快。
- 概念定义:链路状态是指本路由器都和哪些路由器相连,以及相应链路的"代价"。
- 代价含义:用来表示费用、距离、时延、带宽等,由网络管理人员决定。
- 思科代价计算:100 Mbit/s ÷ 链路带宽;结果小于 1 仍记为 1,大于 1 且有小数的舍去小数。
| 链路带宽 | 100M ÷ 带宽 | 代价 |
|---|
| 100 Mbit/s | 1 | 1 |
| 1 Gbit/s | 0.1(<1) | 1 |
- 问候分组:OSPF 相邻路由器之间通过交互问候分组建立和维护邻居关系。
- 封装方式:问候分组被封装在 IP 数据报中,发往多播地址 224.0.0.5。
- 协议号:IP 数据报首部协议号字段取值为 89,表明数据载荷为 OSPF 分组。
- ⚠️ 与 RIP 封装对比:
- OSPF 分组直接使用网际层 IP 数据报封装 → 属于网际层协议
- RIP 报文需使用运输层 UDP 封装 → 属于应用层协议
- 但两者核心功能(路由选择)均属于网际层
- 判活机制:问候分组发送周期为 10 秒;40 秒未收到来自邻居的问候分组,则认为邻居不可达。
- 邻居表:每个路由器建立一张邻居表,条目包含邻居 ID、接口、判活倒计时。
- LSA(链路状态通告) 包含两类信息:
- 直连网络的链路状态信息
- 邻居路由器的链路状态信息
- LSU(链路状态更新分组):LSA 被封装在 LSU 中,采用可靠洪泛法发送。
- 洪泛法要点:路由器向自己所有邻居发送 LSU;收到该分组的路由器又将其转发给自己所有邻居(除上游路由器外),以此类推。
- 可靠:收到 LSU 后要发送确认;收到重复的更新分组无需再次转发,但要发送一次确认。
- LSDB(链路状态数据库):每个 OSPF 路由器都有一个 LSDB,用于存储 LSA。通过各路由器洪泛发送 LSU,各路由器的 LSDB 最终将达到一致。
- 最短路径优先计算过程:
- 各路由器洪泛发送封装有各自 LSA 的 LSU
- 各路由器得出相同的 LSDB
- 由 LSDB 得出带权有向图
- 对带权有向图应用 Dijkstra(迪杰斯特拉) 最短路径算法
- 得出以各路由器为根的最短路径,构建各自路由表
| 分组类型 | 作用 |
|---|
| 问候分组 | 发现并维护邻居路由器的可达性 |
| 数据库描述分组 | 向邻居给出自己 LSDB 中所有链路状态项目的摘要信息 |
| 链路状态请求分组 | 向邻居请求发送某些链路状态项目的详细信息 |
| 链路状态更新分组 | 使用洪泛法对整个系统更新链路状态 |
| 链路状态确认分组 | 对链路状态更新分组的确认 |
- 完全连接:R1 和 R2 的 LSDB 最终达到一致的状态。
- 同步触发:每 30 分钟或链路状态发生变化时,路由器洪泛发送 LSU,其他路由器更新 LSDB 后洪泛转发并回送确认,这又称为"新情况下的链路状态数据库同步"。
- 问题:N 台路由器全互连时,邻居关系数量为 N(N-1)/2,每个路由器需向其他 N-1 个路由器发送问候分组和 LSU,数量过多。
- 解决方法:选举 DR(指定路由器)和 BDR(备用指定路由器)。
- 规则:所有非 DR/BDR 只与 DR/BDR 建立邻居关系;非 DR/BDR 之间不能直接交换信息,必须通过 DR/BDR 交换。
- 邻居关系数量:降为 2(N-2)+1。
- 选举参数:路由器优先级、路由器 ID、接口 IP 地址等,与以太网交换机生成树协议选举根交换机类似。
- 容错:若 DR 出现问题,由 BDR 顶替。
- 目的:使 OSPF 能够用于规模很大的网络,把一个 AS(自治系统) 再划分为若干个更小的范围,称为区域。
- 区域标识符:32 比特,可用点分十进制表示。
- 主干区域:标识符必须为 0(0.0.0.0),用于联通其他区域;其他区域标识符不能为 0 且互不相同。
- 规模限制:每个区域所包含的路由器一般不应超过 200 个。
- 好处:把洪泛法交换链路状态信息的范围局限于每一个区域,而不是整个 AS(自治系统),减少整个网络上的通信量。
路由器类型:
| 类型 | 定义 | 举例 |
|---|
| 自治系统边界路由器(ASBR) | 专门和本 AS 外的其他 AS 交换路由信息 | R6 |
| 主干路由器 | 主干区域内的路由器 | R3、R4、R5、R6、R7 |
| 区域内路由器 | 所有接口都在同一个区域内 | R1、R2、R8、R9 |
| 区域边界路由器(ABR) | 一个接口连接自身区域,另一个接口连接主干区域 | R3、R4、R7 |
- ABR 作用:向主干区域发送自己所在区域的链路状态通告,并汇总其他区域的可达信息。
- 代价:分层次划分区域使交换信息的种类增多、协议更复杂,但区域内部通信量大大减小,使 OSPF 能用于规模很大的 AS(自治系统)。
| 对比项 | RIP(路由信息协议) | OSPF(开放最短路径优先) |
|---|
| 算法基础 | 距离向量 | 链路状态 |
| 度量 | 跳数 | 代价(费用/距离/时延/带宽) |
| 最短路径算法 | 不使用 Dijkstra | 使用 Dijkstra(迪杰斯特拉) |
| 路由环路 | 可能产生(坏消息传播慢) | 不会产生 |
| 网络规模 | 限制(最大 15 跳) | 不限制 |
| 收敛速度 | 慢 | 快 |
| 交换对象 | 仅相邻路由器 | 通过洪泛法向所有路由器 |
| 交换内容 | 完整路由表 | LSA(链路状态通告) |
| 封装方式 | UDP 端口 520 | IP 数据报,协议号 89 |
| 体系结构层次 | 应用层(封装角度) | 网际层(封装角度) |
| 适用场景 | 小型互联网 | 大型自治系统 |
- OSPF(开放最短路径优先) = 链路状态 + Dijkstra(迪杰斯特拉) 算法 + 洪泛 LSA + IP 协议号 89。
- 五种分组:问候、数据库描述、链路状态请求、链路状态更新、链路状态确认。
- 通过 LSDB 一致性 + 带权有向图 + Dijkstra 算法构建无环最短路径。
- 多点接入网络用 DR/BDR 降低邻居关系数量;大型 AS 用划分区域减少洪泛范围。
- (改编 408) 主机 A 给 B 发送的 IP 数据报沿 OSPF 收敛后的路径传送,需经过 5 个路由器。为了让该 IP 数据报能到达 B,其首部 TTL 字段至少应设置为 5,使最后一个路由器转发时 TTL 减一后仍剩余 1。(答案:D)
- (举一反三) 根据 OSPF 收敛后的传送路径,计算 IP 数据报首部 TTL 字段的最小取值。(答案:C)
- 为什么说 OSPF(开放最短路径优先) 从算法上保证了不会产生路由环路?
- 简述 OSPF 五种分组类型的作用及基本工作过程。
- 为什么在多点接入网络中要选举 DR 和 BDR?邻居关系数量从 N(N-1)/2 降为多少?