路由协议和体系结构/开放最短路径优先
开放最短路径优先 (OSPF) 是一种基于链路状态 (LS) 算法的域内路由协议。前两个版本与 IPv4 一起使用,而版本 3 被认为适合 IPv6。
与其他域内路由协议相比,OSPF 的主要优势在于可扩展性(最多数百个路由器)
- LS 算法:了解网络拓扑结构可以相对于基于距离向量算法的协议获得更大的稳定性;
- 分层路由:OSPF 建议在一个区域内不要超过 200 个路由器
- 关于其他区域的路由信息可以被汇总;
- 一个区域中的路由更改不会影响其他区域。
OSPF 定义了自己的术语,这些术语并不总是与其他协议的术语一致
- 自治系统 (AS)
- 从管理的角度来看,由单个实体控制的域(例如 GARR)
- OSPF 自治系统
- 从技术角度来看,由单个实体控制的域(即设备配置),并由单个 OSPF 协议实例处理
- 自治系统边界路由器 (ASBR)
- 位于 OSPF AS(通常是区域 0)和外部路由域(EGP,或如果 OSPF AS 与其他具有不同 IGP 协议的路由域一起位于 AS 本身内,则为 IGP)之间的边界路由器
- 边缘区域
- OSPF AS 分割成的分层子域之一,由一个物理上连续的网络组成:每个内部路由器无需退出区域本身即可与同一区域内的任何其他路由器通信
- 区域 0
- 骨干区域,不一定是物理上连续的( #分区区域),所有从一个边缘区域到另一个边缘区域或从一个边缘区域到 OSPF AS 外部的流量都必须通过
- 无瓶颈:链路不应过小
- 健壮:它不应成为一个分区区域
- 区域边界路由器 (ABR)
- 位于区域 0 和边缘区域之间的边界路由器
每个路由器都完全了解它所属区域的拓扑结构,但其他区域的精确拓扑结构是未知的:该路由器可能了解其区域外部可到达目标的列表,该列表可以被汇总或替换为默认路由。
内部路由器的数据库包含三种类型的记录
- 链路状态:它们由区域内的其他内部路由器生成,并包含区域内的内部路由,包括拓扑信息,这些信息从不进行汇总。
ABR 了解它连接的两个区域的链路状态:它具有多个数据库,每个区域一个,当然它们会产生一个路由表; - 汇总/外部记录:它们包括区域外部的外部路由器,不包括拓扑信息(仅网络地址 + 网络掩码),可以进行汇总
- 汇总记录:它们由 ABR 生成,并包含同一 OSPF AS 内其他区域(包括区域 0)内的外部路由;
- 外部记录:它们由 ASBR 生成,并包含 OSPF AS 外部的外部路由。
区域 0 中的路由器通常被配置为聚合网络地址,以便将网络汇总从一个区域传播到另一个区域。但是,必须由操作员手动指定聚合,以免出现网络汇总问题。
除了了解区域本身内所有内部路由的拓扑结构的详细信息外,普通边缘区域还会从区域 0 导入所有外部路由,而无需进一步聚合。
当某些外部路由被单个默认路由替换以减少从外部导入的路由信息时,一个区域是存根
- 存根区域:它保留汇总记录,但删除外部记录;
- 完全存根区域:它删除汇总记录和外部记录,只保留链路状态和通往出口的单个默认路由;
- 非完全存根区域:它类似于存根区域,但它可以向其他区域注入 OSPF AS 外部的外部路由(不将其导入区域)。
存根区域是在网络管理员的显式配置下启用的
- 存根区域区域 xx 存根
- 完全存根区域区域 xx 存根无汇总
- 非完全存根区域区域 xx nssa
虽然 OSPF 并不阻止存根区域拥有多个 ABR,但当存根区域仅通过一个 ABR 连接到区域 0 时,配置存根区域更有意义:不需要传播外部路由,因为只有一个路径连接该区域到网络的其余部分,而外部路由只有在存在多个出口路由器时才有用。
虚拟链路是两个路由器之间的一种“隧道”,其中至少一个属于区域 0,它在逻辑上属于区域 0,但在物理上由边缘区域内的链接序列组成。目的是让 OSPF 相信这两个路由器通过区域 0 中的虚拟链路连接。
启用虚拟链路只需要跨越的区域(只有一个)和两个涉及的路由器的路由器 ID,而不是它们的接口的 IP 地址:OSPF 会自动推导出正确的 IP 地址。OSPF 路由消息被封装到跨越链路的 IP 单播数据包中 → 为了建立双向隧道,需要在两端路由器上都配置虚拟链路。
处理分区区域的问题,OSPF 在处理方式上有所不同,具体取决于区域的类型
- 边缘区域:ABR 不会汇总边缘区域中所有网络的信息,而只会通告它能够到达的网络 → 发往分区的包只会发送给存在到达目标的内部路径的 ABR;
- 区域 0: OSPF 无法自动解决骨干网中分区区域的问题(总是选择最近的 ABR 作为出口点),但在某些情况下,操作员可以在两个 ABR 之间手动启用虚拟链路,该链路在物理上跨越边缘区域:当数据包到达 ABR 时,它会返回到该区域,到达隧道另一端的 ABR,最后进入区域 0 → 区域 0 必须始终在逻辑上,但不一定是物理上连续的。
属于不同边缘区域的两个路由器之间的链接通常不能使用:实际上,来自一个区域到另一个区域的流量必须始终穿过区域 0。
由于虚拟链路,可以将边缘区域中的路由器(直接连接到单个骨干网路由器)引入骨干网:该内部路由器成为访问区域 0 的 ABR,然后连接到它的所有链接都可以用于流量。
OSPF 在单个链接上同时支持多种指标:最佳路径可以根据数据包,例如
- 最短路径;
- 具有最佳带宽容量的路径;
- 具有最低延迟的路径。
OSPF 允许根据 IP 数据包中的“服务类型”(ToS)字段定义指标→ 理论上,64 种服务类型,然后 64 种不同的路由树是可能的,但实际上此功能几乎未使用,因为每个路由器上 LS 算法所需的处理负载会为每个 ToS 复制。
OSPF 采用等成本多路径路由。与 IGRP 不同,OSPF 没有定义计算链接成本的明确方法:成本由网络设备制造商分配→ 每个制造商都有自己的默认值,在多厂商网络中可能产生不一致→ 最好在最重要的链接上(在两端)自定义成本值。
每个 OSPF 路由器都由一个路由器 ID 唯一标识,该 ID 用作 OSPF 数据包中路由器的“名称”(例如,作为 OSPF 标头中的源)。
OSPF 没有指定如何确定路由器 ID,但只是指定它必须是 32 位长的唯一标识符。在思科设备上,路由器 ID 可以通过两种方式获得
- 手动:网络管理员明确配置路由器 ID 的值(在 IPv4 中,通常不这样做,而在 IPv6 中,这是强制性的: B6. Instradamento IPv6#OSPFv3;
- 自动:一种算法从路由器的 IPv4 地址获取路由器 ID
- 如果至少存在一个回环接口,则路由器 ID 等于回环接口中最大的地址:回环接口不依赖于物理接口的状态,因此更稳定;
- 如果没有回环接口,则路由器 ID 等于OSPF 网络接口中最大的地址。
链路状态通告(LSA)是包含在链路状态更新数据包中的数据结构,其中包含 OSPF 路由信息
- 路由器 LSA:它描述了通过点对点链路的邻接关系;
- 网络 LSA:它列出了连接到中转网络的路由器,由中转网络的指定路由器生成;
- 网络汇总 LSA:它包含同一个 OSPF AS 中其他区域内的外部路由(汇总记录),由 ABR 生成;
- ASBR 汇总 LSA:如果 ASBR 不在区域 0 而是边缘区域,它会通知 ASBR 的位置;
- AS 外部 LSA:它包含 OSPF AS 之外的外部路由(外部记录),由 ASBR 生成。
OSPF 定义了两种类型的链路
- 路由器链路(默认):如果两个路由器之间存在点对点链路(例如串行接口),则每个路由器都将其视为逻辑上分为两个点对点链路
- 与相邻路由器(由其自身的路由器 ID 标识)的点对点连接;
- 与相邻 IP 网络的点对点连接,称为存根网络[1],即路由器网络接口所属的网络。
如果路由器接口已启用但未连接到任何其他路由器,则只有与存根网络的连接(单个路由器图形);
- 网络链路(网络链路图形):如果存在广播网络(例如以太网),称为中转网络,则连接到它的两个[2]或多个路由器中,每个路由器都将其视为逻辑上与相邻中转网络的点对点连接。
LSA 路由器可以描述通过点对点链路的多种类型的邻接关系
- 与路由器的邻接关系:由彼此相邻的两个路由器中的每一个生成;
- 与中转网络的邻接关系:由连接到中转网络的每个路由器(包括指定路由器)生成;
- 与存根网络的邻接关系:由其接口与存根网络相邻的路由器生成;
- 与虚拟链路的邻接关系:由虚拟链路两端的每个路由器生成。
所有 OSPF 数据包都直接封装到 IP 中(协议类型 = 89),无需任何中间传输协议的帮助。
所有数据包都相同的 OSPF 标头指定了传输的 OSPF 数据包的类型
- 类型 1:Hello
- 类型 2:数据库描述
- 类型 3:链路状态请求
- 类型 4:链路状态更新
- 类型 5:链路状态确认
Hello 协议执行故障检测,而不依赖于物理层。
Hello 数据包每隔 HelloInterval(默认 = 10 秒)发送一次,一旦在物理层检测到故障,邻接关系就会被视为消失,并且不再通告
- 只要在物理层检测到故障;
- 如果在物理层无法检测到故障,则在一定数量的丢失 Hello 数据包(默认 RouterDeadInterval = 40 秒,相当于 4 个 Hello 数据包)之后。
但是,LSA 仍然保留在 OSPF 数据库中,如果没有更新,它将在等于 MaxAge(默认 = 1 小时)的时间段后过期。
路由器 ID 在 OSPF 进程启动时计算,即使路由器上的 IP 地址被修改,它也不会被修改→ 路由器可能会在 OSPF 进程重启时(例如,在故障或停电后)以不同的路由器 ID 出现→ 在由 LS 算法计算出的拓扑中,一个不再存在的节点将保留,直到它的 LSA 过期。
交换协议用于执行邻接关系建立,即在两个路由器变为相邻时同步它们的数据库存。
邻接关系建立仅在需要时执行,即当路由器数据库中存在一些未更新的信息时。
- 检查数据库更新需求是在以下情况下执行的:
- 网络发生变化后(例如在启动时或当新的链路变为活动状态时);
当LSA刷新计时器到期时(默认值为30分钟),以刷新仍然有效的LSA的年龄,以防它们过期。
- 在邻接关系建立过程中,只交换旧的或丢失的LSA。
- 数据库描述:主路由器发送其数据库中所有LSA的序列号列表;
- 链路状态请求:从路由器发送其数据库中旧的或丢失的LSA相关的序列号列表;
- 链路状态更新:主路由器发送请求的LSA,链路状态更新数据包以选择性泛洪的方式传播;
链路状态确认:从路由器确认已收到链路状态更新。
参考资料- [edit | edit source]
- ↑ '桩网络' 不应与 '桩区域' 混淆。