部分缩写

Abbreviations Full spelling 中文解释
OSPF Open Shortest Path First 开放式最短路径优先
IETF Internet Engineering Task Force 互联网工程任务组
IGP Interior Gateway Protocol 内部网关协议
LSA Link State Advertisement 链路状态通告
LSDB Link State DataBase 链路状态数据库
NBMA Non-Broadcast Multi-Access 非广播多路访问
P2MP Point-to-MultiPoint 点到多点
DR Designated Router 指定路由器
BDR Backup Designated Router 备份指定路由器
ABR Area Border Router 区域边界路由器
AS Autonomous System 自治系统
ASBR Autonomous System Boundary Router 自治系统边界路由器
NSSA Not-So-Stubby Area 非纯末节区域
DD Database Description 数据库描述
LSR Link State Request 链路状态请求
LSU Link State Update 链路状态更新
LSAck Link State Acknowledgment 链路状态确认

动态选路协议

在网络很小时,且与其他网络只有单个连接点没有多余路由时,可以通过静态路由配置,但是随着网络规模增大需要使用动态选路。

RIP 是一种基于距离矢量的路由协议,存在着收敛慢、易产生路由环路、可扩展性差等问题,逐渐被 OSPF 取代。

OSPF概述

OSPF:开放最短路径优先,IETF开发的动态路由协议,是链路状态算法最有名的实现协议,也是 IETF 推荐应用最广泛的 IGP 协议。RFC2328描述 OSPFv2。

OSPF 在协议栈中的属于应用层协议,以 IP 报文封装,协议号为 89,无传输层协议的头部,OSPF 的头部紧接着 IP头。

协议自身的报文是不转发的:协议报文用IP报文封装后,TTL = 1,只有一跳,不会被转发。

若想通过 OSPF 协议发现路由,必须在相应的路由器及相应的接口上配置该协议。

OSPF特点

  • 适应范围广:支持各种规模的网络,最多可支持几百台路由器。

  • 快速收敛:在网络的拓扑结构发生变化后立即发送更新报文,使这一变化在自治系统中同步。

  • 无自环:由于 OSPF 根据收集到的链路状态用最短路径树算法计算路由,从算法本身保证了不会生成自环路由。

  • 区域划分:允许自治系统的网络被划分成区域来管理。路由器链路状态数据库的减小降低了内存的消耗和 CPU 的负担;区域间传送路由信息的减少降低了网络带宽的占用。

  • 等价路由:支持到同一目的地址的多条等价路由。

  • 路由分级:使用4类不同的路由,按优先顺序来说分别是:区域内路由、区域间路由、第一类外部路由、第二类外部路由。

  • 支持验证:支持基于区域和接口的报文验证,以保证报文交互和路由计算的安全性。

  • 组播发送:在某些类型的链路上以组播地址发送协议报文,减少对其他设备的干扰。OSPF 使用的组播地址为 224.0.0.5,所有运行 OSPF 的路由器必须准备接收发送到该地址的,Hello 包始终发往该目标。DR 和 BDR 侦听224.0.0.6,必须准备接收发送到该地址的包。

OSPF原理简介

OSPF 要求每台运行 OSPF 的路由器都了解整个网络的链路状态信息,这样才能计算出到达目的地的最优路径。OSPF 的收敛过程由链路状态公告 LSA 泛洪开始,LSA 包含了路由器已知的接口 IP 地址、掩码、开销和网络类型等信息。收到 LSA 的路由器都可以根据 LSA 提供的信息建立自己的链路状态数据库 LSDB,并在 LSDB 的基础上使用 SPF 算法进行运算,建立起到达每个网络的最短路径树。最后,通过最短路径树得出到达目的网络的最优路由,并将其加入到 IP 路由表中。

OSPF 中的 5 种协议报文类型

  • Hello 报文:周期性发送,用来发现和维持 OSPF 邻居关系,并在 Broadcast 和 NBMA 类型网络中进行 DR/BDR 的选举。

  • DD 报文:两台路由器进行 LSDB 同步时,DD 报文来描述自己的 LSDB,内容包括 LSDB 中每一条 LSA 头部(可以唯一标识一条 LSA)。LSA 头部只占 LSA 的整个数据量的一小部分,所以可以减少路由器之间的协议报文流量。用于两台路由器进行数据库同步以及选主/从路由器。

  • LSR 报文:两台路由器互相交换 DD 报文之后,得知对端的路由器有哪些 LSA 是本地的 LSDB 所缺少的,这时需要发送 LSR 报文向对方请求所需的 LSA,LSR 中只包含了所需要的 LSA 摘要信息。

  • LSU 报文:向对方发送其所需要的 LSA。

  • LSAck 报文:用来对接收到的 LSU 进行确认。

Router ID

一个 32 bit 的无符号整数,是一台路由器的唯一标识,在整个自治系统内唯一,作为验证可达的手段。一台路由器如果要运行 OSPF 协议,则必须存在 Router ID,需要使用 Router ID 比较得出DR/BDR。

Router ID 的获取方式有以下三种:

  1. 手工指定 Router ID

    用户可以在创建 OSPF 进程的时候指定 Router ID,配置时,必须保证自治系统中任意两台路由器的 RID 都不相同。通常的做法是将路由器的 ID 配置为与该路由器某个接口的IP地址一致。

  2. 自动获取 Router ID

    如果在创建 OSPF 进程的时候选择自动分配 Router ID,则 OSPF 进程将根据如下规则自动获取 Router ID:

    1. 如果存在配置 IP 地址的 Loopback 接口,则选择 Loopback 接口地址中最大的作为 Router ID。

    2. 否则,从其他接口的IP地址中选择最大的作为 Router ID(不考虑接口的 up/down 状态)。

  3. 使用全局 Router ID

    如果在创建 OSPF 进程的时候没有指定 Router ID,则缺省使用全局 Router ID。

状态机

邻居(Neighbor):OSPF路由器启动后,便会通过OSPF接口向外发送Hello报文用于发现邻居。收到Hello报文的OSPF路由器检查报文中所定义的一些参数,如果双方参数一致,就会彼此形成邻居关系,状态到达2-Way即可称为建立邻居关系。

邻接(Adjacency):形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定。只有双方成功交换DD报文,并同步LSDB后,才能形成真正意义上的邻接关系。

如上图,RTA通过以太网连接了三个路由器,所以有三个邻居,但不能说有三个邻接关系。

关系建立过程简述

  1. Down:这是邻居的初始状态,表示没有在邻居失效时间间隔内收到来自邻居路由器的 Hello 数据包。

  2. Attempt:此状态只在 NBMA 网络上存在,表示没有收到邻居的任何信息,但是已经周期性向邻居发送报文,发送间隔为 Hello Interval。如果 Router Dead Interval 间隔内没有收到邻居的 Hello 报文,则转为 Down 状态。

  3. Init:此状态下,路由器已经从邻居收到了 Hello 报文,但是自己不在所收到 Hello 报文的邻居列表中,尚未与邻居建立双向通信关系。

  4. 2-Way:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态。

  5. ExStart:这是形成邻接关系的第一个步骤,邻居关系变成此状态以后,路由器开始向邻居发送 DD 报文。主从关系在此状态下形成,初始 DD 序列号也是在此状态下决定。在此状态下发送的 DD 报文不包含链路状态描述。

  6. Exchange:此状态下路由器相互发送链路状态信息摘要的 DD 报文,描述本地 LSDB 的内容。

  7. Loading:相互发送 LSR 报文请求 LSA,发送 LSU 报文通告 LSA。

  8. Full:路由器的 LSDB 已经同步。

6.2 关系建立详解

更正:第四五个 DD 报文的 M 位为 1。