简介
Open Shortest Path First 开放式最短路径优先协议,是用于分配单个自控系统中的路由信息的内部网关协议。
链路状态
OSPF 是一种链路状态协议。我们可以将链路视为路由器的接口。链路状态是对接口及接口与相邻路由器的关系的描述。例如,接口的说明将包括接口的 IP 地址、掩码、所连接的网络的类型、连接到该网络的路由器等。所有这些链路状态的集合形成链路状态数据库。
OSPF度量
$$
Cost = 参考带宽(10^8) / 接口带宽(b/s)
$$
- 每个路由器都把自己当做根,并且给予累积成本(Cost值)来计算到达目的地的最短路径。
- 在每一个运行OSPF的接口上,都维护着一个接口Cost, 接口Cost=100M/接口带宽,其中100M为OSPF的参考带宽值。
- 一条路由的Cost由该路由从起源到本路由器沿途所有入站接口的Cost值累加。
OSPF报文类型
- Hello——建立和维护OSPF邻居关系
- DBD——链路状态数据库描述信息(描述LSDB中LSA头部信息)
- LSR——链路状态请求,向OSPF邻居请求链路状态信息
- LSU——链路状态更新(包含一条或多条LSA)
- LSAck——对LSU中的LSA进行确认
区域与边界路由器
- OSPF 使用泛洪在路由器之间交互链路状态更新。
- 路由信息的所有更改都泛洪给网络中的所有路由器。
- 引入区域是为了给链路状态更新的急剧增长设置边界。
- 路由器上的泛洪和 Dijkstra 算法计算限制为针对区域内的更改。
- 区域之内的所有路由器都有整个区域内部确切的链路状态数据库。
- 属于多个区域的路由器以及将这些区域连接到骨干网区域的路由器称为区域边界路由器 (ABR)。
- ABR 必须维护描述骨干网区域和所连接的其他区域的信息。
- 区域特定于接口。所有接口都在同一个区域之内的路由器称为内部路由器 (IR)。接口在多个区域内的路由器称为区域边界路由器 (ABR)。
- 在 OSPF 和其他路由协议(IGRP、EIGRP、IS-IS、RIP、BGP、Static)或其他 OSPF 路由进程实例之间用作网关(重分配)的路由器称为自治系统边界路由器 (ASBR)。所有路由器都可以是 ABR 或 ASBR。
骨干网与区域 0
当涉及多个区域时,OSPF 具有特殊限制。如果配置了多个区域,则这些区域中必须有一个是区域 0。此区域称为骨干网。当设计网络时,从区域 0 开始然后扩展到其他区域是很好的做法。
骨干网必须位于所有其他区域的中心,即所有区域都必须在物理上连接到骨干网。接下来便是 OSPF 要求所有区域都将路由信息注入骨干网,骨干网又将这些信息散发到其他区域。
下图显示 OSPF 网络中的信息流:
OSPF的三张表
- 邻居表——存储了OSPF路由器邻居的状态以及关于该邻居的其他数据。
- 拓扑表——OSPF用 LSA( Link State Advertisement 链路状态通告)来描述网络拓扑信息,LSDB中存储着路由器产生或者收到的LSA。
- 路由表——基于LSDB进行SPF算法运算,计算得出的路由被加载到路由表中。
OSPF基本运行步骤
- 建立邻接关系(Establish router adjacencies)
- 必要的时候进行DR的选举(Elect the DR/BDR)
- 发现路由(Discover routes)
- 选择合适的路由器(Select appropriate routes)
- 维护路由信息(Maintain routing information)
OSPF网络类型(4种)
- BMA 广播型多路访问
- Point-to-Point 点对点
- NBMA 非广播型多路访问(例如帧中继、X.25、ATM)
- Point-to-MultiPoint 点到多点网络[^1]
OSPF邻接关系
参数
OSPF使用Hello报文来发现直连链路上的其他OSPF路由器, Hello报文发向组播地址224.0.0.5( All-OSPF-Routers)
两台OSPF路由器(的接口)需具备匹配的参数才能够建立起OSPF邻居关系
- Hello时间间隔
- Dead时间间隔
- 区域编号
- 认证(如果启用了认证)
- 链路MTU大小
- 子网掩码
- 子网号
- 末梢区域设置
邻接关系建立过程
- 失效状态(Down):这是邻居会话的初始状态,表示最近没有从邻居收到信息。
- 尝试状态(Attempt):该状态仅仅适用于连接在NBMA网络上的邻居。该
- 初始状态(Init):在此状态下,表示最近收到了从邻居发来的Hello数据包。但是,仍然没有和邻居建立双向通信(Bidirectional Communication),例如,路由器自身并没有出现在邻居发送的Hello数据包中。
- 双向通信状态(2-Way):此状态意味着两台路由器之间建立了双向通信。在此状态下还将进行DR和BDR的选举(只有处于2-Way状态的路由器才有资格参选DR和BDR)
- 信息交换初始状态(ExStart):这个状态是建立邻接关系的第一步。该状态的目标是决定信息交换时路由器的主从关系,并确定初始数据库描述(DD)数据包的序列号。具有最高路由器ID的路由器将成为主路由器。
- 信息交换状态(ExChange):在此状态的路由器通过向邻居发送DD数据包来描述其完整的链路状态数据库。每一个DD数据包都有一个序列号,并且需要被显式的确认。在任何时候,每次只能发送一个DD数据包。在此状态下,路由器也可以发送链路状态请求数据包,用来向邻居请求最新的LSA。实际上,这些状态的邻接关系完全有能力发送和接收所有类型的OSPF协议数据包。
- 信息加载状态(Loading):在此状态下,路由器将会向邻居路由器发送链路状态请求数据包,用来请求信息交换状态发现的最新的LSA。
- 完全邻接状态(Full):在此状态下,邻居路由器形成完全邻接关系。这些邻接关系将会在路由器LSA和网络LSA中被描述。
指定路由器和备份指定路由器
概述
- 在广播多路访问网络和NBMA网络上会选举DR(指定路由器)和BDR(备份指定路由器)。
- 所有其他路由器只与DR和BDR建立完全邻居关系,其他路由器之间的邻居状态停留在2-Way状态。
- 所有其他路由器使用组播目的地址 224.0.0.5 向DR和BDR发送链路状态更新。DR 和BDR 使用组播目的地址 224.0.0.6 向区域内所有其他OSPF路由器发送数据包。
- 为了避免因DR失效导致的单点故障,多路访问网络上还将选举BDR。DR失效时,BDR将成为DR,由于网络上其他路由器已经和BDR形成了完全邻接关系,因此可以将DR失效对网络的影响降至最低。
DR的概念是将多路访问网络看作一个“伪节点(Pseudo Node)”。当SPF进行计算的时候,把链路看作一个节点,与该链路相连的路由器也是连接到这个节点上的。从与伪节点相连的路由器到这个伪节点的代价是该路由器与这个多路访问网络相连的接口的出站代价,从伪节点到任何与之相连的路由器的代价都为0。
一台路由器可能连接到多个多路访问网络,该路由器可能是它所连接的其中一个多路访问网络的DR,也可能不是它所连接的另一个多路访问网络的DR,也就是说,DR是路由器接口的属性,而不是整个路由器的属性。
DR的工作
- 描述该多路访问网络和与其相连的路由器。
- 管理该多路访问网络上的LSA洪泛扩散过程。
DR和BDR的相关选举规则
- 如果一台OSPF路由器的接口优先级(Priority)为0,那么这台路由器永远不能成为DR或BDR。
- 具有最高优先级的路由器(的接口)将会选举为DR,具有次高优先级的路由器将会选举为BDR。
- 如果同时有多台路由器具有相同的优先级,那么具有最高路由器ID的路由器将会选举为DR。
- 当DR失效时,BDR将成为DR,并将重新选举一个BDR。
- 优先级的取值范围为0-255,更高的优先级意味着路由器有更大的机会成为DR。
- 如果一台具有更高优先级的路由器在选举完DR和BDR之后接入网络,该路由器将不会成为DR或BDR,直到DR和BDR失效,当DR失效,具有更高优先级的路由器也只会成为BDR。即DR和BDR的选举是非抢占式的。
路由器ID
- 路由器标示符, 用于在一个OSPF域中唯一地标识一台路由器, 每台运行OSPF的路由器具备Router-ID;
- OSPF Router-ID的设定可以通过手工配置的方式, 或使用自动获取的方式。 自动选取的机制是: 若路由器存在loopback接口, 则选最大的loopback接口IP地址, 若无则选活跃的物理接口中IP地址最大的作为RouterID;
- Router-ID值遵循稳定第一的原则。
OSPF的配置
基本配置
开启一个OSPF进程
router ospf process-id
process-id 为OSPF进程号,进程号只具有本地意义
宣告特定的网络到OSPF区域
network address wildcard-mask area area-id
- Wildcard-Mask 通配符掩码——32bit的点分十进制格式表示的掩码。跟子网掩码相反,0 是匹配位,1 是忽略位
查看OSPF邻居表
show ip ospf neighbor
查看OSPF LSDB
show ip ospf database
[^1]: Open Shortest Path First