OSPF NSSA
产生原因
OSPF规定Stub区域是不能引入外部路由的,这样可以避免大量外部路由对Stub区域NE带宽和存储资源的消耗。对于既需要引入外部路由又要避免外部路由带来的资源消耗的场景,Stub区域就不再满足需求了。因此产生了NSSA区域。
OSPF NSSA区域(Not-So-Stubby Area)是OSPF新增的一类特殊的区域类型。NSSA区域和Stub区域有许多相似的地方。两者的差别在于,NSSA区域能够将自治域外部路由引入并传播到整个OSPF自治域中,同时又不会学习来自OSPF网络其它区域的外部路由。
相关概念
- N-bit一个区域内所有NE上配置的区域类型必须保持一致。OSPF在Hello报文中使用N-bit来标识NE支持的区域类型,区域类型选择不一致的NE不能建立OSPF邻居关系。有些厂商在OSPF DD报文中将N-bit置位,为了和这些厂商互通,NE的实现方式是可以通过配置来兼容。
- Type7 LSAType7 LSA由NSSA区域的自治域边界路由器(ASBR)产生,其扩散范围仅限于ASBR所在的NSSA区域。Type7 LSA是为了支持NSSA区域而新增的一种LSA类型,用于描述引入的外部路由信息。NSSA区域的区域边界路由器(ABR)收到Type7 LSA时,会有选择地将其转化为Type5 LSA,以便将外部路由信息通告到OSPF网络的其它区域。
实现原理
为了将NSSA区域引入的外部路由发布到其它区域,需要把Type7 LSA转化为Type5 LSA以便在整个OSPF网络中通告。如图1所示。
- P-bit(Propagate bit)用于告知转化路由器该条Type7 LSA是否需要转化。
- 缺省情况下,转换路由器的是NSSA区域中Router ID最大的区域边界路由器(ABR)。
- 只有P-bit置位并且FA(Forwarding Address)不为0的Type7 LSA才能转化为Type5 LSA。FA用来表示发送的某个目的地址的报文将被转发到FA所指定的地址。
- FA用来表示发送的某个目的地址的报文将被转发到FA所指定的地址。FA地址首先优选区域内Loopback接口的地址,若不存在Loopback接口,则在区域内接口状态为Up的接口中选择逻辑索引大的地址作为FA地址。
- 区域边界路由器产生的Type7 LSA缺省路由不会置位P-bit。
图1 NSSA区域
使用价值
缺省路由环路预防,在NSSA区域中,可能同时存在多个ABR,为了防止路由环路产生,边界路由器之间不计算对方发布的缺省路由。
OSPF本地MT
产生原因
网络中同时部署了组播和MPLS TE-Tunnel,且TE-Tunnel使能了IGP Shortcut,IGP计算出来的路由的出接口可能不再是实际的物理接口,而是TE-Tunnel接口。NE根据到达组播源地址的单播路由,从TE-Tunnel接口发送组播加入报文,这样,被TE-Tunnel跨越的NE就无法感知到组播加入报文,因而不会建立组播转发表项。
为了解决上述问题,可以使能OSPF本地MT(Local Multicast-Topology)特性,建立正确的组播路由表并指导组播报文的转发。
实现原理
网络中同时部署了组播和MPLS TE-Tunnel,且TE-Tunnel使能了IGP Shortcut。如图1所示,DeviceB被TE-Tunnel跨越从而不会建立组播转发表项。
图1 OSPF Local MT
由于TE-Tunnel是单向的,从组播源发出的组播数据会直接通过物理接口发送到这些被跨越的NE,但因为这些NE上并没有组播转发表项,导致组播数据报文丢弃,从而造成业务不可用。
使能本地MT特性后,如果计算出来的路由出接口为IGP-Shortcut类型的TE-Tunnel,路由管理模块会为组播协议创建单独的MIGP路由表,并为该路由计算出实际的物理出接口,将其加入到MIGP路由表中。组播利用MIGP路由表中的路由进行转发。
图1中请求加入组播组的报文到达DeviceA后会通过接口interface 1发给DeviceB,这样DeviceB就能正确建立组播转发表。
BFD for OSPF
定义
双向转发检测BFD(Bidirectional Forwarding Detection)是一种用于检测转发引擎之间通信故障的检测机制。
BFD对两个系统间的、同一路径上的同一种数据协议的连通性进行检测,这条路径可以是物理链路或逻辑链路,包括隧道。
BFD for OSPF就是将BFD和OSPF协议关联起来,将BFD对链路故障的快速感应通知OSPF协议,从而加快OSPF协议对于网络拓扑变化的响应。
目的
网络上的链路故障或拓扑变化都会导致设备重新进行路由计算,所以缩短路由协议的收敛时间对于提高网络的性能是非常重要的。
由于链路故障是无法完全避免的,因此,加快故障感知速度并将故障快速通告给路由协议是一种可行的方案。BFD和OSPF相关联,一旦与邻居之间的链路出现故障,BFD的快速性能够加快OSPF的收敛速度。
表1 有无BFD for OSPF功能对比
原理
图1 BFD for OSPF
BFD for OSPF的原理如图1所示:
- 三台设备间建立OSPF邻居关系。
- 邻居状态到达Full状态时通知BFD建立BFD会话。
- DeviceA到DeviceB的路由出接口为interface 1,当这两台设备间的链路出现故障后,BFD首先感知到并通知DeviceA。
- DeviceA处理邻居Down事件,重新进行路由计算,新的路由出接口为interface 2,经过DeviceC到达DeviceB。
OSPF GTSM
定义
GTSM(Generalized TTL Security Mechanism),即通用TTL安全保护机制。GTSM通过检查IP报文头中的TTL值是否在一个预先定义好的范围内,对IP层以上业务进行保护。
目的
网络上存在一些“有效报文”攻击,可能通过对一台设备不断发送报文,使设备收到这些发送给本机的报文后,不辨别其“合法性”,直接由转发层面上送控制层面处理,导致设备因为处理这些“合法”报文,系统异常繁忙,CPU占用率高。GTSM特性可以解决这个问题。
在实际应用中,GTSM特性主要用于保护建立在TCP/IP基础上的控制层面(路由协议等)免受CPU利用(CPU-utilization)类型的攻击,如CPU过载(CPU overload)。
原理
使能了GTSM特性和策略的设备会对收到的所有报文进行策略检查。对于没有通过策略的报文丢弃或者上送控制平面,从而达到防止攻击的目的。策略内容包括:
- 发送给本机IP报文的源地址。
- 报文所属的VPN实例。
- IP报文的协议号(OSPF是89)。
- TCP/UDP之上协议的协议源端口号、目的端口号。
- 有效TTL范围。
GTSM的实现手段如下:
- 对于直连的协议邻居:将需要发出的单播协议报文的TTL值设定为255。
- 对于多跳的邻居:可以定义一个合理的TTL范围。
GTSM的应用范围是:
- GTSM对单播报文有效,对组播报文无效。这是因为组播报文本身具有TTL值为255的限制,不需要使用GTSM进行保护。
- GTSM不支持基于Tunnel的邻居。
OSPF Smart-discover
定义
通常情况下,NE会周期性地从运行OSPF协议的接口上发送Hello报文。通过Hello报文,NE之间可以建立和维持邻居关系,并且选举出该多址网络(广播型或NBMA)上的DR、BDR。OSPF通过Hello Timer定时器控制Hello报文的发送。因此,NE必须等待Hello Timer超时才能再次发送Hello报文,两次报文发送间隔为Hello Interval,在这期间邻居一直在等待接收报文。这种按固定周期发送报文的方式减缓了OSPF邻居关系的建立和选举DR、BDR的速度。
通过使能Smart-discover特性,可以解决以上问题。
表1 OSPF Smart-discover
原理
在以下场景中,使能了Smart-discover特性的接口不需要等待Hello Timer到时,可以主动向邻居发送Hello报文:
- 在广播型和NBMA网络中,快速的建立起邻居关系和选举出该网络上的DR、BDR。邻居状态首次到达2-way状态,或者由2-way及更高状态回到Init状态。该多址网络上的DR、BDR的接口状态发生变化。
- 在P2P或P2MP网络中,快速的建立起邻接关系,其原理同广播型和NBMA网络。
OSPF与BGP联动
定义
当有新的设备加入到网络中,或者设备重启时,可能会出现在BGP收敛期间内网络流量丢失的现象。这是由于IGP收敛速度比BGP快而造成的。
通过使能OSPF与BGP联动特性可以解决这个问题。
目的
在存在备份链路的情况下,BGP在链路回切时,由于路由收敛速度滞后于OSPF路由收敛速度,从而造成流量丢失。
如图1所示,四台设备DeviceA、DeviceB、DeviceC、DeviceD之间运行OSPF协议,并建立IBGP连接。DeviceC为DeviceB的备份设备。当网络环境稳定时,BGP与OSPF在设备上是完全收敛的。
正常情况下,从DeviceA到10.3.1.0/30的流量会途经DeviceB。当DeviceB发生故障后,流量切换到DeviceC。DeviceB故障恢复以后,流量回切到DeviceB,此时会有流量丢失。
这是因为,在流量回切到DeviceB的过程中,IGP收敛速度比BGP快,因此OSPF先收敛,BGP还没有完成收敛,导致DeviceB不知如何到达10.3.1.0/30。
这样,当从DeviceA去往10.3.1.0/30的流量被发送给DeviceB时,由于没有必要的路由选择信息,这些流量就会被丢弃。
图1 OSPF与BGP联动
原理
使能了OSPF与BGP联动特性的设备会在设定的联动时间内保持为StubNE,也就是说,该设备发布的LSA中的链路度量值为最大值(65535),从而告知其它OSPF设备不要使用这个NE来转发数据,由此保证该设备不会被用作穿越NE。
图1中,在RoutetB上使能OSPF-BGP联动,这样,在BGP收敛完成前,DeviceA不把流量转发到DeviceB上,而是继续使用备份链路DeviceC,直到DeviceB上的BGP路由完成收敛。
LDP-IGP联动
产生背景
LDP-IGP同步是一种通过同步LDP和IGP之间的状态,来保证在网络发生故障时,LDP和IGP配合将流量丢失时间减到最低。
在存在主备链路的组网中,当主链路发生故障时,IGP和LSP均切换到备份链路上。但当主链路从故障中恢复时,由于IGP比LDP收敛速度快,IGP会先于LDP切换回主链路,而此时主链路的LSP无法立刻建立,需要一些时间进行建立前准备工作,如邻接体恢复等,因此造成LSP流量丢失。当主链路节点间的LDP会话或邻接体发生故障时,主链路上的LSP被删除,但是IGP仍然使用主链路,导致LSP流量不能切换到备份链路,流量持续丢失。
LDP-IGP同步仅支持OSPFv2和IS-IS(IPv4)。
LDP和IGP同步的基本原理是:通过设置IGP的cost值来推迟路由的回切,直至LDP完成收敛。也就是在主链路的LSP建立之前,先保留备份链路LSP,让流量继续从备份链路转发。直至主链路的LSP建立成功,再删除备份LSP。
LDP和IGP同步的定时器为:
- Hold-max-cost timer
- Delay timer
实现过程
图1 LDP-IGP同步需要解决的回切问题
- 当主链路节点间的LDP会话发生故障时,主链路上的LSP被删除,但是IGP仍然使用主链路,导致LSP流量不能切换到备份链路,流量持续丢失。在这种情况下,可以配置LDP-IGP联动。在LDP会话发生故障时,LDP向IGP通告LDP会话故障,这样IGP就会在该链路上发布最大开销值,实现路由切换至备份链路,从而LSP也切换至备份链路,具体过程如下:主链路节点间LDP会话故障;LDP通告IGP主链路会话故障,IGP在主链路发布最大开销值;IGP路由切换至备份链路;LSP在备份链路重新建立并下发转发表项。为防止LDP会话一直不能重新建立,可通过配置Hold-max-cost定时器为永久发布最大开销值,使流量在主链路的LDP会话重新建立之前,一直都使用备份链路。
- LDP-IGP联动状态迁移机制当在接口上使能LDP-IGP联动功能时,IGP会按照图2流程进行相关接口及LDP会话状态查询,然后根据查询结果进入相应的状态,之后会按照图2进行各状态之间的迁移。
- 图2 LDP-IGP联动查询流程及状态迁移图
- 当具体的IGP协议不同时,以上状态略有不同:IGP为OSPF时:与图2所示状态迁移情况相同。IGP为IS-IS时:没有Hold-normal-cost状态,当Hold Max Cost Timer超时后,IS-IS会发布接口链路的正常cost值,但显示的状态还是Hold-max-cost状态。
适用场景
LDP-IGP联动主要应用于以下场景:
如图3所示,在存在主备链路的组网中,可以与LDP FRR同时部署,具体部署如下:图3 LDP-IGP联动部署场景图
使用价值
降低主备链路切换时的丢包率,提高整网的可靠性。
OSPF快速收敛
OSPF快速收敛是为了提高路由的收敛速度而做的扩展特性。包括:
- PRC(Partial Route Calculation)部分路由计算,是指当网络上路由发生变化的时候,只对发生变化的路由进行重新计算。
- 智能定时器OSPF智能定时器可以根据用户的配置和触发事件(如路由计算)的频率动态调整时间间隔,使网络快速稳定。OSPF智能定时器使用了指数衰减(Exponential Backoffs)技术,用户的配置可以精确到毫秒。
PRC
当网络拓扑中有一个节点发生变化时,Dijkstra算法需要重新计算网络中的所有节点,计算时间长,占用过多的CPU资源,影响整个网络的收敛速度,而PRC只对发生变化的路由进行重新计算,从而节省CPU占用率。
在路由计算中,叶子代表路由,节点则代表设备。SPT变化和叶子变化都会引起路由信息的变化,但两者不存在依赖关系,PRC根据SPT或叶子的不同情况进行相应的处理:
- SPT变化,则PRC只处理变化的节点上的所有叶子的路由信息。
- SPT没有变化,则PRC只处理变化的叶子的路由信息。
比如引入新的路由,则整个网络拓扑的SPT是不变的,这时PRC只更新这个节点的接口路由,从而节省CPU占用率。
智能定时器
网络不稳定时,可能会频繁进行路由计算,造成系统CPU消耗过大。尤其是在不稳定网络中,经常会产生和传播描述不稳定拓扑的LSA(Link State Advertisement),频繁处理这样的LSA,不利于整个网络的快速稳定。
OSPF智能定时器分别对路由计算、LSA的产生、LSA的接收进行控制,加速网络收敛。
OSPF智能定时器可以通过以下两种方式来加速网络收敛:
- 在频繁进行路由计算的网络中,OSPF智能定时器根据用户的配置和指数衰减技术动态调整两次路由计算的时间间隔,减少路由计算的次数,从而减少CPU的消耗,待网络拓扑稳定后再进行路由计算。
- 在不稳定网络中,当路由器由于拓扑的频繁变化需要产生或接收LSA时,OSPF智能定时器可以动态调整时间间隔,在时间间隔之内不产生LSA或对接受到的LSA不进行处理,从而减少整个网络无效LSA的产生和传播。
OSPF邻居震荡抑制
OSPF邻居震荡抑制功能是一种震荡抑制方式,通过延迟邻居建立或调整链路开销为最大值的方法达到抑制震荡的目的。
产生原因
如果承载OSPF业务的接口状态在Up和Down之间切换,就会引起邻居状态的频繁震荡。此时,OSPF会快速发送Hello报文重新建立邻居,同步数据库LSDB,触发路由计算,会造成大量报文交互,影响现有邻居的稳定性,对OSPF业务造成较大影响,同时也会影响依赖OSPF的其他业务(如:LDP、BGP)的正常运行。为了解决这个问题,OSPF实现了邻居震荡抑制功能,即在邻居频繁震荡时,启动震荡抑制,实现邻居延迟建立,或实现业务流量延迟经过频繁震荡的链路,达到抑制震荡的目的。
相关概念
flapping-event:震荡事件,接口上最后一次邻居状态由Full切换为非Full,称之为flapping-event。flapping-event作为震荡源输入,用来触发震荡检测机制启动工作。
flapping-count:当前震荡次数。
detecting-interval:震荡检测门限,用于判断是否触发一次有效震荡事件。
threshold:震荡抑制门限,有效震荡事件触发累计大于等于该值时,进入震荡抑制阶段。
resume-interval:震荡检测恢复门限,连续两次有效震荡事件的时间间隔大于该值时,flapping-count清0。
实现原理
震荡检测
OSPF接口启动一个flapping-count计数器,相邻两次邻居状态由Full切换为非Full的时间间隔小于detecting-interval时,设备识别为一次有效震荡事件,flapping-count计数加1。flapping-count(有效震荡事件次数)大于等于threshold时,进入震荡抑制阶段。相邻两次邻居状态由Full切换为非Full的时间间隔大于resume-interval,flapping-count清0。
用户可以通过命令配置detecting-interval,threshold,resume-interval三个震荡检测的关键参数。
resume-interval必须大于detecting-interval。
震荡抑制
震荡抑制分为Hold-down和Hold-max-cost两种模式:
- Hold-down模式:针对邻居建立过程中的频繁泛洪和拓扑变化的问题,在一段时间内禁止该邻居重新建立,避免频繁的数据库同步和大量的报文交互。
- Hold-max-cost模式:针对用户业务流量频繁切换的问题,在一段时间内将链路开销值设置为最大值Max-cost(65535),避免用户的业务流量经过频繁震荡的链路。
Hold-down模式和Hold-max-cost模式可以叠加使用,同时生效时,先进入Hold-down模式,待Hold-down模式退出后,再进入Hold-max-cost模式。
缺省情况下,OSPF使能Hold-max-cost模式,用户可以通过命令修改震荡抑制模式和抑制持续周期。
在恶意攻击导致邻居频繁震荡的情况下,使用hold-down模式可以更好的防止攻击。
接口进入震荡抑制阶段后,接口下的全部邻居都会进入震荡抑制阶段。
退出震荡抑制
退出震荡抑制有以下几种方式:
- 抑制定时器超时。
- 复位OSPF进程。
- 重启OSPF邻居。
- 用户通过命令强制退出震荡抑制阶段。
典型场景
基本场景
如图1所示,正常的业务流量路径是Device A->Device B->Device C->Device E。链路故障时,业务流量路径切换为Device A->Device B->Device D->Device E。在主备路径切换初期,Device B和Device C之间很可能会发生邻居状态频繁震荡,导致Device A到Device E的用户流量在两条路径不断切换,并且每次故障引发的切换都会导致用户流量部分丢失,影响网络稳定性。此时,如果Device B和Device C之间邻居震荡满足抑制条件时,设备就会启动震荡抑制功能。
- 采用Hold-down模式:在一段时间内禁止Device B和Device C建立邻居关系,达到将业务流量切换到Device A->Device B->Device D->Device E路径的目的。
- 采用Hold-max-cost模式:在一段时间内将Device B和Device C之间的链路开销值设置为最大值Max-cost(65535),达到将业务流量切换到Device A->Device B->Device D->Device E路径的目的。
图1 基本场景的邻居震荡抑制
关键路径场景
网络中只有唯一的流量转发路径,转发路径上的任何邻居断开都会导致用户流量中断。如图2所示,唯一的业务流量路径是Device A->Device B->Device C->Device E,如果Device B和Device C之间发生邻居震荡,满足抑制条件,进入震荡抑制阶段。但是,Device B和Device C之间的链路是组网中的关键链路,一旦断开,整个网络将被分割为互不连通的两个网络。因此,关键路径场景不建议采用Hold-down模式断开邻居关系,推荐采用Hold-max-cost模式抑制震荡,在一段时间内将Device B和Device C间的链路开销值设置为最大值Max-cost(65535),进行震荡抑制。待网络稳定后,抑制定时器超时,自动退出抑制状态,迅速恢复业务链路。
缺省情况下,OSPF使能Hold-max-cost模式。
图2 关键路径场景的邻居震荡抑制
广播网场景
如图3所示,四台设备分别通过交换机接入到同一个广播网中,相互之间建立广播网邻居。此时,如果Device C因为链路原因一直处于震荡状态,并且Device A和Device B接入网络的时间不一致(例如,Device A更早一点),或者Device A和Device B的震荡检测参数配置不一致,导致的结果是,Device A先检测到Device C处于震荡状态,抑制了Device C,在Device A发布的Hello报文中就不会携带Device C的Router ID,但是,Device B无法检测到Device C处于震荡状态,仍然认为Device C为合法节点。在DR选举时,Device A识别到的参与DR选举的设备集合包括Device B和Device D,Device B识别到的参与DR选举的设备集合包括Device A、Device C和Device D。两者备选集合不相同,选举结果也会不一致,这样就会导致广播网中的设备对网络理解的差异,造成路由计算错误。因此,在广播网或P2MP、NBMA等一个接口下存在多个邻居的场景中,不能单独抑制某个邻居,需要对接口下的全部邻居都进行抑制,震荡检测也不能以某个邻居为单位进行检测,需要检测接口上最后一个邻居状态为ExStart或Down的震荡事件。也就是说,如果Device C震荡,广播网中的Device A、Device B和Device D都会被抑制,待网络稳定后,抑制定时器超时,自动退出抑制状态,Device A、Device B和Device D都会恢复到正常业务状态。
图3 广播网场景的邻居震荡抑制
多区域组网场景
如图4所示,Device A、Device B、Device C、Device E和Device F通过Area 1连接,Device B、Device D和Device E通过骨干区域Area 0连接。Device A到Device F的正常的业务流量优先选取区域内路由,路径是Device A->Device B->Device C->Device E->Device F。当Device B和Device C之间发生邻居震荡,满足抑制条件,进入震荡抑制阶段时,缺省情况采用Hold-max-cost模式。但是,根据OSPF路由优选规则,区域内路由和区域间路由相互不会比较链路的开销值,区域内路由优先级大于区域间路由,也就是说,发生邻居震荡后,Device A到Device F的业务流量路径仍然是Device A->Device B->Device C->Device E->Device F,Hold-max-cost模式在此时无法达到抑制流量路径切换的目的。因此,多区域组网场景的邻居震荡抑制只能采用Hold-down模式,即在一段时间内禁止Device B和Device C建立邻居关系,达到将业务流量切换到Device A->Device B->Device D->Device E->Device F路径的目的。
缺省情况下,OSPF使能Hold-max-cost模式,用户可以通过命令行修改为Hold-down模式。
图4 多区域组网场景的邻居震荡抑制
IGP-LDP联动和邻居震荡抑制同时部署的场景
如图5所示,PE1和P1之间链路发生故障时,LDP快速回切,导致新的LSP还没有完全建立时老的LSP就已经被拆除,为了避免引起业务中断,需要部署IGP-LDP联动。部署IGP-LDP联动特性后,设置新建立的邻居发布的链路开销值为最大值Max-cost(65535),避免IGP路由回切,等新的LSP建立完成后,再修改链路开销值为配置值,触发IGP路由回切,删除老的LSP,LDP业务流量切换到新建立的路径上。
IGP-LDP联动分为Hold-down模式和Hold-max-cost模式两种,邻居震荡抑制也分为Hold-down模式和Hold-max-cost模式两种。同时部署邻居震荡抑制和IGP-LDP联动时,优先生效Hold-down模式,次优生效Hold-max-cost模式,最后生效链路上配置的开销值。优先生效原则不以业务类型为条件,以最终生效的状态(Hold-down、Hold-max-cost、退出)为条件,详细情况请参考表1。
表1 震荡抑制模式优先生效原则
例如,如图5所示,PE1和P1之间发生频繁震荡。同时部署邻居震荡抑制和IGP-LDP联动,通过震荡抑制模式优先生效原则选取抑制模式,即在一段时间内禁止PE1和P1建立邻居关系或将PE1和P1之间的链路开销值设置为最大值Max-cost(65535),达到将业务流量切换到PE1->P4->P3->PE2路径的目的。
图5 IGP-LDP联动和邻居震荡抑制同时部署的场景
误码倒换和邻居震荡抑制同时部署的场景
误码倒换特性用于保护链路质量,当链路质量检测发现链路质量差,误码率高,就会上报误码事件,误码率高的链路上承载的用户业务会受到较大的影响,可能影响用户正常使用,因此需要将用户流量尽量调整到其他链路上。OSPF业务在收到误码事件后,会调整接口开销值为最大值Max-cost(65535),路由随即重新计算,重新选路,将业务流量切换到备选链路。误码倒换和邻居震荡抑制同时部署时,两种震荡抑制方式同时生效,优先生效Hold-down模式,次优生效Hold-max-cost模式,最后生效链路上配置的开销值。
OSPF Flush溯源
产生原因
当OSPF LSA被全网删除(Flush)而导致网络不稳定时,需要尽快定位到问题源头,以便隔离问题源。但是,目前OSPF协议本身没有溯源能力,无法快速定位上述问题。当上述问题出现时,通常采用分片隔离的方式,逐步逼近问题节点,问题定位过程复杂,耗时长,对用户网络业务也有影响。为了解决上述问题,OSPF新增一种私有协议,即溯源协议,该协议支持洪泛Flush源信息,当出现上述问题时,可以在任何一台设备上快速查询到网络中的Flush源信息,即快速定位故障源。
相关概念
溯源协议
溯源协议提供了一种Flush溯源机制,用于解决网络中定位某条OSPF LSA被哪台设备Flush的问题。它的特点如下:
- 采用新的UDP端口,溯源协议报文采用UDP协议报文承载,协议报文中携带被当前设备Flush的OSPF LSA信息,并沿OSPF邻居拓扑逐跳洪泛。
- 溯源协议依赖于现有OSPF协议,依赖OSPF邻居进行洪泛。但是该协议不依赖于现有OSPF报文传输通道,独立建立新的UDP通道承载报文。因此该协议可以方便的增量部署,对于没有打开相关UDP端口的老设备,不产生任何影响。
- 该协议的协议报文洪泛到网络中的其他设备后,在网络中登录任何一台支持本特性的设备后,都可以查看到Flush LSA的设备信息,方便维护人员快速确定网络中的故障节点,并对故障节点进行隔离。
Flush
OSPF LSA被全网删除。
PS-Hello报文
OSPF Flush溯源能力协商报文,用于在OSPF邻居上进行溯源能力的协商。
PS-LSA
当设备Flush OSPF LSA时,设备会生成PS-LSA,PS-LSA中携带发起Flush的节点相关信息和OSPF LSA的概要信息。
PS-LSU报文
OSPF Flush溯源协议报文,用于携带PS-LSA。
PS-LSU ACK报文
OSPF Flush溯源协议报文ACK,用于增强溯源协议报文可靠性。
OSPF Flush溯源协议端口
用于收发OSPF Flush溯源协议报文的UDP端口号,默认端口为50133,支持用户配置。
实现原理
OSPF Flush溯源的实现过程可以简单描述为:
- 溯源能力协商当OSPF邻居建立后,需要通过溯源能力协商报文PS-Hello协商两端设备的溯源能力。
- PS-LSA生成及洪泛当设备Flush OSPF LSA时,设备会生成PS-LSA,PS-LSA中携带发起Flush的节点相关信息和OSPF LSA的概要信息,将PS-LSA打包到PS-LSU报文中,并洪泛给具有溯源能力的邻居,其目的是让网络中其他设备尽快找到问题源头,以便隔离问题源。
被Flush的LSA只能是Router-LSA、Network-LSA、Inter-Area-Router-LSA。当设备Flush Router-LSA、Network-LSA、Inter-Area-Router-LSA时,才会产生PS-LSA。
溯源能力协商
溯源协议使用UDP传输协议承载该私有协议报文,并侦听UDP端口,用于接收溯源协议报文。当新设备和其他厂商设备或老设备等没有溯源能力的设备互通时,需要避免发送溯源报文给相关设备,以免被识别为攻击行为。因此需要在设备间针对溯源能力进行协商,溯源报文只发送给有溯源能力的设备,同时具有溯源能力的设备还需要帮助没有溯源能力的设备发送溯源信息,这个也需要根据协商获得的溯源能力来识别。
溯源协议依赖于现有OSPF协议,因此溯源协议的协商也依赖于OSPF邻居进行。当OSPF邻居建立后,向邻居发起溯源能力协商。溯源能力协商流程如图1所示:
图1 溯源能力协商
PS-LSA生成及洪泛
PS-LSA:当OSPF的LSA被Flush时,可以通过PS-LSA描述发起Flush的节点相关信息。
- 当主动Flush一条LSA时,需要生成PS-LSA,并洪泛给具有溯源能力的邻居。
- 设备收到不支持溯源能力的邻居的Flush LSA时,需要生成PS-LSA,并洪泛给具有溯源能力的邻居;收到多个不支持溯源能力邻居Flush的同一条LSA(LSID、Seq全相同),只生成一个PS-LSA。
- Router-LSA、Network-LSA、Inter-Area-Router-LSA被Flush时,需要同时生成PS-LSA,并打包到PS-LSU中,洪泛给具有溯源能力的邻居。
图2 PS-LSA的生成规则
PS-LSA的生成规则
- 节点DeviceA Flush Router-LSA、Network-LSA、Inter-Area-Router-LSA时,生成对应的PS-LSA,并添加到全部有溯源能力的邻居的发送队列中,PS-LSA中的Flush Router为节点DeviceA的Router ID,Neighbor Router为0。
- 节点DeviceA收到节点DeviceB(节点DeviceB没有溯源能力)发来的Flush LSA后,生成对应的PS-LSA,并添加到全部有溯源能力的邻居的发送队列中,PS-LSA中的Flush Router为节点DeviceA的Router ID,Neighbor Router是节点DeviceB的Router ID。
- 节点DeviceA收到节点DeviceB和节点DeviceC发来的同一条LSA的Flush LSA,节点DeviceB发来的LSA先到,生成对应的PS-LSA,并添加到全部有溯源能力的邻居的发送队列中,PS-LSA中的Flush Router为节点DeviceA的Router ID,Neighbor Router为节点DeviceB的Router ID。节点DeviceC发来的Flush LSA不生成PS-LSA。
PS-LSU报文的发送规则
- 当建立邻居时,初始化邻居的PS-LSU报文序列号,当发送PS-LSU报文时,需要携带邻居上的PS-LSU报文序列号。PS-LSU报文重传时,序列号不变。当收到相同序列号的PS-LSU ACK报文时,邻居上的PS-LSU序列号加1。
- 邻居管理PS-LSA的发送队列,当PS-LSA的发送队列由空变为不空时,启动定时器,定时器超时后,将队列中的PS-LSA打包到PS-LSU报文中,并发送给邻居同时启动定时器,等待PS-LSU ACK报文。
- PS-LSU ACK定时器超时后,重新发送PS-LSU。
- 当设备收到PS-LSU ACK报文,且序列号和邻居中记录的序列号相同时,清除邻居队列中的PS-LSA,并不会立刻发送下一个PS-LSU报文,需要等到定时器超时后再发送下一个PS-LSU报文。如果PS-LSU ACK报文中携带的序列号比邻居保存的序列号小,则忽略。如果PS-LSU ACK报文中携带的序列号比邻居保存的序列号大,则丢弃PS-LSU ACK报文。
PS-LSU报文的发送在各邻居上独立管理,互不影响。
PS-LSU报文的接收规则
- 当设备收到邻居发送的PS-LSU报文时,在邻居上记录PS-LSU报文携带的序列号,并向邻居回复PS-LSU ACK报文。
- 当设备收到PS-LSU报文携带的序列号和邻居上记录的PS-LSU序列号相同时,丢弃该PS-LSU报文。
- 在PS-LSU报文解析后,其中的PS-LSA需要安装到数据库中,在安装时,需要比较PS-LSA的新旧。如果收到的PS-LSA比较新,需要向其他邻居洪泛;如果收到的PS-LSA和本地相同,不用处理;如果收到的PS-LSA比较旧,需要将当前的PS-LSA洪泛给邻居。
- 当设备收到邻居发送的PS-LSU报文时,如果邻居状态是不支持溯源能力,需要修改邻居状态为支持溯源能力。
溯源安全
溯源协议使用UDP报文,需要打开私有端口收发协议报文,因此需要考虑该端口的安全性问题。
溯源协议也会带来更多的主机收发压力和带宽压力,为了避免溯源协议影响原有协议正常工作,需要对溯源协议的报文收发做一定的控制,减少溯源报文流量,避免对原有协议的影响。
溯源安全措施包括:
表2 溯源安全措施
典型场景
网络中的所有节点都支持溯源协议
假设网络中的全部节点都支持溯源协议,节点DeviceA是故障源。该场景下,故障源一定能精确查找到。如图3所示:
图3 网络中的所有节点都支持溯源协议场景
当DeviceA Flush OSPF LSA时,会同时产生PS-LSA,PS-LSA中携带DeviceA的节点信息和DeviceA Flush的OSPF LSA的概要信息,并逐跳洪泛PS-LSA到整个网络。当网络出现故障时,维护人员登录网络中的任何一台设备都可以根据溯源协议看到当前节点DeviceA正在发起大量Flush,是故障源。维护人员可以立刻采取措施,将节点DeviceA从网路中隔离出去,快速恢复网络。
网络中有不支持溯源协议的节点,但支持溯源协议的节点不被隔离
假设网络中节点DeviceC不支持溯源协议,其他节点都支持溯源协议,节点A是故障源。该场景下,PS-LSA能够洪泛到整个网络,故障源能够精确查找到。如图4所示:
图4 网络中有不支持溯源协议的节点,但支持溯源协议的节点不被隔离场景
当DeviceA Flush OSPF LSA时,会同时产生PS-LSA,PS-LSA中携带DeviceA的节点信息和DeviceA Flush的OSPF LSA的概要信息,并逐跳洪泛PS-LSA到整个网络。但是节点DeviceC不支持溯源协议,当DeviceB和DeviceE在与DeviceC进行溯源能力协商时,DeviceB和DeviceE发现DeviceC不支持溯源能力。因此当DeviceB收到DeviceA发来的PS-LSA时,不会再发给DeviceC了,只会发给DeviceD。DeviceA Flush LSA发给DeviceB,然后通过DeviceC发送到DeviceE时,DeviceE发现DeviceC不支持溯源协议,DeviceE帮助DeviceC生成PS-LSA,该PS-LSA中携带发布源(节点DeviceE)信息、Flush源(节点DeviceC)信息、被Flush的OSPF LSA信息,并向整个网络进行洪泛。
当网络出现故障时,维护人员登录网络中的DeviceC以外的任何一台设备都会发现当前网络中有两个故障源,一个故障源是DeviceA发布的,宣称自己发起了大量的Flush,另一个故障源是DeviceE发布的,宣称DeviceC可能发起了大量Flush,并且DeviceA和DeviceC都Flush了相同的LSA。在这个情况下认为DeviceA宣称DeviceA Flush的优先级比DeviceE宣称DeviceC Flush更高,因此DeviceA为当前的故障源,采取措施隔离节点DeviceA。隔离后,网路恢复正常。
网络中有不支持溯源协议的节点,但支持溯源协议的节点被隔离
假设网络中节点DeviceC和DeviceD不支持溯源协议,其他节点都支持溯源协议,节点A是故障源。该场景下,PS-LSA不能够洪泛到整个网络,故障源只能在一定范围内查找,不能精确找到。如图5所示:
图5 网络中有不支持溯源协议的节点,但支持溯源协议的节点被隔离场景
当DeviceA Flush OSPF LSA时,会同时产生PS-LSA,PS-LSA中携带DeviceA的节点信息和DeviceA Flush的OSPF LSA的概要信息,并逐跳洪泛PS-LSA到整个网络。但是节点DeviceC和DeviceD不支持溯源能力,DeviceA发送的PS-LSA到DeviceB就终结了,无法继续洪泛到网络的其他节点。
当节点DeviceE和DeviceF在与DeviceC和DeviceD进行溯源能力协商时,DeviceE和DeviceF发现DeviceC和DeviceD不支持溯源能力。因此当DeviceE和DeviceF收到DeviceC和DeviceD发来的PS-LSA时,DeviceE和DeviceF会帮助DeviceC和DeviceD生成PS-LSA,并洪泛到剩余网络中。
当网络出现故障时:
- 如果维护人员登录DeviceA和DeviceB,可以立刻发现DeviceA上存在故障,并采取措施隔离DeviceA;隔离后发现网络已经恢复。
- 如果维护人员登录DeviceE、DeviceF、DeviceG和DeviceH节点中的任何一个,发现DeviceE和DeviceF同时针对同一个OSPF协议报文宣称DeviceC和DeviceD是可能故障源。
- 如果维护人员登录DeviceC和DeviceD,发现DeviceC和DeviceD并没有主动发起Flush,DeviceC和DeviceD发给DeviceE和DeviceF的Flush报文是来自于DeviceB。
- 如果维护人员登录DeviceB,发现DeviceA是故障源,采取措施隔离DeviceA后,网络故障恢复。
OSPF多区域邻接
产生原因
OSPF在区域内选路是最短路径优先,但当区域间路径最短时,还是会优选区域内路径。如果某个区域的某段路径是高速链路,按照OSPF协议要求,该链路所在接口只能属于一个区域,其他区域的路由无法同时使用此段高速链路进行传输,只能选择低速链路。目前通过配置多个子接口,每个子接口分别使能到不同区域可以解决上述问题,但是此方法的缺点在于使能多个子接口,需要为每个子接口配置独立的IP地址,这样会发布很多IP地址,增加路由总量。为了解决上述缺陷,OSPF多区域邻接特性(OSPF Multi-Area Adjacency)应运而生。
OSPF多区域邻接特性是一种将OSPF接口复用到多个区域下的技术,可以实现一条路径在多个区域共用。
图1 配置OSPF多区域邻接前后示意图
如图1所示,在区域Area1中,DeviceA和DeviceB之间的链路是高速链路。
如图1a所示,配置OSPF多区域邻接之前,Area2中DeviceA到DeviceB的流量是沿区域内低速路径DeviceA->DeviceC->DeviceD->DeviceB转发。
如图1b所示,配置OSPF多区域邻接之后,DeviceA和DeviceB之间建立了多区域邻接接口,该多区域邻接接口属于Area2,因此Area2中DeviceA到DeviceB的流量沿DeviceA->DeviceB这条高速链路转发。
该特性的优势在于:
- 接口复用,减少多区域部署情况下的OSPF接口资源的占用。
- 链路复用,避免流量绕行低速链路,优化了OSPF网络。
相关概念
多区域邻接接口:正常使能OSPF的接口为OSPF主接口,通过在OSPF主接口上使能多区域邻接建立的OSPF逻辑接口,称为多区域邻接接口,也可以称为secondary接口。多区域邻接接口的特点:
- 多区域邻接接口和主接口属于不同的OSPF区域。
- 多区域邻接接口的接口类型只能是P2P类型的,且运行独立的接口状态机和邻居状态机。
- 多区域邻接接口和主接口有相同的接口索引,共用报文发送通道,通过OSPF报文头的区域ID结合配置信息识别是否是多区域邻接接口报文。
- P2P接口的多区域邻接接口使用组播发送协议报文。
- 非P2P接口的多区域邻接接口使用单播发送协议报文。
实现原理
图2 OSPF多区域邻接原理图
如图2所示,在区域Area1中,DeviceA和DeviceB之间的链路是高速链路,在Area2中,DeviceA到DeviceB的流量沿区域内低速路径DeviceA->DeviceC->DeviceD->DeviceB转发。当用户希望Area2内DeviceA到DeviceB的流量也能沿DeviceA->DeviceB这条高速链路转发,则需要部署OSPF多区域邻接特性。
在DeviceA和DeviceB的主接口上部署OSPF多区域邻接特性,建立多区域邻接接口,该多区域邻接接口属于区域Area2。
- DeviceA和DeviceB的多区域邻接接口之间建立邻接关系,建立过程同OSPF基本协议,具体请参见建立邻接关系。
- 路由计算,计算过程同OSPF基本协议,具体请参见路由计算。
OSPF路由计算出Area2中最优路径为DeviceA->DeviceB,因此DeviceA到DeviceB的流量沿DeviceA->DeviceB这条高速链路转发,达到该条高速链路在Area1和Area2中共用的目的。
OSPF IP FRR
OSPF IP FRR(Fast Reroute)利用全网链路状态数据库,预先计算出备份路径保存在转发表中,以备在故障时提供流量保护,将故障恢复时间降低。
产生原因
随着网络的不断发展,VoIP(Voice over IP)和在线视频等业务对高质量和实时性的要求越来越高。OSPF协议的故障恢复过程是“故障感知->LSA更新->LSA泛洪->路由计算和下发FIB->故障恢复”,经过这几个过程才能让流量切换到新的链路上,因此故障恢复的时间远远超过了用户感知流量中断的时间,无法满足网络业务的实时性要求,OSPF IP FRR可以解决这个问题。OSPF IP FRR是遵循标准协议的动态IP FRR,可为流量提供链路和节点的保护,确保流量中断时间降低,实现链路故障后可以快速切换。
目前主要的FRR技术包括:LFA(Loop-Free Alternate), U-turn, Not-Via, Remote-LFA和MRT,OSPF仅支持LFA和Remote LFA。
相关概念
OSPF IP FRR
OSPF IP FRR利用LFA算法预先计算好备份下一跳路由,并与主链路路由一起加入转发表。当网络出现故障时,OSPF IP FRR可以在控制平面路由收敛前将流量快速切换到备份链路上,保证故障恢复时间降低,从而达到保护流量的目的。
OSPF IP FRR Policy
OSPF IP FRR Policy是指对需要加入IP路由表的备份路由进行过滤,通过过滤策略的备份路由才会加入到IP路由表中,这样用户可以更灵活的控制加入IP路由表的OSPF备份路由。
LFA算法
LFA(Loop-Free Alternate)算法计算备份链路的基本思路是:以可提供备份链路的邻居为根节点,利用SPF算法计算到达目的节点的最短距离,然后按照标准协议规定的不等式计算出开销最小且无环的备份链路。
Remote LFA
LFA FRR对于某些大型组网,特别是环形组网,无法计算出备份路径,不能满足可靠性要求。在这种情况下,实现了Remote LFA FRR。Remote LFA算法根据保护路径计算PQ节点,并在源节点与PQ节点之间建立tunnel隧道形成备份下一跳保护。当保护链路发生故障时,流量自动切换到隧道备份路径,继续转发,从而提高网络可靠性。
P空间
在Remote LFA中, 以保护链路源端为根节点(包括保护链路的情况下)计算到网络中其他节点的SPF树,再从根节点排除其中需要经过保护链路的节点,剩余节点的集合称为P空间。
扩展P空间
在Remote LFA中,以保护链路源端的所有邻居(包括保护链路的情况下)为根节点分别建立SPF树,再从根节点排除其中需要经过保护链路的节点,剩余节点的集合称为扩展P空间。
Q空间
在Remote LFA中,以保护链路末端为根节点(包括保护链路的情况下)计算到网络中其他节点的SPF树,再从根节点排除其中需要经过保护链路的节点,剩余节点的集合称为Q空间。
PQ节点
在Remote LFA中,PQ节点是指既在扩展P空间又在Q空间的节点,PQ节点会作为保护隧道的目的端。
OSPF LFA FRR
OSPF LFA FRR流量保护分为链路保护和节点链路双保护,节点链路双保护的优先级高于链路保护的优先级。
链路保护
当需要保护的对象是经过特定链路的流量时,流量保护类型为链路保护。
如图1所示,流量从Device S到Device D进行转发,主链路是Device S->Device E->Device D,备份链路是Device S->Device N->Device E->Device D。当链路开销满足不等式Distance_opt(N,D)
Distance_opt(X,Y)指节点X到Y之间的最短路径,S是转发流量的源节点,N是备份链路的节点,D是流量转发的目的节点。
图1 OSPF IP FRR链路保护
节点链路双保护
当需要保护的对象是经过特定节点和链路的流量时,流量保护类型为节点链路双保护。
如图2所示,流量从Device S到Device D进行转发,主链路是Device S->Device E->Device D,备份链路是Device S->Device N->Device D。配置OSPF IP FRR功能后,可以保证当主链路故障后,Device S将流量切换到备份链路转发,确保流量中断降低。
节点链路双保护需同时满足如下两个条件:
- 链路开销必须满足Distance_opt(N,D)
- 设备的接口开销必须满足Distance_opt(N,D)
Distance_opt(X,Y)指节点X到Y之间的最短路径,S是转发流量的源节点,E是发生故障的节点,N是备份链路的节点,D是流量转发的目的节点。
图2 OSPF IP FRR节点链路双保护
OSPF Remote LFA FRR
与OSPF LFA FRR相似,Remote LFA也分为链路保护和节点链路双保护两种类型。下面以链路保护为例介绍Remote LFA的实现过程。
如图3所示,假设流量路径为PE1→P1→P2→PE2,为避免P1、P2之间的链路故障导致流量丢失,Remote LFA会计算出PQ节点,并在P1和PQ节点(P4)之间建立LDP隧道。当P1检测到P1、P2之间的链路故障时,将报文封装为MPLS报文转发给P4,P4收到该报文后,去掉MPLS标签,重新查找IP路由表,将报文转发给下一跳,并最终到达目的地PE2,实现了快速保护,避免流量丢失。
图3 Remote LFA典型组网图
以图3为例,PQ节点的计算流程为:
- 分别计算以所有P1的邻居(不包括通过保护链路的邻居)为根的SPF树,每棵SPF树中从根节点不经过P1→P2链路可达的节点为P空间,所有邻居的P空间集合得到扩展P空间{PE1,P1,P3,P4};
- 计算以P2为根节点的反向SPF树,得到Q空间{PE2,P4};
- 即在扩展P空间又在Q空间的节点,即PQ节点(P4)。
OSPF防微环
如图3所示,使能OSPF Remote LFA FRR功能,主链路为PE1->P1->P2->PE2,备份链路为PE1->P1->P3->P4->P2->PE2(其中P1->P3->P4是LDP隧道),在主链路发生故障切换备份链路之后,开始计算新的主链路,即P1重新进行路由收敛,P1的下一跳变为P3,由于P3的收敛速度慢于P1,此时P3还没有完成收敛,P3的下一跳还是P1,这样在P1和P3之间就形成了短时间的环路。为了避免这个问题,使能OSPF防微环功能,通过延时P1切换到新的下一跳,等P3将下一跳收敛为P4后,P1再进行收敛,流量成功切换到新的主链路PE1->P1->P3->P4->P2->PE2(其中P1->P3->P4是IP转发),并且避免了环路的产生。
OSPF防微环功能仅对OSPF Remote LFA FRR生效。
多节点发布相同路由场景中的OSPF FRR
OSPF LFA FRR和OSPF Remote LFA FRR都是通过提供备份链路的邻居为根节点,利用SPF算法计算到达目的节点的最短距离,计算的结果是基于节点的备份下一跳,适合于路由源单一的场景。随着网络的多元化,某些网络中会部署双ABR或双ASBR,用来增强网络的可靠性,此时就产生了多节点发布相同路由场景中的OSPF FRR。
在多节点发布相同路由场景下,区域内、区域间、ASE/NSSA路由场景最终都会归结为对本区域ABR节点发布的Type-3 LSA进行FRR计算,因此,多节点发布相同路由场景下的OSPF FRR计算方法一致。仅以区域间路由在多节点发布相同路由场景下的FRR计算为例进行如下描述。
图4 多节点发布相同路由场景下的OSPF FRR
如图4所示,Device B和Device C作为ABR来转发区域0和区域1间的路由。此时,Device E发布一条区域内路由,Device B和Device C会转换成Type-3 LSA向区域0洪泛。如果在Device A上使能OSPF FRR,Device A认为有两个邻居Device B和Device C,由于没有固定的邻居作为根节点,Device A无法进行FRR备份下一跳的计算。为了解决这个问题,在Device B和Device C之间构造一个虚拟节点Virtual Node,将多节点发布的相同路由转换为路由源单一的路由,然后按LFA、Remote LFA算法计算虚拟节点的备份下一跳,多节点发布的相同路由从其创建的虚拟节点继承备份下一跳。
例如,Device B和Device C分别发布一条前缀10.1.1.0/24的路由,在Device A上使能OSPF FRR,由于10.1.1.0/24存在两个路由源Device B和Device C,Device A无法计算路由10.1.1.0/24的备份下一跳。此时,根据路由10.1.1.0/24的两个路由源创建一个新虚拟节点Virtual Node,与Device B和Device C分别形成链路。Virtual Node上发布一条前缀10.1.1.0/24,开销值是Device B和Device C发布的路由开销值的较小值。假设Device B发布的路由开销值为5,Device C发布的路由开销值为10,那么Virtual Node发布的路由开销值为5。此时Device B指向Virtual Node的链路开销值为0,Device C指向Virtual Node的链路开销值为5,Virtual Node指向Device B和Device C的链路开销值都是最大值Max-cost(65535)。在Device A上将Device B和Device C发布的路由源10.1.1.0/24设置为无效路由源,只用Virtual Node发布的路由源进行计算,将多节点发布的相同路由10.1.1.0/24虚拟成路由源单一的路由10.1.1.0/24,然后按LFA、Remote LFA算法计算Virtual Node的备份下一跳。
多节点发布相同路由场景下的OSPF FRR可以采用LFA,也可以采用Remote LFA。采用Remote LFA时,选择PQ节点有如下限制:
- 由于Remote LFA会在故障节点和PQ节点之间建立LDP隧道,而多节点发布相同路由场景下的虚拟节点无法承载LDP隧道,因此虚拟节点不能被选作PQ节点。
- 由于Remote LFA的目的节点不会被选作PQ节点,多节点发布相同路由场景增加虚拟节点后,目的节点就变为虚拟节点了,因此,与虚拟节点直连的节点不能被选为PQ节点。
衍生功能
将BFD会话与OSPF IP FRR进行绑定,当BFD检测到接口链路故障后,BFD会话状态会变为Down并触发接口进行快速重路由,将流量从故障链路切换到备份链路上,从而达到流量保护的目的。
OSPF认证
OSPF认证是基于网络安全性的要求而实现的一种加密手段,通过在OSPF报文中增加认证字段对报文进行加密。当本地设备接收到远端设备发送过来的OSPF报文,如果发现认证密码不匹配,则将收到的报文进行丢弃,达到自我保护的目的。
根据报文的种类,认证可以分为以下两类:
- 区域认证:在OSPF区域视图下配置,对本区域的所有接口下的报文进行认证。
- 接口认证:在接口视图下配置,对本接口的所有报文进行认证。
根据报文的认证方式,可以分为:
- 空认证:不进行认证。
- 简单认证:这是一种简单的加密方式,将配置的密码直接加入报文中,这种加密方式安全性不高。
- MD5(Message Digest 5)认证:通过将配置的密码进行MD5等加密算法之后再加入报文中,这样提高了密码的安全性。目前支持MD5/HMAC-MD5(Hash Message Authentication Code for Message Digest 5)。为了保证更好的安全性,建议不要使用MD5算法,推荐使用HMAC-SHA256算法。
- Keychain认证:Keychain由多个认证密钥组成,每个密钥包含一个ID和密码。密钥存在生命期,通过密钥的生命期可以在Keychain中滚动选择不同的认证密钥。Keychain可以滚动选择认证密钥来增强防攻击性。Keychain为OSPF提供了认证保护,Keychain通过动态的更改认证算法和密钥,提高了OSPF的安全性。应用Keychain认证,除了可以对OSPF协议报文进行认证之外,还可以对TCP建立连接的过程进行认证。Keychain的详细描述请参见《NE设备特性描述-安全》中Keychain章节。
- HMAC-SHA256(Hash Message Authentication Code for Secure Hash Algorithm 256)认证:通过将配置的密码进行HMAC-SHA256算法加密之后再加入报文中,提高密码的安全性。
OSPF通过在报文中携带认证信息,在报文头部携带认证类型,在报文尾部携带认证信息。
认证类型包括:
- 0:空认证
- 1:简单认证
- 2:密文认证
组网应用
图1 广播网中的OSPF认证
配置要求:
- 在同一网络中的多台设备,当配置的接口认证完全相同,才能建立OSPF邻居。
- 如果多台设备在同一个区域中,必须将区域认证配置成完全相同。
OSPF报文格式
OSPF用IP报文直接封装协议报文,协议号为89。OSPF分为5种报文:Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。
- Hello报文
- DD报文
- LSR报文
- LSU报文
- LSAck报文
报文头格式
OSPF这五种报文具有相同的报文头格式,长度为24字节。如图1所示。
图1 报文头格式
MD5验证数据添加在OSPF报文后面,不包含在Authenticaiton字段中。
Hello报文
最常用的一种报文,其作用为建立和维护邻接关系,周期性的在使能了OSPF的接口上发送。报文内容包括一些定时器的数值、DR、BDR以及已知的邻居。Hello报文格式如图2所示。
图2 Hello报文格式
Hello报文在不同网络中的发送地址类型、发送时间间隔类型和时间间隔缺省值不同,参见表3。
表3 Hello报文的属性
在同一网段上的NE,其HelloInterval、PollInterval和RouterDeadInterval必须分别一致,否则不能形成邻居关系。在NBMA网络上还有一种PollInterval。
DD报文
两台NE在邻接关系初始化时,用DD报文描述本端NE的LSDB,进行数据库的同步。报文内容包括LSDB中每一条LSA的Header(LSA的Header可以唯一标识一条LSA)。LSA Header只占一条LSA的整个数据量的一小部分,这样可以减少NE之间的协议报文流量,对端NE根据LSA Header就可以判断出是否已有这条LSA。在两台NE交换DD报文的过程中,一台为Master,另一台为Slave。由Master规定起始序列号,每发送一个DD报文序列号加1,Slave方使用Master的序列号作为确认。
DD报文格式如图3所示。
图3 DD报文格式
LSR报文
两台NE互相交换过DD报文之后,需要发送LSR报文向对方请求更新LSA,内容包括所需要的LSA的摘要信息。LSR报文格式如图4所示。
图4 LSR报文格式
LS type、Link State ID和Advertising Router可以唯一标识出一个LSA。当两个LSA一样时,需要根据LSA中的LS sequence number、LS checksum和LS age来判断出所需要LSA的新旧。
LSU报文
LSU报文用来向对端NE发送其所需要的LSA或者泛洪本端更新的LSA,内容是多条LSA(全部内容)的集合。LSU报文在支持组播和广播的网络中是以组播形式将LSA泛洪出去。为了实现Flooding的可靠性传输,需要LSAck报文对其进行确认,对没有收到确认报文的LSA进行重传,重传的LSA是直接发送到邻居的。LSU报文格式如图5所示。
图5 LSU报文格式
LSAck报文
LSAck报文用来对接收到的LSU报文进行确认,内容是需要确认的LSA的Header(一个LSAck报文可对多个LSA进行确认)。LSAck报文根据不同的链路以单播或组播的形式发送,LSAck报文格式如图6所示。
图6 LSAck报文格式
OSPF LSA格式
在AS内的每台NE,根据NE的分类产生一种或多种LSA。LSA的集合形成了LSDB(Link-state Database)。OSPF中对路由信息的描述都是封装在LSA中发布出去的。常用的LSA包括:
- Router-LSA
- Network-LSA
- Summary-LSA(包括Network-summary-LSA和ASBR-summary-LSA)
- AS-External-LSA
LSA头部信息
所有的LSA都有相同的报文头,其格式如图1所示。
图1 LSA的头格式
Router-LSA
Router-LSA(Type1):每个NE都会产生,描述了NE的链路状态和花费,在所属的区域内传播。Router-LSA格式如图2所示。
图2 Router-LSA格式
Network-LSA
Network-LSA(Type2):由广播网或NBMA(Non Broadcast Multiple Access)网络中的DR产生,Network-LSA中记录了这一网络上所有NE的Router ID,描述本网段的链路状态,在所属的区域内传播。Network-LSA格式如图3所示。
图3 Network-LSA格式
Summary-LSA
Network-summary-LSA(Type3):描述区域内某个网段的路由,并通告给其他相关区域。
ASBR-summary-LSA(Type4):描述到ASBR的路由,通告给除ASBR所在区域的其他相关区域。
Type3和Type4的LSA有相同的格式,它们都是由ABR产生。Summary-LSA格式如图4所示。
图4 Summary-LSA格式
AS-External-LSA
AS-External-LSA(Type5):由ASBR产生,描述到AS外部的路由,这是五种LSA中,唯一一种通告到所有区域(除了Stub区域和NSSA区域)的LSA。AS-External-LSA格式如图5所示。
图5 AS-External-LSA格式