ospf基本概念
定义
OSPF 是典型的链路状态路由协议,是目前业内使用非常广泛的 IGP 协议之一。
目前针对 IPv4 协议使用的是 OSPF Version 2 ( RFC2328 );针对 IPv6 协议使用 OSPF Version 3 ( RFC2740 )。
运行 OSPF 路由器之间交互的是 LS ( Link State ,链路状态)信息,而不是直接交互路由。 LSA 信息是 OSPF 能够正常进行拓扑及路由计算的关键信息。
OSPF 路由器将网络中的 LSA 信息收集起来,存储在 LSDB 中。路由器都清楚区域内的网络拓扑结构,这有助于路由器计算无环路径。
每台 OSPF 路由器都采用 SPF 算法计算达到目的地的最短路径。路由器依据这些路径形成路由加载到路由表中。
OSPF 支持 VLSM ( Variable Length Subnet Mask ,可变长子网掩码),支持手工路由汇总。
多区域的设计使得 OSPF 能够支持更大规模的网络。
ospf基础术语-区域
OSPF Area 用于标识一个 OSPF的区域,使用十进制数或类似于IP地址方式,但是没有IP地址的意义。
区域是从逻辑上将设备划分为不同的组,每个组用区域号( Area ID )来标识。
两种区域类型:
- 骨干区域:区域0 存在并且唯一
- 非骨干区域:非0区域
注意:
- 区域的划分是基于接口的,不是基于路由器的,一个路由器可以属于不同的区域。
- 非骨干区域必须与骨干区域相连接。
ospf基础术语-router-id
Router-ID ( Router Identifier ,路由器标识符),用于在一个 OSPF 域中唯一地标识一台路由器。
Router-ID 的设定可以通过手工配置的方式,或使用系统自动配置的方式。
Router-ID的选举规则:
- 手工配置最优;
- 选用路由器全局Router-ID:
- 最先配置的IP地址;
- 如果最先配置的IP地址被删除或修改,则优选最大的虚拟地址(loopback地址),再优选最大的物理地址
- ospf router-id不具备抢占特性,除非设备重启或重置ospf进程
ospf基础术语-度量值
OSPF使用Cost(开销)作为路由的度量值。 每一个激活了 OSPF 的接口都会维护一个接口 Cost 值,缺省时 接口 Cost 值 = 100 Mbit / s除以 接口带宽。 其中100 Mbit/s为OSPF 指定的缺省参考值,该值是可配置的。
笼统地说,一条OSPF路由的Cost值可以理解为是从目的网段到本路由器沿途所有入接口的Cost值累加。
ospf路由器角色
区域内路由器(Internal Router-IR)-区域内路由器是 OSPF 自治系统中的基本路由器类型之一。它的所有接口都被分配到同一个 OSPF 区域内。通常情况下,这些路由器在网络拓扑中处于较低的层次,负责局部的路由选择和转发任务。
区域边界路由器(Area Border Router - ABR)-区域边界路由器连接了骨干区域和非骨干区域,因此它在 OSPF AS 中扮演着关键的角色。ABR 可以通过物理连接或逻辑连接连接到骨干区域。
骨干路由器(Backbone Router-BR)-骨干路由器在 OSPF AS 中扮演着核心的角色,负责连接整个自治系统并提供路由信息的交换。它至少一个接口必须连接到骨干区域,可以同时连接到其他区域。
自治系统边界路由器(Autonomous System Boundary Router - ASBR)-ASBR 负责将来自其他自治系统的路由信息引入本自治系统,并将本自治系统的路由信息传递到其他自治系统。它可能位于自治系统的边界,也可能位于自治系统内部。
链路状态路由协议的运算过程
链路状态路由协议有四个步骤:
- 第一步是建立相邻路由器之间的邻居关系。
- 第二步是邻居之间交互链路状态信息和同步LSDB。
- 第三步是进行优选路径计算。
- 第四步是根据最短路径树生成路由表项加载到路由表。
ospf中的三大表项
邻居表
对于OSPF的邻居表,需要了解:
- OSPF在传递链路状态信息之前,需先建立OSPF邻居关系。
- OSPF的邻居关系通过交互Hello报文建立。
- OSPF邻居表显示了OSPF路由器之间的邻居状态,使用display ospf peer查看。
链路状态数据库-LSDB
对于OSPF的LSDB表,需要了解:
- LSDB会保存自己产生的及从邻居收到的LSA信息,本例中R1的LSDB包含了三条LSA。
- Type标识LSA的类型,AdvRouter标识发送LSA的路由器。
- 使用命令行display ospf lsdb查看LSDB表。
ospf路由表
对于OSPF路由表,需要了解:
- OSPF路由表和路由器路由表是两张不同的表项。本例中OSPF路由表有三条路由。
- OSPF路由表包含Destination、Cost和NextHop等指导转发的信息。
- 使用命令display ospf routing查看OSPF路由表。
ospf的网络类型
-
在学习DR和BDR的概念之前,需要首先了解OSPF的网络类型。
-
OSPF网络类型是一个非常重要的接口变量,这个变量将影响OSPF在接口上的操作,例如采用什么方式发送OSPF协议报文,以及是否需要选举DR、BDR等。
-
接口默认的OSPF网络类型取决于接口所使用的数据链路层封装。
-
如图所示,OSPF的有四种网络类型,Broadcast、NBMA、P2MP和P2P。
一般情况下,链路两端的OSPF接口网络类型必须一致,否则双方无法建立邻居关系 。
OSPF网络类型可以在接口下通过命令手动修改以适应不同网络场景,例如可以将BMA网络类型修改为P2P。
BMA(Broadcast Multiple Access,广播式多路访问)
- BMA也被称为Broadcast,指的是一个允许多台设备接入的、支持广播的环境。
- 典型的例子是Ethernet(以太网)。当接口采用Ethernet封装时,OSPF在该接口上采用的缺省网络类型为BMA。
NBMA(Non-Broadcast Multiple Access,非广播式多路访问)
- NBMA指的是一个允许多台网络设备接入且不支持广播的环境。
- 典型的例子是帧中继(Frame-Relay)网络。
P2P(Point-to-Point,点对点)
- P2P指的是在一段链路上只能连接两台网络设备的环境。
- 典型的例子是PPP链路。当接口采用PPP封装时,OSPF在该接口上采用的缺省网络类型为P2P 。
P2MP(Point to Multi-Point,点到多点)
- P2MP相当于将多条P2P链路的一端进行捆绑得到的网络。
- 没有一种链路层协议会被缺省的认为是P2MP网络类型。该类型必须由其他网络类型手动更改。
- 常用做法是将非全连通的NBMA改为点到多点的网络。
DR和BDR
MA(Multi-Access)多路访问网络有两种类型:广播型多路访问网络(BMA)及非广播型多路访问网络(NBMA)。以太网(Ethernet)是一种典型的广播型多路访问网络。
在MA网络中,如果每台****OSPF路由器都与其他的所有路由器建立OSPF邻接关系,便会导致网络中存在过多的OSPF邻接关系,增加设备负担,也增加了网络中泛洪的OSPF 报文数量。
当拓扑出现变更,网络中的****LSA 泛洪可能会造成带宽的浪费和设备资源的损耗。
为优化MA网络中OSPF邻接关系,OSPF指定了三种OSPF路由器身份,DR(Designated Router,指定路由器)、BDR(Backup Designated Router,备用指定路由器)和DRother路由器。
只允许DR、BDR与其他OSPF路由器建立邻接关系。DRother之间不会建立全毗邻的OSPF邻接关系,双方停滞在2-way状态。
BDR会监控DR的状态,并在当前DR发生故障时接替其角色。
DR和BDR的选举规则:
- OSPF DR优先级值大的接口成为该MA的DR,第二大的成为BDR。
- 如果优先级值相等(默认为1),则具有更大的OSPF Router-ID的路由器(的接口)被选举成DR,第二大的成为BDR,并且DR具有非抢占性。
注意:
- 只有在广播和NBMA 的链路上才会选举DR和BDR,在P2P 和P2MP 的链路上不会选举DR和BDR。
- DR 是针对一个网段内的设备选举的,对于一台路由器来说,可能它在某个接口上是DR,在其它接口上是BDR、DROther,或者因为是P2P 的链路而不参加DR 的选举。
- 在广播的网络上必须存在DR 才能够正常工作,但BDR 不是必需的。
- 一个网段中即使只有一台路由器,也要选举DR。
- 由于"终身制"的原因,网段中的DR 不一定是priority 最高的,但通常是"来的早"的路由器。
ospf协议的报文类型
OSPF使用5种不同的报文类型。每种类型用于支持不同的,专门的网络功能:
- Hello报文:发现和维护邻居关系。
- DD报文(数据库描述):交互链路状态数据库摘要。
- LSR(链路状态请求):请求特定的链路状态信息。
- LSU(链路状态更新):发送详细的链路状态信息。
- LSACK(链路状态确认):对链路状态信息进行确认。
ospf的状态机
(1)邻居建立状态变化过程
1、Down状态:这是邻居的初始状态,表示没有从邻居收到任何信息。
启用了OSPF功能的链路默认成为down状态,并开始向外发送Hello报文(基于网络类型的不同发送方式也会不同,广播类型Hello为组播发送)。
注意:OSPF的每条链路都会经历状态机,每条OSPF链路的状态机互不影响。
启用OSPF的链路从Down状态开始,向外发送Hello报文。
2、Init状态:在此状态下,路由器已经从邻居收到了Hello报文。
在Init状态下的链路,如果接收到传来的Hello包中含有自己的router-id,则表示对端已经发现了自己,此时链路就能成为2-way状态了。
3、Attempt状态(NBMA)
该状态仅发生在NBMA网络中,表明该链路在发送Hello报文之后,到达了失效时间(dead interval)仍然没有收到对端回复Hello报文。如果Router Dead Interval间隔内未收到邻居的Hello报文,则转为Down状态。
处于该状态下的链路仍然会向对端发送Hello报文。
4、2-way状态:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态。
(2)邻接建立状态变化过程
5、ExStart:这是形成邻接关系的第一个步骤,邻居状态变成此状态以后,路由器开始向邻居发送DD报文,主从关系是在此状态下形成的。初始DD序列号是在此状态下决定的,在此状态下发送的DD报文不包含链路状态描述。
6、Exchange:此状态下路由器相互发送包含链路状态信息摘要的DD报文,描述本地LSDB的内容。
7、Loading:相互发送LSRequest报文请求LSA,发送LSUpdate通告LSA。
8、Full:两台路由器的LSDB已经同步。
OSPF的3种稳定状态:
什么是稳定的状态?即链路状态会长时间所处的状态机。
在OSPF状态机中,有三个稳定的状态机状态:Down、2-way、Full
- Down:启用OSPF功能的链路默认所处状态机或者邻居失效后的状态。
- 2-way:在交互了Hello报文建立邻居之后所处的状态,DR-Other与DR-Other之间所处的状态。
- Full:在邻接建立成功之后的状态,也是OSPF的最终状态。
ospf邻接关系建立过程
OSPF完成邻接关系的建立有四个步骤,即建立邻居关系、协商主****/从、交互LSDB信息,同步LSDB 。
建立邻居关系
当一台 OSPF 路由器收到其他路由器发来的首个 Hello 报文时会从初始 Down 状态切换为 Init 状态。
当 OSPF 路由器收到的 Hello 报文中的邻居字段包含自己的 Router ID 时,从 Init 切换 2-way 状态。
协商主/从、交互LSDB信息
邻居状态机从 2-way 转为 Exstart 状态后开始主从关系选举:
R1 向 R2 发送的第一个 DD 报文内容为空,其 Seq 序列号假设为 X 。
R2 也向 R1 发出第一个 DD 报文,其 Seq 序列号假设为 Y 。
选举主从关系的规则是比较Router ID,越大越优 。 R2 的 Router ID 比 R1 大, 因此 R2 成为真正的主设备。主从关系比较结束后, R1 的 状态从 Exstart 转变为 Exchange 。
R1 邻居状态变为 Exchange 后, R1 发送一个新的 DD 报文,包含自己 LSDB 的描述信息,其序列号采用主设备 R2 的序列号。 R2 收到后邻居状态从 Exstart 转变为 Exchange 。
R2 向 R1 发送一个新的 DD 报文,包含自己 LSDB 的描述信息,序列号为 Y+1 。
R1 作为从路由器需要对主路由 R2 发送的每个 DD 报文进行确认,回复报文的序列号与主路由 R2 一致。
发送完最后一个 DD 报文后, R1 将邻居状态切换为 Loading 。
同步LSDB
邻居状态转变为 Loading 后, R1 向 R2 发送 LSR 报文,请求那些在 Exchange 状态下通过 DD 报文发现的,但是在本地 LSDB 中没有的 LSA 。
R2 收到后向 R1 回复 LSU 。在 LSU 报文中包含被请求的 LSA 的详细信息。
R1 收到 LSU 报文后,向 R2 回复 LS ACK 报文,确认已接收到,确保信息传输的可靠性。
此过程中 R2 也会向 R1 发送 LSA 请求。当两端 LSDB 完全一致时,邻居状态变为 Full ,表示成功建立邻接关系。
虚链路
为了避免区域间的环路,OSPF规定不允许直接在两个非骨干区域之间发布路由信息 ,只允许在一个区域内部或者在骨干区域和非骨干区域之间发布路由信息 。因此,每个非骨干区域都必须连接到骨干区域,同时骨干区域也必须连续。
但由于网络设计、升级、合并、改造等因素,从而造成不规范区域架构,最终导致路由学习不完整,解决方法就是使用虚链路。
ospf支持一种名叫虚链路(virtual link)的特性,当非骨干区域与骨干区域之间没法建立物理连接的情况下,可利用该特性来建立逻辑连接,虚链路的用途如下:
- 当非骨干区域与骨干区域之间无法通过物理链路直连时,可让两者之间通过这种逻辑链路互连。
- 可用来防止骨干区域的"分裂",或可用来把发生"分裂"的骨干区域合并。
虚链路使用场景:
场景一:
在上图中,区域2只能与区域1直连,而无法与骨干区域直连,在这种情况下,由于area 2没有与骨干区域直连,最终导致area 2无法学习到其他区域的路由信息,在这种情况下,需要通过OSPF虚链路将骨干区域的范围扩展到相邻的区域1,如下图:
在进行OSPF虚链路扩展后,区域1被虚拟成了骨干区域,而这时的R3等同于连接骨干区域和区域2的ABR(因为有一个virtual接口在区域0,因此变成了ABR),所以可以将自己所有的LSA发进区域2。在扩展OSPF虚链路时,是通过连接R2(ABR)与R3(ABR)的Router-ID来建立的。
场景二:
因为OSPF虚链路(Virtual Link)能将骨干区域扩展到相邻的常规区域,从而将常规区域虚拟为骨干区域,所以在某些情况下,如公司合并,或者为了备份骨干区域,可能出现骨干区域被常规区域所隔离,如下图:
图中骨干区域被区域1分割为两部分,将使得骨干区域自己的路由无法相互传递,在使用OSPF虚链路后,可以将区域1也扩展为骨干区域,如下图:
在经过OSPF虚链路将区域1也扩展为骨干区域后,可见所有的区域都变成了骨干区域,从而使网络中骨干区域能够收到另外一边被分割的骨干区域的路由,并且最后骨干区域自己的路由都为Intra-Area Route。
ospf各类LSA介绍
OSPF LSA 链路状态通告( Link status announcement
),作用于向其它邻接OSPF路由器传递拓扑信息 与路由信息。
OSPF路由器通过不同类型的LSA组建成LSDB数据库(链路状态数据库)再通过SPF算法计算出最优的OSPF路由加入到路由表中。
常见的LSA有:
- 1类 Router-LSA:描述设备的直连拓扑信息、路由信息,该LSA只能在接口所属的区域内泛洪。
- 2类 Network-LSA:网络LSA,该2类LSA只会在广播类型网络中出现,由DR产生,描述DR所在的MA网络中所有与之形成邻接关系的路由器,以及DR自己。
- 3类 Summary-Network-LSA:网络汇总LSA,由ABR设备产生,描述区域内的路由信息。因为1类、2类LSA只能在区域内传递。故其它区域需要学习到另一个区域的1类2类就需要有新的LSA来统一描述1类2类的拓扑、路由信息。这个LSA就是3类LSA。
- 4类 ASBR-summary-LSA:ASBR汇总LSA,由ABR产生,描述到ASBR的路由,服务于5类LSA。通告给除ASBR所在区域的其它区域。
- 5类 AS-external-LSA:AS外部LSA,由ASBR产生,描述到OSPF域外的路由。OSPF引入的路由,如引入RIP、ISIS、BGP等路由,引入的路由就属于外部路。外部路由用5类LSA进行通告。
- 7类 NSSA-LSA:用于特殊区域 NSSA 中的LSA。由ASBR产生,用于描述到达OSPF域外的路由。NSSA7类与5类功能一样,但泛洪范围不同。
各类LSA详解请参考:路由 OSPF LSA介绍、1~7类LSA详细介绍_ospf lsa类型详解-CSDN博客
ospf特殊区域
特殊区域类型:
- Stub Area 末梢区域
- Totally Stub Area 完全末梢区域
- NSSA(Not So Stub Area)
- Totally NSSA 完全NSSA
各区域详情请参考:OSPF 特殊区域介绍、Stub、Totally Stub、NSSA、Totally NSSA-CSDN博客