OSPF | 理论 / 实验

注:本文为 “OSPF” 相关文章合辑

本专栏已发一些关于 OSPF 的文章,偶然发现本文作者对 OSPF 知识点覆盖详细,特汇记一份于此


OSPF 全网最详解(理论及配置)

Lxyand1 于 2024-12-12 10:46:50 发布

一。简介

  • 本文为详解动态路由协议 OSPF 结合了华为技术和新华三技术的大成,即结合了 HCIA,HCIP,HCIE Datacom 和 H3CNE-RS+,H3CSE-RS+,H3CIE-RS+。

  • 本文将分为 OSPF 基础概念、OSPF 路由计算、OSPF 特殊区域及其它特性、OSPF 高阶特性、OSPF 的详细配置五个大模块进行详细介绍。

二.OSPF 基础概念

1. 前言

  • 路由器根据路由表转发数据包,路由表项可通过手动配置和动态路由协议生成。

  • 静态路由比动态路由使用更少的带宽,并且不占用 CPU 资源来计算和分析路由更新。当网络结构比较简单时,只需配置静态路由就可以使网络正常工作。但是当网络发生故障或者拓扑发生变化后,静态路由不会自动更新,必须手动重新配置。

  • 相比较于静态路由,动态路由协议具有更强的可扩展性,具备更强的应变能力。

  • OSPF (Open Shortest Path First,开放式最短路径优先) 具有扩展性强,收敛速度快等特点,作为优秀的内部网关协议被广泛使用。

  • 该模块主要介绍 OSPF 的基本概念,OSPF 的邻接关系的建立。

2. 动态路由协议简介

(1)动态路由协议分类

img

【1】距离矢量协议

运行距离矢量路由协议的路由器周期性地泛洪自己的路由表。通过路由的交互,每台路由器都从相邻的路由器学习到路由,并且加载进自己的路由表中,然后再通告给其他相邻路由器。

对于网络中的所有路由器而言,路由器并不清楚网络的拓扑,只是简单的知道要去往某个目的网段方向在哪里,开销有多大。

img

【2】链路状态路由协议 - LSA 泛洪

链路状态路由协议通告的的是链路状态而不是路由信息。

运行链路状态路由协议的路由器之间首先会建立邻居关系,然后彼此之间开始交互 LSA (LinkState Advertisement,链路状态通告)。

img

【3】链路状态路由协议 - LSDB 维护

每台路由器都会产生 LSA,路由器将接收到的 LSA 放入自己的 LSDB (Link State DataBase,链路状态数据库)。路由器通过对 LSDB 中所存储的 LSA 进行解析,进而了解全网拓扑。

img

【4】链路状态协议 - SPF 计算

每台路由器基于 LSDB,使用SPF (Shortest Path first,最短路径优先) 算法进行计算。每台路由器都计算出一棵以自己为根的、无环的、拥有最短路径的 “树”。有了这棵 “树”,路由器就已经知道了到达所有网段的优选路径。

img

【5】链路状态路由协议 - 路由表生成

路由器将计算出来的优选路径,加载进自己的路由表**(Routing Table)**。

img

【6】小总结

img

3.OSPF 简介

(1)OSPF 概述

OSPF 是 IETF 定义的一种基于链路状态的内部网关路由协议。目前针对 IPv4 协议使用的是 OSPFVersion 2 (RFC2328);针对 IPv6 协议使用 OSPF Version 3 (RFC2740)。

OSPF 有以下优点:

  • 基于 SPF 算法,以 “累计链路开销” 作为选路参考值

  • 采用组播形式收发部分协议报文

  • 支持区域划分

  • 支持对等价路由进行负载分担

  • 支持报文认证

(2)OSPF 基础术语
【1】Router ID

Router lD 用于在自治系统中唯一标识一台运行 OSPF 的路由器,它是一个 32 位的无符号整数。

Router lD 选举规则如下:

  • 手动配置 OSPF 路由器的 Router ID (建议手动配置)

  • 如果没有手动配置 Router ID,则路由器使用 Loopback 接口中最大的 IP 地址作为 Router ID

  • 如果没有配置 Loopback 接口,则路由器使用物理接口中最大的 IP 地址作为 Router ID

img

【2】区域
  • OSPF Area 用于标识一个 OSPF 的区域。

  • 区域是从逻辑上将设备划分为不同的组,每个组用区域号 (AreaID) 来标识。

  • OSPF 的区域 ID 是一个 32bit 的非负整数,按点分十进制的形式 (与 IPv4 地址的格式一样) 呈现例如 Area0.0.0.1。为了简便起见,我们也会采用十进制的形式来表示。

img

【3】度量值
  • OSPF 使用 Cost (开销) 作为路由的度量值。每一个激活了 OSPF 的接口都会维护一个接口 Cost 值,缺省的 Cost =100 Mbits / 接口带宽。其中 100 Mbit/s 为 OSPF 指定的缺省参考值,该值是可配置的。

  • OSPF 以 “累计 cost” 为开销值,也就是流量从源网络到目的网络所经过所有路由器的出接口的 cost 总和。

img

【4】度量值修改举例

img

(3)OSPF 三大表项
【1】邻居表

OSPF 有三张重要的表项,OSPF 邻居表、LSDB 和 OSPF 路由表。对于 OSPF 的邻居表,需要了解:

  • OSPF 在传递链路状态信息之前,需先建立 OSPF 邻居关系。

  • OSPF 的邻居关系通过交互 Hello 报文建立。

  • OSPF 邻居表显示了 OSPF 路由器之间的邻居状态,使用 display ospf peer 查看。

img

【2】LSDB

对于 OSPF 的 LSDB,需要了解:

  • LSDB 会保存自己产生的及从邻居收到的 LSA 信息,本例中 R1 的 LSDB 包含了三条 LSA。

  • Type 标识 LSA 的类型,AdvRouter 标识发送 LSA 的路由器。

  • 使用命令行 display ospf lsdb 查看 LSDB 表。

img

【3】OSPF 路由表

对于 OSPF 的路由表,需要了解:

  • OSPF 路由表和路由器路由表是两张不同的表。本例中 OSPF 路由表有三条路由。

  • OSPF 路由表包含 Destination、Cost 和 NextHop 等指导转发的信息。

  • 使用命令 display ospf routing 查看 OSPF 路由表。

img

(4)OSPF 报文格式
  • OSPF 一共定义了 5 种类型的报文,不同类型的 OSPF 报文有相同的头部格式。

  • OSPF 报文直接采用 IP 封装,在报文的 IP 头部中,协议号为 89。

  • 后文会有详细介绍

img

4.OSPF 工作过程

(1)建立邻居关系
【1】OSPF 工作工程概览

img

【2】建立邻居
  • OSPF 使用 Hello 报文发现和建立邻居关系。

  • 在以太网链路上,缺省时,OSPF 采用组播的形式发送 Hello 报文 (目的地址 224.0.0.5)。

  • OSPF Hello 报文中包含了路由器的 Router ID、邻居列表等信息。

img

【3】hello 报文

Hello 报文的主要作用:

  • 邻居发现:自动发现邻居路由器,

  • 邻居建立:完成 Hello 报文中的参数协商,建立邻居关系。

  • 邻居保持:通过周期性发送和接收,检测邻居运行状态。

img

重要字段解释

  • Network Mask: 发送 Hello 报文的接口的网络掩码。

  • Hello lnterval: 发送 Hello 报文的时间间隔。通常为 10s

  • Router Dead lnterval: 失效时间。如果在此时间内未收到邻居发来的 Hello 报文,则认为邻居失效。通常为 40s。

  • Neighbor: 邻居,以 Router ID 标识。

其它字段解释

  • Options:

E: 是否支持外部路由
 
MC: 是否支持转发组播数据包
 
N/P: 是否为 NSSA 区域

  • Router Priority:DR 优先级。默认为 1。如果设置为 0,则路由器不能参与 0DR 或 BDR 的选举。

  • Designated Router: DR 的接囗地址。

  • Backup Designated Router: BDR 的接囗地址。

(2)建立邻接关系
【1】建立邻接阶段一

img

  • R1 和 R2 的 Router ID 分别为 10.0.1.1 和 10.0.2.2 并且二者已建立了邻居关系。当 R1 的邻居状态变为 ExStart 后,R1 会发送第一个 DD 报文。此报文中,M-bit 设置为 1,表示后续还有 DD 报文要发送,MS-bit 设置为 1,表示 R1 宣告自己为 Master。DD 序列号被随机设置为 X,I-bit 设置为 1,表示这是第一个 DD 报文。

  • 同样当 R2 的邻居状态变为 ExStart 后,R2 也会发送第一个 DD 报文。此报文中,DD 序列号被随机设置为 Y (1-bit=1,M-bit=1,MS-bit=1,含义同上)。由于 R2 的 Router ID 较大,所以 R2 将成为真正的 Master。收到此报文后,R1 会产生一个 Negotiation-Done 事件,并将邻居状态从 ExStart 变为 Exchange。

  • 当 R1 的邻居状态变为 Exchange 后,R1 会发送一个新的 DD 报文,此报文中包含了 LSDB 的摘要信息,序列号设置为 R2 在步骤 2 中使用的序列号 Y,I-bit=0,表示这不是第一个 DD 报文,M-bit=0,表示这是最后一个包含 LSDB 摘要信息的 DD 报文,MS-bit=0,表示 R1 宣告自己为 Slave。收到此报文后,R2 将邻居状态从 ExStart 变为 Exchange。

  • 当 R2 的邻居状态变为 Exchange 后,R2 会发送一个新的 DD 报文,此报文包含了 LSDB 的摘要信息。DD 序列号设置为 Y+1,MS-bit=1,表示 R2 宣告自己为 Master。

  • 虽然 R1 不需要发送新的包含 LSDB 摘要信息的 DD 报文,但是作为 Slave,R1 需要对 Master 发送的每一个 DD 报文进行确认。所以,R1 向 R2 发送一个新的 DD 报文,序列号为 Y+1,该报文内容为空。发送完此报文后,R1 产生一个 Exchange-Done 事件,将邻居状态变为 Loading。R2 收到此报文后,会将邻居状态变为 Full (假设 R2 的 LSDB 是最新最全的,不需要向 R1 请求更新)。

【2】DD 报文

DD 报文包含 LSA 头部信息。img

【3】建立邻接阶段二

img

(3)DR 与 BDR 的作用
【1】作用

img

  • MA (Multiple Access,多路访问) 分为 BMA ( Broadcast Multi-Access, 广播多路访问)和 NBMA (Non-Broadcast Multiple Access,非广播多路访问)。以太网链路组成的网络是典型的 BMA 网络。帧中继链路通过逻辑上的划分组成典型的 NBMA 网络。

  • DRother: 既不是 DR 也不是 BDR 的路由器就是 DRother 路由器

【2】DR 与 BDR 的选举规则

DR/BDR 的选举是非抢占式的。

DR/BDR 的选举是基于接口的。

  • 接口的 DR 优先级越大越优先。

  • 接口的 DR 优先级相等时,RouterID 越大越优先。

img

广播链路或者 NBMA 链路上 DR 和 BDR 的选举过程如下:

  • 接口 UP 后,发送 Hello 报文,同时进入到 Waiting 状态。在 Waiting 状态下会有一个 WaitingTimer,该计时器的长度与 DeadTimer 是一样的。默认值为 40 秒,用户不可自行调整。

  • 在 WaitingTimer 触发前,发送的 Hello 报文是没有 DR 和 BDR 字段的。在 Waiting 阶段如果收到 Hello 报文中有 DR 和 BDR,那么直接承认网络中的 DR 和 BDR,而不会触发选举。直接离开 Waiting 状态,开始邻居同步。

  • 假设网络中已经存在一个 DR 和一个 BDR,这时新加入网络中的路由器,不论它的 Router ID 或者 DR 优先级有多大,都会承认现网中已有的 DR 和 BDR。

  • 当 DR 因为故障 Down 掉之后,BDR 会继承 DR 的位置,剩下的优先级大于 0 的路由器会竞争成为新的 BDR。

  • 只有当不同 Router ID,或者配置不同 DR 优先级的路由器同时起来,在同一时刻进行 DR 选举才会应用 DR 选举规则产生 DR。

【3】不同网络类型中 DR 与 BDR 的选举操作

img

【4】可按需调整设备接口的 OSPF 网络类型

img

  • OSPF 的网络类型是根据接口的数据链路层封装自动设置的。

  • 图中的路由器采用以太网接口互联,因此这些接口的网络类型缺省均为 Broadcast。

  • 每段链路实际上都是点对点链路,因此在链路上选举 DR 与 BDR 是没有必要的。

  • 为了提高 OSPF 的工作效率,加快邻接关系的建立过程,可以把这些互联接口的网络类型都修改为 P2P。

  • 在接口视图使用 ospf network-type p2p 即可修改接口网络类型。

5. 模块总结

如果您认真学完以上模块,您将能够:

  • 描述 OSPF 路由计算的整体过程

  • 阐明 DR 与 BDR 的作用

  • 描述 OSPF 报文类型和作用

  • 区分 OSPF 邻居关系和邻接关系

三.OSPF 路由计算

1. 前言

  • 同一区域内的 OSPF 路由器拥有完全一致的 LSDB,在区域内部,OSPF 采用 SPF 算法完成路由计算。

  • 随着网络规模不断扩大,路由器为了完成路由计算所消耗的内存、CPU 资源也越来越多通过区域划分可以在一定程度上缓解路由器的压力。

  • 在大规模网络中除了 OSPF 之外,还可能存在其它路由协议,OSPF 支持外部路由引入,从而使得 OSPF 路由器知晓到达域外的路由。

  • 该模块主要介绍 OSPF 路由计算原理,包括区域内部路由、区域间路由及外部路由的计算过程。

2. 区域内路由计算

(1)LSA 概述
【1】LSA 的基本概念
  • LSA 是 OSPF 进行路由计算的关键依据。

  • OSPF 的 LSU 报文可以携带多种不同类型的 LSA。

  • 各种类型的 LSA 拥有相同的报文头部。

img

重要字段解释:

  • LS Age (链路状态老化时间):此字段表示 LSA 已经生存的时间,单位是秒。

  • Options (可选项):每一个 bit 都对应了 OSPF 所支持的某种特性。

  • LS Type (链路状态类型):指示本 LSA 的类型。

  • Link state lD (链路状态 ID):不同的 LSA,对该字段的定义不同。

  • Advertising Router (通告路由器):产生该 LSA 的路由器的 Router ID,

  • LS Sequence Number (链路状态序列号):当 LSA 每次有新的实例产生时,序列号就会增加。

  • LS Checksum (校验和):用于保证数据的完整性和准确性。

  • Length:是一个包含 LSA 头部在内的 LSA 的总长度值。

链路状态类型、链路状态 ID、通告路由器三元组唯一地标识了一个 LSA。
 
链路状态老化时间 、链路状态序列号 、校验和用于判断 LSA 的新旧。
 
LS Age:当 LSA 被始发时,该字段为 0,随着 LSA 在网络中被泛洪,该时间逐渐累加,当到达 MaxAge (缺省值为 3600s) 时,LSA 不再用于路由计算。
 
LS Sequence Number:该字段用于判断 LSA 的新旧或是否存在重复的实例。席列号范围是 0x80000001-0x7FFFFFFF,路由器始发一个 LSA,序列号为 0x80000001,之后每次更新序列号加 1,当 LSA 达到最大序列号时,重新产生该 LSA,并且把序列号设置为 0x80000001。

【2】常见 LSA 类型

img

在许多场合中,我们习惯使用类型值来称呼对应的 LSA,例如 1 类 LSA 等同于 Router LSA,2 类 LSA 等同于 Network LSA,以此类推。

(2)Router-LSA
【1】Router-LSA 详解 1
  • Router LSA (1 类 LSA): 每台 OSPF 路由器都会产生。它描述了该路由器直连接口的信息。

  • Router LSA 只能在所属的区域内泛洪。

img

  • V (Virtual Link): 如果产生此 LSA 的路由器是虚连接的端点,则置为 1。

  • E (External): 如果产生此 LSA 的路由器是 ASBR,则置为 1

  • B (Border): 如果产生此 LSA 的路由器是 ABR,则置为 1.

  • links: LSA 中的 Link (链路) 数量。Router LSA 使用 Link 来承载路由器直连接口的信息。

Link State lD:1 类 LSA 的 Link State lD 为 OSPF 的 Rouer lD 。

【2】Router-LSA 详解 2
  • Router LSA 使用 Link 来承载路由器直连接口的信息。

  • 每条 Link 均包含 “链路类型”、“链路 ID”、“链路数据” 以及 “度量值” 这几个关键信息。

  • 路由器可能会采用一个或者多个 Link 来描述某个接口。

img

(3)Network-LSA
【1】Network-LSA 详解
  • Network LSA (2 类 LSA): 由 DR 产生,描述本网段的链路状态,在所属的区域内传播。

  • Network LSA 记录了该网段内所有与 DR 建立了邻接关系的 OSPF 路由器,同时携带了该网段的网络掩码。

img

  • Link state lD :DR 的接囗 IP 地址。

  • Network Mask:MA 网络的子网掩码。

  • Attached Router: 连接到该 MA 网络的路由器的 Router-ID (与该 DR 建立了邻接关系的邻居的 Router-ID,以及 DR 自己的 RouterID),如果有多台路由器接入该 MA 网络,则使用多个字段描述。

(4)SPF 计算过程
【1】SPF 算法 1

Phase 1: 构建 SPF 树。

  • 路由器将自己作为最短路径树的树根,根据 Router-LSA 和 Network-LSA 中的拓扑信息,依次将 Cost 值最小的路由器添加到 SPF 树中。路由器以 Router ID 或者 DR 标识。

  • 广播网络中 DR 和其所连接路由器的 Cost 值为 0。

  • SPF 树中只有单向的最短路径,保证了 OSPF 区域内路由计算不会出现环路。

img

【2】SPF 算法 2

Phase 2: 计算最优路由。

  • 将 Router-LSA、Network-LSA 中的路由信息以叶子节点形式附加在对应的 OSPF 路由器上,计算最优路由。

  • 已经出现的路由信息不会再添加到 SPF 树干上。

img

【3】SPF 算法举例

img

a. 构建 SPF 树阶段 1

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值