OSPF基础
OSPF 是什么
开放式最短路径优先OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内部网关协议(Interior Gateway Protocol,IGP)。
OSPF把自治系统AS(Autonomous System)划分成逻辑意义上的一个或多个区域;
OSPF通过链路状态通告LSA(Link State Advertisement)的形式发布路由;
OSPF依靠在OSPF区域内各设备间交互OSPF报文来达到路由信息的统一;
OSPF报文封装在IP报文内(因此可以看作一种运输层协议),可以采用单播或组播的形式发送。
在 OSPF 出现之前,RIP 是使用最广泛的 IGP 协议,但存在一些限制,OSPF 解决了这些限制:
RIP | OSPF |
---|---|
基于距离矢量算法,以跳数作为度量方式,忽略带宽的影响。 | 基于链路状态,以链路开销作为度量方式,并把带宽作为参考值,度量方式更科学。 |
RIP的跳数限制为15个,限制了RIP的网络规模。 | 没有跳数限制,适用的网络规模更大。 |
按照路由通告进行路由更新和选择,路由器不了解整个网络拓扑,容易产生路由环路。 | 每台路由器都能够掌握全网拓扑,通过最短路径优先算法SPF(Shortest Path First)计算路由,不会产生路由环路。 |
收敛速度慢,路由更新会经历一段抑制和垃圾收集期,容易导致路由器之间的路由不一致。 | 收敛速度快,因为路由更新是及时的,并且能够快速传递到整个网络。 |
不能处理可变长子网掩码(VLSM)。 | 能够处理VLSM,灵活进行IP地址分配。 |
OSPF运行机制
LSA泛洪
OSPF是一个链路状态路由协议,不同于距离矢量路由协议,它通告的是链路状态而不是路由表,运行链路状态路由协议的路由器首先会建立一个协议的邻居关系,然后彼此交互LSA (Link State Advertisement,链路状态通告) LSA可简单理解为每台路由器都产生一个描述自己直连接口状态(包括接口的开销、与邻居路由器之间的关系等)的通告。
LSDB组建
每台路由器都会产生LASs,路由器将接收到的LSAs放入自己的LSDB(Link State DataBase,链路状态数据库),路由器通过LSDB,掌握全网的拓扑
SPF计算
每台路由器基于LSDB,使用SPF(Shortest Path First,最短路径优先)算法进行计算。每台路由器都计算出一棵以自己为根的、无环的、拥有最短路径的”树“,路由器通过它直到到达网络各个角落的优选路径。
路由表生成
最后,路由器将计算出来的优选路径,加载进自己的路由表
OSPF基本概念
OSPF是典型的链路状态路由协议,目前针对IPv4使用的是OSPF Version2,针对IPv6使用的是Version3,在这里主要讨论Version2.
- 区域:从逻辑上将设备划分为不同的组,每个组用区域号(Area ID)来标识。
- Router-ID:用于在一个OSPF域中唯一地标识一台路由器,既可以通过手工配置的方式,也可以使用系统自动配置的方式。
- 其中手工配置一般将路由器的Router-ID配置为与该设备的某个接口(通常为Loopback接口)的IP地址一样。
- 在华为的 vrp 中,Router ID选择顺序是:优先从Loopback地址中选择最大的IP地址作为设备的ID号,如果没有配置Loopback接口,则在接口地址中选取最大的IP地址作为设备的ID号。
- 度量值:OSPF使用 Cost 作为路由的开销值,每一个激活了OSPF的接口都会维护一个接口Cost值,$$缺省时接口Cost值=\frac{100Mbit/s}{接口带宽}$$ 其中100Mbit/s是OSPF指定的缺省参考值,可以修改。 一条OSPF路由的Cost值可以理解为从目的网段到本路由器沿途所有入接口的Cost值累加。
报文类型
OSPF 头部 不同的 OSPF 报文类型有相同的 OSPF 头部。
头部格式及其字段说明- Version :对于当前所使用的OSPFv2,该字段的值为2。
- Router ID:表示生成此报文的路由器的Router ID。
- Area ID:表示此报文需要被通告到的区域。
- Type:类型字段。
- Packet length:表示整个OSPF报文的长度,单位是字节。
- Checksum:校验字段,其校验的范围是整个OSPF报文,包括OSPF报文头部。
- AuthType:为0时表示不认证;为1时表示简单的明文密码认证;为2时表示加密(MD5)认证。
- Authentication:认证所需的信息。该字段的内容随AuType的值不同而不同。
Hello:周期性发送,用来发现和维护OSPF邻居关系。
Hello报文具体功能- 邻居发现:使能了 OSPF 功能的接口会周期性地发送 Hello 报文,与网络中其他收到 Hello 报文的路由器协商报文中的指定参数,决定是否建立邻居关系。
- 建立双向通信:如果路由器发现收到的 Hello 报文的邻居列表中有自己 Router ID,则认为已经和对端建立了双向通信,邻居关系建立。
- 指定DR和BDR:Hello 报文包含 DR 优先级和Router ID 等信息,每台路由器将自己选出的DR和 BDR 写入 Hello 报文的 DR 和 BDR 字段中,然后进行 DR 和 BDR 的选举,详细的选举原则和过程请参见 DR和BDR选举 。
- 维护关系:在建立邻居关系后,使能OSPF功能的接口仍周期性地发送 Hello 报文维护邻居关系,如果在一定的时间间隔内没有收到邻居发来的 Hello 报文,则中断邻居关系。
Database Description(DD报文):描述本地LSDB的摘要信息,用于两台设备进行数据库同步
Link State Request(LSR):用于向对方请求所需要的 LSA 。设备只有在OSPF邻居双方成功交换DD报文后才会向对方发出LSR报文。
Link State Update(LSU):用于向对方发送其所需要的LSA
Link State ACK(LSAck):用来对收到的LSA进行确认
三大表项
OSPF维护了三张重要的表,分别是OSPF邻居表、LSDB表和OSPF路由表
邻居表
- OSPF在传递链路状态信息前,要先建立OSPF邻居关系
- OSPF的邻居关系通过 Hello报文 建立
- OSPF邻居表显示了OSPF路由器之间的邻居状态,使用
display ospf peer
查看
LSDB表
- LSDB会保存自己产生的以及从邻居收到的LSA信息
- Type标识了LSA的类型,AdvRouter标识发送LSA的路由器
- 使用命令行display ospf lsdb查看LSDB表
- 路由表
- OSPF路由表和路由器路由表是两张不同的表
- OSPF路由表包含了Destination、Cost和NextHop等指导转发的信息。
- 使用命令display ospf routing查看OSPF路由表
OSPF工作原理
接下来将深入了解开头介绍的 运行机制 ,理解OSPF 的工作原理。 运行 OSPF 的路由器之间需要建立关系,包括邻居关系和邻接关系,邻接关系 是建立在 邻居关系 上的,也就是必须先建立邻居关系,才能进一步建立邻接关系。 当路由器接口上激活了OSPF,路由器便开始发送以及侦听Hello报文,当两个接口在通过Hello报文发现彼此后,两台路由器便形成了邻居关系。确立邻居关系后,会进行一系列的交换,当两台路由器的LSDB同步完成,并开始独立计算路由时,两台路由器形成了邻接关系。
由于在不同的网络类型中建立邻接关系过程不同,因此先介绍一下 OSPF 中的不同网络类型。
OSPF网络类型
OSPF有四种网络类型:Broadcast,NBMA,P2MP和P2P。
- 网络类型会影响OSPF在接口采用什么方式发送OSPF协议报文,以及是否需要选举BDR、DR等。
- 接口默认的OSPF网络类型取决于接口所使用的数据链路层封装。
- 一般来说,链路两端的OSPF接口网络类型应该一致,否则双方无法建立邻居关系
- OSPF网络类型可以在接口下通过命令进行修改以适应不同的网络场景
P2P(point to point)
P2P指的是在同一段链路上只能连接两台网络设备的环境,典型的例子就是PPP链路。当接口采取PPP封装时,OSPF在接口上的缺省网络类型为P2P。
BMA(broadcast multiple access)
BMA指的是一个允许多台设备接入的,支持广播的环境,典型的例子就是以太网(Ethernet)。当链路层协议是Ethernet、FDDI时,缺省情况下,OSPF认为网络类型是Broadcast。
NBMA(non-broadcast multiple access)
NBMA指的是一个允许多台设备接入但不允许广播的环境,典型例子就是帧中继网络(Frame-Relay)
当链路层协议是帧中继、ATM或X.25时,缺省情况下,OSPF认为网络类型是NBMA。在该类型的网络中,以单播形式发送协议报文。
P2MP(point to multi-point)
P2MP相当于将多条P2P链路的一端捆绑在一起,没有哪种链路层的封装协议的缺省网络类型时P2MP,因此需要手动修改。常用做法是将非全连通的NBMA改为P2MP。
DR和BDR
产生背景
前面讲到了OSPF的四种网络类型,不同的网络类型使得OSPF协议中需要对不同路由器确定身份,以优化邻接关系。
在MA(多路访问)网络中(包括BMA和NBMA),如果每台路由器都要与其他路由器建立OSPF邻接关系,便会导致网络中过多的邻接关系,增加设备负担,增加网络中泛洪的OSPF报文,当拓扑出现变更,LSA泛洪容易导致带宽的浪费和设备资源的消耗。
具体概念
为了优化MA网络中的邻接关系,OSPF指定了三种路由器接口身份:DR(Designated Router,指定路由)、BDR(Backup Designated Router,备用指定路由器)和DRother(其他非DR和BDR路由器)。
只允许DR、BDR与其他OSPF路由器建立 邻接关系 ,DRother之间不会建立全毗邻的邻接关系,双方停滞在 2-way状态 ,BDR作为DR的备份,监控DR的状态,并在DR发生故障时接替其角色。
选举规则
DR 和 BDR 在选举过程中,首先对比各自的 DR优先级
, 如果相同,则比较 Router ID
,大的优先称为 DR。OSPF 规定了一系列选举规则:终身制 、选举制 、继承制 ,这些规则的名字都很生动形象,很好理解。
终身制
终身制也叫“非抢占制”,每一台新加入的路由器首先观察当前网络有没有“大哥”(DR),如果存在,即使自己的 DR优先级更高
,但也不会声称自己应该称为新的 DR,“深藏功与名”。由于在网段中,其他路由器只和 DR、BDR 建立邻接关系,如果 DR 频繁更换,会导致邻接关系的重新建立,导致短时间内网络中有大量的 OSPF 报文传输,降低网络可用带宽,因此终身制有利于增加网络的稳定性,提高可用带宽。
在一个BMA网络或NBMA网络上,往往是最先启动的两台具有DR选举资格的路由器将成为DR和BDR。
选举制
选举制是指 DR 和 BDR 不是人为指定的,而是由本网段中所有的路由器共同选举出来的。路由器接口的 DR 优先级决定了该接口在选举 DR、BDR 时所具有的资格,本网段内 DR 优先级大于 0 的路由器都可作为“候选人”。选举中使用的“选票”就是 Hello 报文,每台路由器将自己选出的 DR 写入Hello 报文中,发给网段上的其他路由器。当处于同一网段的两台路由器同时宣布自己是 DR 时,DR 优先级高者胜出。如果优先级相等,则 Router ID 大者胜出。如果一台路由器的优先级为0,则它不会被选举为 DR 或 BDR。
继承制
继承制是指如果 DR 发生故障了,那么下一个当选为 DR 的一定是 BDR,其他的路由器只能去竞选 BDR 的位置。这个原则可以保证 DR 的稳定,避免频繁地进行选举,并且 DR 是有备份的(BDR),一旦DR失效,可以立刻由 BDR 来承担 DR 的角色。由于 DR 和 BDR 的数据库是完全同步的,这样当 DR 故障后,BDR 立即成为 DR,履行 DR 的职责,而且邻接关系已经建立,所以从角色切换到承载业务的时间会很短。同时,在BDR成为新的DR之后,还会选举出一个新的BDR,虽然这个过程所需的时间比较长,但已经不会影响路由的计算了。
选举过程
接口UP后,发送Hello报文,同时进入到Waiting状态。在Waiting状态下会有一个WaitingTimer,该计时器的长度与DeadTimer是一样的。默认值为40秒,用户不可自行调整。OSPF接口状态的详细描述将在 后面 提到。
在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。该规则是:优先选择DR优先级最高的作为DR,次高的作为BDR。DR优先级为0的路由器只能成为DR Other;如果优先级相同,则优先选择Router ID较大的路由器成为DR,次大的成为BDR,其余路由器成为DR Other。(选举制)
OSPF状态机
包括接口状态和邻居状态,前者针对路由器的接口,后者则是针对路由器(整体)的身份。
OSPF 接口状态机
接口状态机主要反映选举 DR、BDR 过程,共有七种状态
接口状态 | 含义 |
---|---|
Down | 接口的初始状态。表明此时接口不可用,不能用于收发流量。 |
Loopback | 设备到网络的接口处于环回状态。环回接口不能用于正常的数据传输,但可以通过Router-LSA进行通告。因此,进行连通性测试时能够发现到达这个接口的路径。 |
waiting | 设备正在判定网络上的DR和BDR。在设备参与DR和BDR选举前,接口上会启动Waiting定时器。在这个定时器超时前,设备发送的Hello报文不包含DR和BDR信息,设备不能被选举为DR或BDR。这样可以避免不必要地改变链路中已存在的DR和BDR。仅NMBA网络、广播网络有此状态。 |
P2P | 接口连接到物理点对点网络或者是虚拟链路,这个时候设备会与链路连接的另一端设备建立邻接关系。仅P2P、P2MP网络有此状态。 |
DROther | 设备没有被选为DR或BDR,但连接到广播网络或NBMA网络上的其他设备被选举为DR。它会与DR和BDR建立邻接关系。 |
BDR | 设备是相连的网络中的BDR,并将在当前的DR失效时成为DR。该设备与接入该网络的所有其他设备建立邻接关系。 |
DR | 设备是相连的网络中的DR。该设备与接入该网络的所有其他设备建立邻接关系。 |
输入事件 | 描述 |
---|---|
IE1 | InterfaceUP:底层协议表明接口是可操作的。 |
IE2 | WaitTimer:等待定时器超时,表明DR和BDR选举等待时间结束。 |
IE3 | BackupSeen:设备已检测过网络中是否存在BDR。发生这个事件主要有下面两种方式:接口收到邻居设备的Hello报文,宣称自己是BDR。接口收到邻居设备的Hello的报文,宣称自己是DR,而没有指明有BDR。这都说明邻居间已进行了相互通信,可以结束Waiting状态了。 |
IE4 | 接口所在的设备在网络中被选举为DR。 |
IE5 | 接口所在的设备在网络中被选举为BDR。 |
IE6 | 接口所在的设备在网络中没有被选举为DR或BDR。 |
IE7 | NeighborChange:与该接口相关的邻居关系变化的事件发生,这表明DR和BDR需要重新选举。下面的这些邻居关系变化可能会导致DR和BDR重新选举:接口所在的设备和一个邻居设备建立了双向通信关系。接口所在的设备和一个邻居设备之间丢失了双向通信关系。通过邻居设备发送的Hello报文检测到邻居设备重新宣称自己是DR或BDR。通过邻居设备发送的Hello报文再一次检测到邻居设备宣称自己不再是DR或BDR。通过邻居设备发送的Hello报文再一次检测到相邻设备的DR优先级都已经改变。 |
IE8 | UnLoopInd:网管系统或者底层协议表明接口不再处于环回状态。 |
IE9 | InterfaceDown:底层协议表明接口不可操作。任何一种状态都可能触发此事件切换到Down状态。 |
IE10 | LoopInd:网管系统或者底层协议表明接口处于环回状态。任何一种状态都可能触发此事件切换到Loopback状态。 |
OSPF 邻居状态机
路由器之间的邻居和邻接状态是通过邻居状态机表现的,OSPF一共有八种状态机,见下表
状态 | 含义 |
---|---|
Down | 邻居会话的初始阶段。表明没有在邻居失效时间间隔内收到来自邻居设备的Hello报文。 |
Attemp | 处于本状态时,定期向手工配置的邻居发送Hello报文。说明:该状态只适用于NBMA类型 |
Init | 本状态表示已经收到了邻居的Hello报文,但是对端并没有收到本端发送的Hello报文。 |
2-way | 互为邻居。本状态表示双方互相收到了对端发送的Hello报文,建立了邻居关系。如果不形成邻接关系则邻居状态机就停留在此状态,否则进入Exstart状态。 |
Exstart | 协商主/从关系。建立主/从关系主要是为了保证在后续的DD报文交换中能够有序的发送。 |
Exchange | 交换DD报文。本端设备将本地的LSDB用DD报文来描述,并发给邻居设备。 |
Loading | 正在同步LSDB。两端设备发送LSR报文向邻居请求对方的LSA,同步LSDB。 |
Full | 建立邻接。两端设备的LSDB已同步,本端设备和邻居设备建立了邻接状态。 |
输入事件 | 描述 |
---|---|
IE1 | Start:以HelloInterval间隔向邻居设备发送Hello报文,尝试建立邻居关系。仅NMBA网络适用。 |
IE2 | HelloReceived:从邻居设备收到一个Hello报文。 |
IE3 | 2-WayReceived:从邻居设备收到的Hello报文中包含了自己的RouterID,邻居间建立了双向通信关系。接下来会进行判断:IE3(Y):如果相邻设备间应当建立邻接关系,会将邻居状态切换为ExStart。IE3(N):如果相邻设备间不应当建立邻接关系,只建立邻居关系,会将邻居状态切换为2-Way。 |
IE4 | NegotiationDone:邻居间主从关系已经协商完成,DD序列号已经交换。 |
IE5 | ExchangeDone:邻居间成功交换了数据库描述报文。接下来会进行判断:IE5(Y):如果链路状态请求列表为空,会将邻居状态切换为Full状态,表示链路状态数据已全部交换完成,邻居间建立了完全的邻接关系。IE5(N):如果链路状态请求列表不为空,会将邻居状态切换为Loading状态,开始或继续向邻居发送LSR报文,请求还没有接收到的链路状态数据。 |
IE6 | LoadingDone:链路请求状态列表为空。 |
邻接关系建立过程
有了前面的预备知识,邻接关系的建立便比较好理解了。建立过程主要有四个步骤:建立邻居关系、协商主从、交互LSDB信息,同步LSDB。其中第二、三步通常合在一起,因此也可以分为三步。
前面提到,不同的网络类型建立关系的过程不同,下面一一介绍。
广播网络(BMA)
上图是整个建立邻接关系的过程,以此为例子进行分析。
建立邻居关系
RouterA 连接到广播类型网络的接口上使能了OSPF协议,并发送了一个 Hello 报文(使用组播地址 224.0.0.5)。此时,RouterA认为自己是DR设备(DR=1.1.1.1),但不确定邻居是哪台设备(Neighbors Seen=0)。
RouterB收到 RouterA 发送的 Hello 报文后,发送一个Hello报文回应给RouterA,并且在报文中的
Neighbors Seen
字段中填入 RouterA 的 Router ID(Neighbors Seen=1.1.1.1),表示已收到RouterA的Hello报文,并且宣告DR设备是 RouterB(DR=2.2.2.2),然后 RouterB 的邻居状态机置为Init
。RouterA收到RouterB回应的Hello报文后,将邻居状态机置为2-Way状态(图中为Neighbor),下一步双方开始发送各自的链路状态数据库。在广播网络中,两个接口状态是DR Other的设备之间将停留在此步骤。
协商主从关系、描述LSA摘要
- RouterA首先发送一个DD报文,宣称自己是 Master(即将DD报文中的MS字段置为1),并规定序列号
Seq=X
。I=1
表示这是第一个DD报文,报文中并不包含LSA的摘要,只是为了协商主从关系。M=1
说明这不是最后一个报文。
RouterB 在收到 RouterA 的DD报文后,将邻居状态机改为
ExStart
,并且回应一个DD报文(该报文中同样不包含LSA的摘要信息)。由于RouterB的Router ID较大,所以在报文中RouterB认为自己是Master,并且重新规定了序列号Seq=Y。RouterA 收到报文后,同意了 RouterB 为Master,并将邻居状态机改为
Exchange
。RouterA使用 RouterB 的序列号Seq=Y
来发送新的DD报文,该报文开始正式传送 LSA 的摘要。在报文中RouterA将MS字段置为0,说明自己是Slave。RouterB 收到报文后,将邻居状态机改为
Exchange
,并发送新的DD报文来描述自己的LSA摘要,此时RouterB将报文的序列号改为Seq=Y+1。上述过程持续进行,RouterA通过重复RouterB的序列号来确认已收到RouterB的报文。RouterB通过将序列号Seq加1来确认已收到RouterA的报文。当RouterB发送最后一个DD报文时,在报文中写上M=0
。
LSDB同步
RouterA 收到最后一个 DD 报文后,发现 RouterB 的数据库中有许多LSA是自己没有的,将邻居状态机改为
Loading
状态。此时 RouterB 也收到了 RouterA 的最后一个DD报文,但 RouterA 的LSA,RouterB 都已经有了,不需要再请求,所以直接将RouterA的邻居状态机改为Full
状态。RouterA 发送 LSR 报文向 RouterB 请求更新 LSA。RouterB 用 LSU 报文来回应RouterA的请求。RouterA收到后,发送LSAck报文确认。
当 RA 的 LSA 与 RB 的 LSA 完全同步时,RA 将 RB 的邻居机状态设为
Full
,完成邻接关系的建立。
NBMA网络
NBMA 和 BMA 的区别就是在建立 邻居 关系上,主从协商、DD报文交换、LSDB同步都一样。
RouterB 向 RouterA 的一个状态为 Down 的接口发送 Hello 报文后,RouterB 的邻居状态机置为
Attempt
。此时,RouterB 认为自己是 DR 设备(DR=2.2.2.2),但不确定邻居是哪台设备(Neighbors Seen=0)。RouterA 收到 Hello 报文后将邻居状态机置为 Init,然后再回复一个Hello报文。此时,RouterA同意RouterB是DR设备(DR=2.2.2.2),并且在Neighbors Seen字段中填入邻居设备的Router ID(Neighbors Seen=2.2.2.2)。在NBMA网络中,两个接口状态是DR Other的设备之间将停留在此步骤。
P2P 和 P2MP
在点到点/点到多点网络中,邻接关系的建立过程和广播网络一样,唯一不同的是不需要选举DR和BDR。 在P2MP的网络中,缺省情况下,以组播形式(224.0.0.5)发送协议报文。可以根据用户需要,以单播形式发送协议报文。 在P2P的网络中,以组播形式(224.0.0.5)发送协议报文。
OSPF域和区域
OSPF域(Domain):一系列使用相同策略的连续OSPF网络设备所构成的网络。
区域(Area)讲一个OSPF域分成了多个区域,OSPF路由器在同一个区域内网络中泛洪LSA。在该区域中LSDB需要完成同步,以确保区域内每台路由器对网络拓扑有统一认知。 多区域设计减小了LSA泛洪的范围,将拓扑变化的影响控制在了区域内,达到优化网络的目的;在区域边界还可以做路由汇总,减小路由表规模;多区域提高网络扩展性,利于组建大规模网络。
区域分为骨干区域和非骨干区域。骨干区域即Area0,除Area0以外其他区域都称为非骨干区域。
多区域互联原则:基于防止区域间环路的考虑,非骨干区域与非骨干区域不能直接相连, 所有非骨干区域必须与骨干区域相连。
路由器类型
根据路由器的位置或功能不同,分为了四种类型的路由器:
- 区域内路由器(Internal Router):该类路由器的所有接口都属于同一个OSPF区域。
- 区域边界路由器ABR(Area Border Router):该类路由器的接口同时属于两个以上的区域, 但至少有一个接口属于骨干区域。
- 骨干路由器(Backbone Router):该类路由器至少有一个接口属于骨干区域。
- 自治系统边界路由器ASBR(AS Boundary Router):该类路由器与其他AS交换路由信息。 只要一台OSPF路由器引入了外部路由的信息,它就成为ASBR。
路由类型
路由类型 | 含义 |
---|---|
Intra Area Routes | 区域内路由。从区域内生成的且目的地属于该区域的路由。 |
Inter Area Routes | 区域间路由。来自其他区域的路由。 |
External Routes | 外部路由。引入其他路由协议或不同OSPF进程的路由。根据路由开销的计算方式,外部路由可以分为以下两类:第一类外部路由(Type1 External):第一类外部路由的开销=本设备到相应的ASBR的开销+ASBR到该路由目的地址的开销。第二类外部路由(Type2 External):第二类外部路由的开销=ASBR到该路由目的地址的开销。对于同一目的地址,第一类的外部路由的优先级要大于第二类外部路由。 |
title: 外部路由优选规则
collapse: close
1.OSPF协议认为第一类外部路由可信度高一些,**在一个OSPF进程中**,对于同一个目的地址同时存在第一类外部路由和第二类外部路由时,不管这两条外部路由的开销是多少,均优选第一类外部路由。
2.当设备上**存在不同的OSPF进程**:进程1和进程2。由于它们之间是相互独立的,所以进程1和进程2的路由都会下发给路由管理模块。每个进程对于同一个目的地址同时存在第一类外部路由和第二类外部路由时,路由优选则**不比较外部路由的类型,而比较开销**,若第二类外部路由比第一类外部路由开销小,则会优选到开销更小的第二类外部路由。
区域类型
区域类型 | 作用 | 说明 |
---|---|---|
普通区域 | 缺省情况下,OSPF区域被定义为普通区域。普通区域包括:标准区域:最通用的区域,它传输区域内路由,区域间路由和外部路由。骨干区域:连接所有其他OSPF区域的中央区域,用Area 0表示。骨干区域负责区域之间的路由,非骨干区域之间的路由信息必须通过骨干区域来转发。 | 骨干区域自身必须保持连通。所有非骨干区域必须与骨干区域保持连通。 |
Stub区域 | Stub区域是一些特定的区域,Stub区域的ABR不传播它们接收到的自治系统外部路由,因此这些区域中路由器的路由表规模以及路由信息传递的数量都会大大减少。Stub区域是一种可选的配置属性,但并不是每个区域都符合配置的条件。一般情况下,Stub区域位于自治系统的边界,是只有一个ABR的非骨干区域,为保证到自治系统外的路由依旧可达,Stub区域的ABR将生成一条缺省路由,并发布给Stub区域中的其他非ABR路由器。Totally Stub区域允许ABR发布Type3缺省路由,不允许发布自治系统外部路由和区域间的路由,只允许发布区域内路由。 | 骨干区域不能配置成Stub区域。如果要将一个区域配置成Stub区域,则该区域中的所有路由器都要配置Stub区域属性。Stub区域内不能存在ASBR,因此自治系统外部的路由不能在本区域内传播。虚连接不能穿过Stub区域。 |
NSSA(Not-So-Stubby Area)区域 | NSSA是Stub区域的一个变形,它和Stub区域有许多相似的地方。NSSA区域不允许存在Type5 LSA。NSSA区域允许引入自治系统外部路由,携带这些外部路由信息的Type7 LSA由NSSA的ASBR产生,仅在本NSSA内传播。当Type7 LSA到达NSSA的ABR时,由ABR将Type7 LSA转换成Type5 LSA,泛洪到整个OSPF域中。Totally NSSA区域不允许发布自治系统外部路由和区域间的路由,只允许发布区域内路由。 | 骨干区域不能配置成NSSA区域。如果要将一个区域配置成NSSA区域,则该区域中的所有路由器都要配置NSSA区域属性。NSSA区域的ABR会发布Type7 LSA缺省路由传播到本区域内。所有域间路由都必须通过ABR才能发布。虚连接不能穿过NSSA区域。 |
划分区域以后,各个区域根据各自区域内的 LSA 来进行 SPF 计算,将网络震荡限制在一个更小的范围。
Stub区域
如图,OSPF划分了 Area 0 和 Area 2,并且 Area 0 内的 ASBR 引入了外部路由。通常情况下,为了保证网络的路由可达性,可能把网络的各个角落的路由全都发布进了OSPF。此时,虽然各路由设备都能够到达网络的各个角落了,但如果网络越来越大,设备越来越多,那么每台设备的路由表项就会越来越大,而维护一个大规模的路由表项是需要消耗很多CPU及内存资源的。特别是对于一些边缘区域,设备性能可能比较低,维护大规模的路由表项会对设备性能带来巨大压力。
从网络优化的角度考虑,通常在保证网络可达性的同时应尽量减小路由表项的规模,减少网络中 LSA 报文的泛洪。Area 2 如果作为一个常规区域,那么可能存在 Type1、Type2、Type3、Type4、Type5 共计5中 类型的 LSA 。对于Area 2中的路由器,无论想到达区域外的哪个网络,都必须首先到达到ABR路由器,也就是说这个时候Area 2中的其他路由器并不需要了解外部网络的细节。这种情况下,就产生了OSPF的Stub区域(不传播自治系统外部路由,四、五类LSA)。
对于Area 2中的路由器来说,其实区域间的明细路由也没必要都了解,仅保留一个出口让Area 2中的路由器的数据包能够出去就足够了 (缺省三类LSA) ,这就产生了OSPF的Totally Stub区域。Totally Stub区域中,既不允许自治系统外部的路由在区域内传播,也不允许区域间路由在区域内传播,这样就进一步减少了区域内LSA的数量。
NSSA区域
如图所示,假设Area 2原来作为一个 Stub 区域运行,但是有个外部网络需要通过 Area 2 接入到这个 OSPF 网络,也就是需要将自治系统外部路由引入并传播到整个 OSPF 自治系统中。此时可以在RouterA 上将外部路由注入到 OSPF 自治系统,但是这样 RouterA 将成为ASBR,因此,Area 2 也就不是 Stub 区域了。针对这种场景,OSPF定义了 NSSA区域
。
相比于 Stub 区域,NSSA 区域能够将自治系统外部路由引入并传播到整个OSPF自治系统中。
在NSSA区域中,为保证到自治系统外的路由可达,NSSA区域的ABR将生成一条缺省路由,并发布给NSSA区域中的其他路由器。
在NSSA区域中,可能同时存在多个ABR,为了防止路由环路产生,边界路由器之间不计算对方发布的缺省路由。
一个区域内所有路由器上配置的区域类型必须保持一致。OSPF在Hello报文中使用N-bit来标识路由器支持的区域类型,区域类型选择不一致的路由器不能建立OSPF邻居关系。虽然协议有要求,但有些厂商实现时违背了这一原则,在OSPF DD报文中也置位了N-bit。为了和这些厂商互通,交换机的实现方式是可以通过命令设置N-bit来兼容。
与Totally Stub区域类似,为了进一步减少NSSA区域中LSA的数量,OSPF还定义了Totally NSSA区域(过滤 Type3 LSA)。
缺省路由
缺省路由是指目的地址和掩码都是0的路由。当设备无精确匹配的路由时,就可以通过缺省路由进行报文转发。由于OSPF路由的分级管理,Type3缺省路由的优先级高于Type5或Type7路由。
OSPF缺省路由通常应用于下面两种情况:
由区域边界路由器(ABR)发布 Type3 缺省
Summary LSA
,用来指导区域内设备进行区域之间报文的转发。由自治系统边界路由器(ASBR)发布 Type5 外部缺省
ASE LSA
,或者 Type7 外部缺省NSSA LSA
,用来指导自治系统(AS)内设备进行自治系统外报文的转发。
OSPF缺省路由的发布原则如下:
- OSPF路由器只有具有对区域外的出口时,才能够发布缺省路由LSA。
- 如果OSPF路由器已经发布了缺省路由LSA,那么不再学习其它路由器发布的相同类型的缺省路由LSA。即路由计算时不再计算其它路由器发布的相同类型的缺省路由LSA,但数据库中存有对应LSA。
- 外部缺省路由的发布如果要依赖于其它路由,那么被依赖的路由不能是本OSPF路由域内的路由,即不是本进程OSPF学习到的路由。因为外部缺省路由的作用是用于指导报文的域外转发,而本OSPF路由域的路由的下一跳都指向了域内,不能满足指导报文域外转发的要求。
区域类型 | 作用 |
---|---|
普通区域 | 缺省情况下,普通OSPF区域内的OSPF路由器是不会产生缺省路由的,即使它有缺省路由。当网络中缺省路由通过其他路由进程产生时,路由器必须将缺省路由通告到整个OSPF自治系统中。实现方法是在ASBR上手动通过命令进行配置,产生缺省路由。配置完成后,路由器会产生一个缺省ASE LSA(Type5 LSA),并且通告到整个OSPF自治系统中。 |
Stub区域 | Stub区域不允许自治系统外部的路由(Type5 LSA)在区域内传播。区域内的路由器必须通过ABR学到自治系统外部的路由。实现方法是ABR会自动产生一条缺省的Summary LSA(Type3 LSA)通告到整个Stub区域内。这样,到达自治系统的外部路由就可以通过ABR到达。 |
Totally Stub区域 | Totally Stub区域既不允许自治系统外部的路由(Type5 LSA)在区域内传播,也不允许区域间路由(Type3 LSA)在区域内传播。区域内的路由器必须通过ABR学到自治系统外部和其他区域的路由。实现方法是配置Totally Stub区域后,ABR会自动产生一条缺省的Summary LSA(Type3 LSA)通告到整个Stub区域内。这样,到达自治系统外部的路由和其他区域间的路由都可以通过ABR到达。 |
NSSA区域 | NSSA区域允许引入通过本区域的ASBR到达的少量外部路由,但不允许其他区域的外部路由ASE LSA(Type5 LSA)在区域内传播。即到达自治系统外部的路由只能通过本区域的ASBR到达。只配置了NSSA区域是不会自动产生缺省路由的。此时,有两种选择:如果希望到达自治系统外部的路由通过该区域的ASBR到达,而其它外部路由通过其它区域出去。此时,ABR会产生一条Type7 LSA的缺省路由,通告到整个NSSA区域内。这样,除了某少部分路由通过NSSA的ASBR到达,其它路由都可以通过NSSA的ABR到达其它区域的ASBR出去。如果希望所有的外部路由只通过本区域NSSA的ASBR到达。则必须在ASBR上手动通过命令进行配置,使ASBR产生一条缺省的NSSA LSA(Type7 LSA),通告到整个NSSA区域内。这样,所有的外部路由就只能通过本区域NSSA的ASBR到达。上面两种情况的区别是:在ABR上无论路由表中是否存在缺省路由0.0.0.0,都会产生Type7 LSA的缺省路由。在ASBR上只有当路由表中存在缺省路由0.0.0.0时,才会产生Type7 LSA的缺省路由。因为缺省路由只是在本NSSA区域内泛洪,并没有泛洪到整个OSPF域中,所以本NSSA区域内的路由器在找不到路由之后可以从该NSSA的ASBR出去,但不能实现其他OSPF域的路由从这个出口出去。Type7 LSA缺省路由不会在ABR上转换成Type5 LSA缺省路由泛洪到整个OSPF域。 |
Totally NSSA区域 | Totally NSSA区域既不允许其他区域的外部路由ASE LSA(Type5 LSA)在区域内传播,也不允许区域间路由(Type3 LSA)在区域内传播。区域内的路由器必须通过ABR学到其他区域的路由。实现方法是配置Totally NSSA区域后,ABR会自动产生一条缺省的Type3 LSA通告到整个NSSA区域内。这样,其他区域的外部路由和区域间路由都可以通过ABR在区域内传播。 |
区域间环路及防环
OSPF在区域内部运行的是 SPF 算法,这个算法能够保证区域内部的路由不会成环。然而划分区域后,区域之间的路由传递实际上是一种类似距离矢量算法的方式,这种方式容易产生环路。
为了避免区域间的环路,OSPF 规定直接在两个非骨干区域之间发布路由信息是不允许的,只允许在一个区域内部或者在骨干区域和非骨干区域之间发布路由信息。因此,每个ABR都必须连接到骨干区域。
假设 OSPF 允许非骨干区域之间直接传递路由,则可能会导致区域间环路。如上图所示,骨干区连接到其他网络的路由信息会传递至 Area 1。假设非骨干区之间允许直接传递路由信息,那么这条路由信息最终又被传递回去,形成区域间的路由环路。为了防止这种区域间环路,OSPF禁止Area 1
和Area 3
,以及Area 2
和Area 3
之间直接进行路由交互,而必须通过骨干区域进行路由交互。这样就能防止区域间环路的产生。
LSA 类型
OSPF 网络中划分了区域后,为每个路由器赋予了身份,封装了路由信息的 LSA 也可以分门别类。 以下图的网络拓扑为例,分别描述各种类型的 LSA
Router LSA(Type1)
Router-LSA是一种最基本的LSA,每一台路由器设备都发布 Type1 LSA,这种类型的 LSA 用于描述设备的链路状态和开销,在路由器所属的区域内传播。以图中的 R2 为例,R2 会在 Area 0,Area 1 中发布 Router LSA
上图是 R2 在 GE 0/0/1 上泛洪 Type1 LSA的部分信息。
LSA报文包括LSA头部和LSA信息字段。所有类型的LSA报文,其LSA头部包含的字段都是一样的,唯一不同的是Link State ID字段含义。在LSA头部中,主要关注以下三个字段:
- Link-State Advertisement Type:LSA类型。
- Link State ID:链路状态ID。在Router-LSA中代表始发该LSA的设备的Router ID,这里即是R2自己的Router ID。
- Advertising Router:通告路由器,始发 该 LSA 的路由设备 Router ID
LSA 报文的信息字段用于将自己连接的所有链路的状况以及开销告诉该LSA泛洪区域的其他路由器。上图中所描述的 LSA 信息为:
链路类型(Type)为一个传送网络(Transit),DR接口的IP地址(ID)为192.168.23.2,和网络相连的通告路由器接口的IP地址是192.168.23.1(Data),到达该网络的开销(Metric)是1。
其中 Link Type 有四种类型,ID 和 Data 的含义也随之有所改变:
1-P2P(点对点):此时ID表示邻居路由设备的Router ID,Data表示和网络相连的通告路由器接口的IP地址。
2-Transit(传送网络):此时ID表示DR接口的IP地址,Data表示和网络相连的通告路由器接口的IP地址。
3-Stub(末梢网络):此时ID表示宣告该Route LSA的路由器的网络IP地址,Data表示网络的该Stub网络的子网掩码。
4-Virtual Link(虚链路):此时ID表示邻居路由设备的Router ID,Data表示通告路由器接口的MIB-II ifIndex值。
Network LSA(Type2)
由 DR 产生,描述本网段的链路状态,在所属的区域内传播。
在Network-LSA中,Link State ID字段的含义是DR接口上的IP地址。
通过 Router-LSA 和 Network-LSA 在区域内洪泛,区域内每个路由器可以完成LSDB同步,这就解决了区域内部的通信问题。
Network-summary LSA(Type3)
由 ABR 发布,用来描述 区域间 的路由信息。ABR将 Network-summary-LSA 发布到一个区域,通告该区域到其他区域的目的地址。实际上,ABR是将区域内部的Type1和Type2的信息收集起来并汇总之后扩散出去,这就是Summary的含义。如下图所示,R2 作为 ABR,将 Area 0 和 Area 1 中的路由信息分别发布对方区域。
在Network-summary-LSA中,Link State ID
字段代表该LSA所描述网络的 网络地址。从LSA的信息中可以看出,该LSA由R2发布(10.2.2.2),可以到达192.168.12.0,掩码为255.255.255.0的网络,代价为1。R2将 Area 1 中的网络地址在 Area 0 中发布,从而让 Area 0 中的路由器知道去该网络的路径,实现区域间的通信。
如果—台 ABR 在与它本身相连的区域内有多条路由可以到达目的地,那么它将只会始发单一的一条网络汇总LSA到骨干区域,而且这条网络汇总LSA是上述多条路由中代价最低的。
Network-summary-LSA不会通告给 Totally Stub 和 Totally NSSA区域 。
ASBR-summary LSA(Type4)
由ABR发布,描述到ASBR的路由信息,并通告给除ASBR所在区域的其他相关区域
Link State ID表示该LSA所描述的ASBR的Router ID(10.4.4.4),即R4,发布该LSA的路由设备是R3(10.3.3.3),R3到达R4的代价是1。
AS-external LSA(Type5)
由ASBR产生,描述到AS外部的路由,通告到除Stub区域和NSSA区域以外所有的区域。
其中,Link State ID代表外部网络目的IP地址,转发地址是指到达该外部网络的数据包应该被转发到的地址。此处的转发地址为0.0.0.0表示数据包将被转发到始发ASBR上。
NSSA LSA(Type7)
除了上述几种LSA之外,还有一种比较特殊的LSA,NSSA LSA,也叫Type7 LSA。NSSA LSA由ASBR产生,描述到AS外部的路由,仅在NSSA区域内传播。NSSA区域的ABR收到NSSA LSA时,会有选择地将其转化为Type5 LSA,以便将外部路由信息通告到OSPF网络的其它区域。
NSSA LSA所有的字段与AS-external-LSA字段均相同,但这两种LSA泛洪的区域不同。AS-external-LSA是在整个AS泛洪,而NSSA LSA仅在NSSA区域中泛洪。
NSSA区域允许引入外部路由,但描述外部路由信息的 NSSA LSA 只能在本区域泛洪。为了使外部路由能被引入到除NSSA区域以外的其他区域,NSSA LSA在ABR(R3)上会转换成AS-external-LSA,并且泛洪到骨干区直至整个自治系统中。
- P-bit(Propagate bit)用于告知转化路由器该条Type7 LSA是否需要转化。P-bit 在 LSA 头部的
Options
字段。 - 缺省情况下,转化路由器是NSSA区域中Router ID最大的ABR。其他 ABR 不做转换。
- 只有P-bit置位并且 FA (Forwarding Address)不为0 的NSSA LSA才能转化为AS-external-LSA。FA用来表示发送的某个目的地址的报文将被转发到FA所指定的地址。
- 区域边界路由器产生的NSSA LSA缺省路由不会置位P-bit。
只配置了NSSA区域是不会自动产生缺省路由的。此时,有两种选择:
1、如果希望到达自治系统外部的路由通过该区域的ASBR到达,而其它外部路由通过其它区域出去。此时,ABR会产生一条Type7 LSA的缺省路由,通告到整个NSSA区域内。这样,除了某少部分路由通过NSSA的ASBR到达,其它路由都可以通过NSSA的ABR到达其它区域的ASBR出去。
2、如果希望所有的外部路由只通过本区域NSSA的ASBR到达。则必须在ASBR上手动通过命令进行配置,使ASBR产生一条缺省的NSSA LSA(Type7 LSA),通告到整个NSSA区域内。这样,所有的外部路由就只能通过本区域NSSA的ASBR到达。
上面两种情况的区别是:
1、在ABR上无论路由表中是否存在缺省路由0.0.0.0,都会产生Type7 LSA的缺省路由。
2、在ASBR上只有当路由表中存在缺省路由0.0.0.0时,才会产生Type7 LSA的缺省路由。
因为缺省路由只是在本NSSA区域内泛洪,并没有泛洪到整个OSPF域中,所以本NSSA区域内的路由器在找不到路由之后可以从该NSSA的ASBR出去,但不能实现其他OSPF域的路由从这个出口出去。Type7 LSA缺省路由不会在ABR上转换成Type5 LSA缺省路由泛洪到整个OSPF域。
Opaque LSA(Type9、10、11)
Opaque LSA包括Type9 LSA,Type10 LSA和Type11 LSA,用于OSPF的扩展通用机制。
- Type9 LSA仅在接口所在网段范围内传播。用于支持GR的Grace LSA就是Type9 LSA的一种。
- Type10 LSA在区域内传播。用于支持TE的LSA就是Type10 LSA的一种。
- Type11 LSA在自治系统内传播,目前还没有实际应用的例子。
区域类型 | Router-LSA(Type1) | Network-LSA(Type2) | Network-summary-LSA(Type3) | ASBR-summary-LSA(Type4) | AS-external-LSA(Type5) | NSSA LSA(Type7) |
---|---|---|---|---|---|---|
普通区域(包括标准区域和骨干区域) | 是 | 是 | 是 | 是 | 是 | 否 |
Stub区域 | 是 | 是 | 是 | 否 | 否 | 否 |
Totally Stub区域 | 是 | 是 | 否 | 否 | 否 | 否 |
NSSA区域 | 是 | 是 | 是 | 否 | 否 | 是 |
Totally NSSA区域 | 是 | 是 | 否 | 否 | 否 | 是 |
OSPF 快速收敛
当网络拓扑结构发生改变时,OSPF 为了提高路由的收敛速度,扩展了快速收敛机制,包括 I-SPF(Incremental SPF,)增量最短路径优先算法) 、 PRC (Partial Route Calculation,部分路由计算)、智能定时器、以及 FRR (Fast reroute,快速重路由,用于故障恢复快速收敛) 。
I-SPF
是指当网络拓扑改变的时候,只对受影响的节点进行路由计算,而不是对全部节点重新进行路由计算,从而加快了路由的计算。
除了第一次计算时需要计算全部节点外,每次只计算受到影响的节点,而最后生成的最短路径树SPT与原来的算法所计算的结果相同,大大降低了CPU的占用率,提高了网络收敛速度。
PRC
PRC 与 I-SPF 原理一样,都是只处理变化的路由,不同的是,PRC 并不计算节点路径,而是根据 I-SPF 计算出来的 SPT 来更新路由。
例如在上图中,R1作为最短路径树的根,在 R5 中将环回口 Loopback0 开启 OSPF ,网络拓扑结构发生变化,为了实现快速收敛,OSPF 开启 PRC 计算。R5 全网泛洪新增 LSA,R1收到 LSA 后创建新的路由,但不会重新计算,而是继承原有节点 R5 的路径以及下一跳,也就是最短路径树不变,只是在 R5 上新增叶子,从而实现快速收敛。
SPT变化和叶子变化都会引起路由信息的变化,但两者不存在依赖关系,PRC根据SPT或叶子的不同情况进行相应的处理:
- SPT变化,PRC处理变化节点上的所有叶子的路由信息。
- SPT没有变化,PRC不会处理节点的路由信息。
- 叶子变化,PRC处理变化的叶子的路由信息。
- 叶子没有变化,PRC不会处理叶子的路由信息。
例如上图中,SPT没有变化,只是叶子变化,因此只更新 R5 节点的接口路由,大大节省 CPU 占用率。
智能定时器
网络不稳定时,可能会进行频繁的路由计算,产生和传播不稳定拓扑的 LSA ,造成系统 CPU 消耗过大,也不利于网络的快速稳定。
OSPF 智能定时器分别对路由控制、LSA 的生成与接收进行控制,加速网络收敛。
控制路由计算:
当网络发生变化时,OSPF 的 LSDB 会发生变化,需要重新计算最短路径,通过配置智能定时器,根据用户的配置和指数衰减技术动态调整 SPF 计算的间隔时间,避免占用过多的路由器内存和带宽资源
控制 LSA 的生成与接收:
缺省状态下,LSA 的更新间隔为 5s ,当OSPF的 LSA 达到链路状态刷新时间(缺省5秒)时,OSPF就会更新自己生成的 LSA 并对外发布。在网络相对稳定,对路由收敛时间要求较高的组网环境,可以更改为0s,即拓扑或路由变化时立即通过 LSA 发布到网络中,加快收敛。
LSA 被接收的时间间隔为 1s
在华为的路由器上配置 OSPF 智能定时器时,会与前面所提到的 OSPF 标准有所不同。
配置路由计算时间间隔:
命令:
[Huawei-ospf-1] spf-schedule-interval { interval1 | intelligent-timer maxinterval start-interval hold-interval | millisecond interval2 }
interval1:指定OSPF SPF计算间隔时间。整数形式,取值范围是1~10,单位是秒。
intelligent-timer:指定通过智能定时器设置OSPF SPF计算的间隔时间。
max-interval:指定OSPF SPF计算的最长间隔时间。整数形式,取值范围是1~ 120000,单位是毫秒。缺省值是10000。
start-interval:指定OSPF SPF计算的初始间隔时间。整数形式,取值范围是1~ 60000,单位是毫秒。缺省值是500。
hold-interval:指定OSPF SPF计算的基数间隔时间。整数形式,取值范围是1~ 60000,单位是毫秒。缺省值是1000。
millisecond interval2:指定OSPF SPF计算间隔时间。整数形式,取值范围是1~ 10000,单位是毫秒。
计算间隔说明:
- 初次计算 SPF 的间隔时间由 start-interval 参数指定
- 第n (n>2) 次计算 SPF 的间隔时间为 ${hold-interval}×2^{n-2}$
- 当 ${hold-interval}×2^{n-2}$ 到达指定的最长间隔时间
max-interval
时,OSPF 连续 三次 计算 SPF 的时间间隔都是最长时间间隔,之后,再次返回步骤一,按照初始间隔时间start-interval
计算 SPF
配置 OSPF LSA 更新的时间间隔
- 命令:
[Huawei-ospf] lsa-originate-interval { 0 | { intelligent-timer maxinterval start-interval hold-interval | other-type interval } }
0:指定LSA更新的时间间隔为0,即取消LSA的5秒的更新时间间隔。
intelligent-timer:指定通过智能定时器设置OSPF Router LSA和Network LSA的更 新间隔时间。
max-interval:指定更新OSPF LSA的最长间隔时间。整数形式,取值范围是1~ 120000,单位是毫秒。缺省值是5000。
start-interval:指定更新OSPF LSA的初始间隔时间。整数形式,取值范围是0~ 60000,单位是毫秒。缺省值是500。
hold-interval:指定更新OSPF LSA的基数间隔时间。整数形式,取值范围是1~ 60000,单位是毫秒。缺省值是1000。
other-type:指定设置除OSPF Router LSA和Network LSA外LSA的更新间隔时间。
interval:指定LSA更新的时间间隔。整数形式,取值范围是0~10,单位是秒。缺省值是5。
计算间隔时间 :逻辑规则与路由计算间隔时间相同。
配置 OSPF LSA 接收 时间间隔:
命令:
[Huawei-ospf-1] lsa-arrival-interval { interval | intelligent-timer maxinterval start-interval hold-interval }
interval:指定LSA接收的时间间隔。整数形式,取值范围是0~10000,单位是毫秒。
intelligent-timer:指定通过智能定时器设置LSA接收的间隔时间。
max-interval:指定接收OSPF LSA的最长间隔时间。整数形式,取值范围是1~ 120000,单位是毫秒。缺省值是1000。
start-interval:指定接收OSPF LSA的初始间隔时间。整数形式,取值范围是0~ 60000,单位是毫秒。缺省值是500。
hold-interval:指定接收OSPF LSA的基数间隔时间。整数形式,取值范围是1~ 60000,单位是毫秒。缺省值是500。
计算间隔时间的规则与前面两个配置的规则相同
FRR
OSPF IP FRR(Fast reroute,快速重路由) 是动态 IP FRR,利用 LFA(Loop-Free Alternates) 算法预先计算出备份路径,保存在转发表中,以备在故障时将流量快速切换到备份链路中,保证流量不中断,从而达到流量保护的目的。
LFA 计算备份链路的基本思路:以可提供备份链路的邻居作为根节点 ,利用 SPF 算法计算出到目的节点的最短距离。然后按照 不等式 计算出开销最小且无环的备份链路。
OSPF IP FRR 的流量保护分为 链路保护 和 节点链路双保护
Distance_opt(X,Y)
指的是节点 X 到 Y 之间的 最短路径当需要保护的对象是经过 特定链路 的流量时,保护类型为 链路保护
当需要保护的对象是经过 特定设备 的流量时,流量保护的类型为 节点链路双保护 。节点保护优先级高于链路保护。
OSPF 路由控制
OSPF 路由控制包括:
OSPF多进程
OSPF 多进程,在同一台路由器上可以运行多个不同的 OSPF 进程,它们之间互不影响,彼此独立。不同 OSPF 进程之间的路由交互相当于不同的路由协议之间的路由交互。
路由器的一个接口只能属于一个 OSPF 进程
典型应用场景:
同一台PE设备连接了两个不同的 VPN 客户,并且 PE 和 CE 之间部署了 OSPF,因此可以通过在 PE 上部署多进程实现 VPN 客户之间的隔离。
OSPF 增强功能
OSPF Database Overflow
OSPF 要求同一个区域中的路由器保存相同的 LSDB,当网络上路由数不断增加,一些路由器由于系统资源有限,无法承载如此多路由信息,这种状态称为数据库超限 (OSPF Database Overflow)
尽管可以设置 Stub 和 NSSA 区域在一定程度上解决这个问题,但无法解决动态路由增长导致的超限问题,此时通过设置 LSDB 中 External LSA 的最大条目数,可以动态限制链路数据库的规模。
[Huawei-ospf-1] lsdb-overflow-limit number number:指定LSDB中External LSA的最大条目数。整数形式,取值范围是1~ 1000000。
工作原理
通过设置路由器上非缺省外部路由数量的上限
OSPF网络中所有路由器都必须配置相同的上限值。这样,只要路由器上外部路由的数量达到该上限,路由器就进入 Overflow 状态,并同时启动超限状态定时器(默认超时时间为5秒),路由器在定时器超过5秒后自动退出超限状态。
Overflow状态阶段 | OSPF处理流程 |
---|---|
进入Overflow状态时 | 路由器删除所有自己产生的非缺省外部路由。 |
处于Overflow状态中 | 不产生非缺省外部路由。丢弃新收到的非缺省外部路由,不回复确认报文。当超限状态定时器超时,检查外部路由数量是否仍然超过上限。N=>退出超限状态。Y=>重启定时器。 |
退出Overflow状态时 | 删除超限状态定时器。产生非缺省外部路由。接收新收到的非缺省外部路由,回复确认报文。准备下一次进入超限状态。 |
- 应用举例:
如上图所示,为减少 R3 的 LSA 数量,同时确保 R3 可以和其他区域内的路由器正常通信,则配置 R2 不向 Area1 注入 Type3 LSA,同时发布缺省路由。
FA
OSPF 的 Type5
和 Type7
LSA 中包含了一个字段 FA
,在某些特定场景可以避免次优路径的问题。
FA(Forwarding Address,转发地址),用来描述到达所通告的目的地的数据包应该被转发到的地址,如果转发地址为 0.0.0.0
那么数据包将被转发到 始发 ASBR 。
在上图的场景中,R2、R3、R4 运行 OSPF 并部署在 Area0 中,其中 R2 和 R3 的GE0/0/1 接口都激活 OSPF 并且建立邻接 关系,但是二者与 R1 并不建立 OSPF 邻接关系。
如果没有 LA 字段,R2 通过配置到达 10.1.1.1/32
静态路由,下一跳为 10.1.123.1
;接着将该静态路由引入 OSPF,产生 Type5 LSA 在区域内泛洪;R3 接收到 LSA 后,计算出到达 10.1.1.1/32 的外部路由,并且将下一跳指定为 R2 ;如此进行,最终 R4 到达外部路由的路径是 R4-R3-R2-R2
,该路径是 次优路径
R2 在通告到达 10.1.1.1/32 的外部路由时,为对应的 Type5 LSA 设置 FA,值为自己到达该外部路由的下一跳:10.1.123.1
这样当 R3 收到后,计算到达外部路由时,发现 FA 不为 0,因此它认为到达目的地址 10.1.1.1/32 的下一跳为 FA 所指定的地址,即 10.1.123.1
那么,FA 字段就是 ASBR 这个“外交官”决定是否要“亲力亲为”的标志,如果为0,区域内的路由器想要发往外部的流量都要先经过 ASBR ,否则,区域内路由器则将报文发往 FA 所指向的设备。
那么,什么时候 FA 设置为非0呢? 需要满足以下条件:
- ASBR 在其连接外部网络的接口(外部路由的出接口)上激活了OSPF;
- 该接口没有被配置为
Silent-Interface
; - 该接口的 OSPF 网络类型为 BMA 或 NBMA;
- 该接口的 IP 地址在 OSPF 配置的
network
命令指定的网段范围内。
到达FA地址的路由必须是 OSPF 区域内或区域间 路由,这样接收到该外部 LSA 的路由器才能加载该 LSA ,加载的外部 LSA 生成的路由条目与到达 FA 地址的下一跳相同。
OSPF+其他协议
OSPF+BFD
OSPF+BGP
当网络中有新设备加入或设备重启时,在 BGP 收敛期间可能出现流量丢失的情况,这是因为 IGP 收敛速度比 BGP 快而造成的。
如上图所示,AS 10 中的四台设备运行 OSPF 协议,并且建立 IBGP 连接。SWC 作为 SWB 的备份设备。当网络环境稳定时,BGP与OSPF在设备上是完全收敛的。
正常情况下,从 SWA 到 10.3.1.0/30 的流量会途经 SWB。当 SWB 发生故障后,流量切换到 SWC。SWB 故障恢复以后,流量回切到 SWB,此时会有流量丢失。
这是因为,在流量回切到 SWB 的过程中,IGP 收敛速度比 BGP 快,因此 OSPF 先收敛,BGP 还没有完成收敛,导致 SWB 不知如何到达 10.3.1.0/30。
这样,当从 SWA 去往 10.3.1.0/30 的流量被发送给 SWB 时,由于没有必要的路由选择信息,这些流量就会被丢弃。
使能 OSPF 与 BGP 联动的设备会在设定的联动时间内保持为 Stub路由器 ,即该设备发布的 LSA 的链路度量值 (Cost) 为最大值 (65535),从而告知其他 OSPF 设备不要使用该路由器来转发数据(通常用此方法来保护路由器链路,用来升级等维护操作)。
在上图例子中,在 SWB 上使能 BGP 联动,这样,在 BGP 收敛完成前,SWA 不把流量转发到 SWB 上,而是继续使用备份设备 SWC 转发流量,直到 SWB 上的 BGP 路由完成收敛。