华为数通笔记-ospf扩展

Router ID

1.在R1上先配置环回口1.1.1.1 ,在R2先配置接口地址,在建立邻居时,可以发现R1的Router ID为1.1.1.1,R2的Router ID为192.168.1.2。

2. 在进程下,修改R2的router id为2.2.2.2 32,要刷新ospf进程,此时R2的router ID 为2.2.2.2

 

由上可知:

1.在OSPF协议进程号配置自己配置的RID(这是属于OSPF的RID,不会影响全局的RID,推荐使用),优先于全局配置的router id。

2.在全局配置模式中自己配置的RID。改变的是全局RID,在没有配置OSPF的RID的前提下,OSPF会用这个全局RID作为自己的RID。

3.华为默认使用设备上第一个IP地址作为全局router-id,即在未配置ospf router id的情况下,选取第一个启动的接口地址作为router id。

注:router ID不可以是0.0.0.0 或 255.255.255.255。

OSPF的router-ID刷新规则:

当且仅当被选举为routerID的接口的地址被删除或修改,才会触发选举过程,此过程需要reset OSPF进程才生效。

被选择的接口状态改变、新配置更大的loopback或其他接口地址,均不会导致router id重新选举。

OSPFRouter-ID冲突导致的问题:

 场景1: 同一网段,R1和R2均在area0,R1、R2具有相同的routerID。

结果:R1、R2无法建立OSPF邻居关系。

分析:R1发送hello包后,R2收到R1的hello包,发现routerID与自己的router ID一致,邻居无法建立。

场景2: 不同网段,同一区域,R2/R3具有相同的routerID。

结果:R1和R3、R1和R2能分别建立OSPF邻居。R1能学到R2或R3路由,但路由会不停地抖动,一会儿学到R2的,一会儿学到R3。R2、R3互相学到路由。

分析:

OSPF是以{type、ls id、advrouter}来标识LSA,以(age、seq num、checksum)标识一个LSA实例。R3发送的LSA,R1泛洪,R2收到该LSA。R2检查收到的LSA,发现{type、ls id、adv router}与自己一致,就认为是自己始发的LSA。R2比较(age、seq num、checksum),发现该LSA比自身存的数据库更新,则seq num+1,回复LSA。

R1收到R2的LSA后,发现{type、ls id、adv router}与自己数据库的R3的一致,认为是一条LSA;再比较(age、seq num、checksum),发现seqnum更大,LSA更加新,则泛洪。

R3收到R1转发的R2的LSA,{type、ls id、advrouter}一样,(age、seq num、checksum)更新,跟R2一样的操作。

R3/R1/R2之间不停地传递LSA,不断循环。因此,R1一会儿学到R3的路由,一会儿学到R2的路由。R2、R3能互相学到路由。但是由于R1路由器的问题,无法正常通信。

华为模拟器实验表明:这种情况循环多次后,R2/R3会重新选举一个routerID发起OSPF邻居建立过程,邻居建立后,R1能正常学到R2、R3的路由。R2和R3也能够进行正常通信。

场景3: 不同区域,R1、R2为area0,R4为area1,R1、R4具有相同的routerID。

结果:area0,R1能与R2建立邻居关系;area1,R2能与R4建立邻居关系。R1、R4能互相学到路由。

分析:

R1发送LSA,R2收到后,向area1发送3类LSA:LS ID为路由前缀,R2为ABR,adv router为R2的router ID。R4收到3类LSA后,发现是新的router id,与自己不同,纳入LSDB,并提交路由表。

R4发送的LSA,R2、R1相同处理,均能学到路由。

这里可以会发现,不同区域中RID相同是可以互相学习到路由条目的,但是为什么要求在同一个AS中要保持唯一的,这是因为中间ABR可能会以为这个路由器同时处在两个AS内部,与实际的拓扑有出入,为了保证没有任何的问题发生,最好不要设置为同样的RID号。

虚链路的概念

因为OSPF采用了区域化的设计,并且区域也采用了Hub-Spoke的架构,所有区域中定义出一个核心,然后其它部分都与核心相连,OSPF的区域0就是所有区域的核心,称为BackBone 区域(骨干区域),而其它Normal 区域(常规区域)应该直接和骨干区域相连,常规区域只能和骨干区域交换LSA,常规区域与常规区域之间即使直连也无法互换LSA,但在某些情况下,某些常规区域无法与骨干区域直连,这时便无法得到其它区域的路由,因此,设计了将骨干区域的范围通过虚拟的方法进行扩展到相邻常规区域的位置,因而让不能直接与骨干区域相连的区域,最终可以与骨干区域直连,这种对骨干虚拟的扩展和拉伸就是OSPF虚链路(Virtual Link)能实现的。

因为某些常规区域不能与骨干区域直连而只能与其它常规区域直连,所以OSPF虚链路(Virtual Link)通过将相邻的常规区域虚拟为骨干区域,从而让那些不能与骨干区域直连的常规区域也能获得其它OSPF区域的路由。与骨干区域相邻的常规区域被扩展后,该区域被称为Transit Area,理论上Transit Area不应该为末节区域。

虚链路使用场景:

场景一:

在上图中,区域2只能与区域1直连,而无法与骨干区域直连,在这种情况下,由于常规区域与常规区域之间即使直连也无法互换LSA,R3不是ABR(ABR是需要连接的区域至少有一个为区域0),但因为没有连接骨干区域,最后不可能将任何区域的LSA发进区域2,最终导致区域2无法外其它区域通信,在这种情况下,需要通过OSPF虚链路将骨干区域的范围扩展到相邻的区域1,如下图:

 在进行OSPF虚链路扩展后,区域1被虚拟成了骨干区域,而这时的R3等同于连接骨干区域和区域2的ABR(因为有一个virtual接口在区域0,因此变成了ABR),所以可以将自己所有的LSA发进区域2。在扩展OSPF虚链路时,是通过连接R2(ABR)与R3(ABR)的Router-ID 来建立的。

场景2

因为OSPF虚链路(Virtual Link)能将骨干区域扩展到相邻的常规区域,从而将常规区域虚拟为骨干区域,所以在某些情况下,如公司合并,或者为了备份骨干区域,可能出现骨干区域被常规区域所隔离,如下图:

图中骨干区域被区域1分割为两部分,将使得骨干区域自己的路由无法相互传递,在使用OSPF虚链路后,可以将区域1也扩展为骨干区域,如下图:

 在经过OSPF虚链路将区域1也扩展为骨干区域后,可见所有的区域都变成了骨干区域,从而使网络中骨干区域能够收到另外一边被分割的骨干区域的路由,并且最后骨干区域自己的路由都为Intra-Area RouteArea 1与骨干区域的路由将仍然为O IA(域间路由)。

场景三:

除此之外,虚链路还可以解决次优路径问题及增加骨干区域的可靠性,如下图:

 

图中,存在次优路径及骨干区域不健壮的问题。

R3和R4间在Areal.上创建Vlink,作用有两个,一个作用是可以用于提高Area0 的健壮性,避免R1R2之间链路断开而导致的Area0分裂。另一个作用在于,若R4访问R3的G0/0/0接口,如果不做Vlink,需要经过Area0中的R2和R1(此接口通告进入了R0),而做了Vlink后,R4访问R3G0/0/0经过R5到R3,这可解决次优路径问题。即R4访问G0/0/0接口,路径R4-R5-R3优于R4-R2-R1-R3。

注意点:

OSPF虚链路必须是在两个拥有共同区域的ABR之间建立的,其中必须至少有一个ABR是连接骨干的

OSPF虚链路被认为是骨干区域的一个接口,一条链路,也需要建立OSPF邻居,但在邻居建立之后,链路上是没有Hello包传递的。

虚链路LSA格式:

Flag字段:v位为0表示了这是虚链路的LSU报文,1表示不是虚链路的数据。

一类LSA:type为virtual

查看LSDB中的信息:

具体携带的内容,Link ID含义为Vlink对端ABRRIDdata为自己与之相连的接口ip地址。其实和P2P的是一样的,不过这里是不是直连的而已,所以还需要通过对端RID,通过区域内LSA计算得到对端的地址以本地LSAdata的地址发送单播信息与对端建立邻接关系。

OSPF在虚链路中建立邻居的OSPF 所有报文是单播报文(例如下面的hello报文)源目地址是虚链路两个ABR的地址因为两台路由器可能不是直连的,并且对应的所有报文的ttl值为255,普通的OSPF报文为1

虚链路导致的环路问题:

R1宣告一条10.1.1.1的路由,R2和R4之间做虚链路,并且把双方的接口开销改为1000,会出现什么问题?

右侧骨干区域访问10.1.1.1时会在AR4,AR5,AR6 之间产生环路,从而发生丢包。

原因:AR2,AR3都是ABR,会将Area0区域中的10.1.1.1的一类LSA转成三类LSA传递到Area1区域,AR4, AR5也是ABR,从非骨干区域收到三类LSA是不参与路由计算的,所以不会加入路由表; AR2和AR4做了虚链接,并且修改了开销值为1000,所以AR4收到的10.1.1.1的一类LSA传递路径是AR2 -AR3-AR5-AR4,并且会将该1类LSA传递给的AR6所在的Area0区域,AR5同样会收到从AR6传递过来的关于10.1.1.1的1类LSA。

当AR6访问10.1.1.1的时候,因为是从AR4收到10.1.1.1的1类LSA,所以会把数据转发给AR4,而AR4会优选从虚链路传递过来的10.1.1.1的一类LSA,且虚链接的对端是AR2,通过SPF计算出的下一跳为AR5,所以会把数据转发给AR5,而AR5会优选从Area0接收到的10.1.1.1的一类LSA,所以会把数据重新转发给AR6,从而在AR4,AR5,AR6之间产生环路。同理可得AR4,AR5访问10.1.1.1时也会在AR4,AR5,AR6 之间产生环路。

 

虚链路的区域为什么不存在区域0的汇总路由:

场景说明:

Area 0中的路由通过 ABR R2通告到Area 1中,为减少Area 1中路由的数量,在边界 ABR R2上做路由的聚合。

但由于在Area1 (Transit Area).上创建Vlink后,R2无法再对骨干区域路由做聚合原因是为了避免在Transit Area内出现路由环路。

具体分析:

如果能聚合成功的话,在图中,Area 1的边界路由器R2执行聚合,产生LSA3(包含路由10.0.0.0/8), R4执行路由聚合,产生LSA3 (包含路由10.1.0.0/16), Area1 的网络结构是一个线性的网络,R3上会收到R2和R4通告的聚合路由,所以R3上10.0.0.0/8路由下一跳指向R2,而10.1.0.0/16 路由下一跳指向R4。

若R3收到访问10.1.3.1 的数据包,R3 路由报文到R4,R4上有Vlink,所以路由表中有到达10.1.1.0/24、10.1.2.0/24、10.1.3.0/24的Area0的路由并指向R3,R4会送流量到R3,R3会送流量到R4,路由环路出现。

若Vlink邻居不存在,则R4不是ABR,不能执行路由聚合,仅R2上可以执行路由聚合,环路不会发生。

知识点:Vlink做好之后,Vlink端点路由器都将成为ABR并在区域间传递路由,可以执行聚合/区域间路由过滤。上图中:(1) (2)处不会产生聚合路由,Area0 中明细路由仍会通告到Area1,图中仅(3)处会产生聚合路由。

 

OSPF的认证机制:

接口认证和区域认证同时开启时,接口认证优于区域认证。

认证的方式有多种,例如md5,keychain等,这里我们用md5进行认证:

ospf authentication-mode md5 1 cipher xxx

当我们配置完一边时,另外一边检测到对方开启的认证,自己没开启,不会进行识别,当hello包老化后就会断掉连接,同理,本端也会因为对方发送的报文中没有加密认证,不接收,当hello包老化后断开连接。

我们可以抓包查看OSPF报文的加密信息,在OSPF报文头部中都会带有:

需要注意的是,开启了区域认证,那么整个区域的的设备都需要开启。

OSPF收敛特性:

快速收敛:

OSPF快速收敛是为了提高路由的收敛速度而做的扩展特性。

技术一:

I-SPF(Incremental SPF)改进了这个算法,除了第一次计算时需要计算全部节点外,每次只计算受到影响的节点,而最后生成的最短路径树SPT与原来的算法所计算的结果相同,大大降低了CPU的占用率,提高了网络收敛速度。

技术二:

PRC(Partial Route Calculation)部分路由计算的原理与I-SPF相同,都是只对发生变化的路由进行重新计算。不同的是,PRC不需要计算节点路径,而是根据I-SPF算出来的SPT来更新路由。在路由计算中,叶子代表路由,节点则代表路由器。SPT变化和叶子变化都会引起路由信息的变化,但两者不存在依赖关系,PRC根据SPT或叶子的不同情况进行相应的处理:

• SPT变化,PRC处理变化节点上的所有叶子的路由信息。

• SPT没有变化,PRC不会处理节点的路由信息。

• 叶子变化,PRC处理变化的叶子的路由信息。

• 叶子没有变化,PRC不会处理叶子的路由信息。

在路由计算中,路由代表叶子,路由器则代表节点。如果I-SPF计算后的SPT改变,PRC会只处理那个变化的节点上的所有叶子;如果经过I-SPF计算后的SPT并没有变化,则PRC只处理变化的叶子信息。

技术三:

智能定时器,OSPF智能定时器分别对路由计算、LSA的产生、LSA的接收进行控制,加速网络收敛。OSPF智能定时器可以通过以下两种方式来加速网络收敛:

• 在频繁进行路由计算的网络中,OSPF智能定时器根据用户的配置和指数衰减技术动态调整两次路由计算的时间间隔,减少路由计算的次数,从而减少CPU的消耗,待网络拓扑稳定后再进行路由计算。

• 在不稳定网络中,当路由器由于拓扑的频繁变化需要产生或接收LSA时,OSPF智能定时器可以动态调整时间间隔,在时间间隔之内不产生LSA或对接受到的LSA不进行处理,从而减少整个网络无效LSA的产生和传播。

• 智能定时器对路径计算的作用:

根据本地维护的链路状态数据库LSDB,运行OSPF协议的路由器通过SPF算法计算出以自己为根的最短路径树,并根据这一最短路径树决定到目的网络的下一跳。通过调节SPF的计算间隔,可以抑制网络频繁变化可能导致的占用过多带宽资源和路由器资源。

在一定组网环境下(例如对路由收敛时间要求较高的环境),可以指定以毫秒为单位的时间间隔,用来增加路由计算的频度,从而加快路由的收敛。

当OSPF的链路状态数据库(LSDB)发生改变时,需要重新计算最短路径。如果网络频繁变化,由于不断的计算最短路径,会占用大量系统资源,影响路由器的效率。通过配置智能定时器,设置合理的SPF计算的间隔时间,可以避免占用过多的路由器内存和带宽资源。

使能智能定时器后:

• 当网络发生变化时,OSPF需要重新进行路由计算,为避免这种频繁的网络变化对设备造成的冲击,标准RFC2328规定路由计算时要使用延迟定时器,定时器超时后才进行路由计算。但标准协议中,该定时器定时间隔固定,无法做到既能快速响应又能抑制振荡

通过智能定时器来控制路由计算的延迟时间,达到对低频率变化快速响应,又能对高频率变化起到有效抑制的目的。

按优先级收敛

可以通过IP前缀列表等将特定路由过滤出来,通过对不同的路由配置不同的收敛优先级,达到重要的路由先收敛的目的,提高网络的可靠性。没有添加优先级默认为low。

Database Overflow

通过设置路由器上非缺省外部路由数量的上限,来避免数据库超限。OSPF网络中所有路由器都必须配置相同的上限值。这样,只要路由器上外部路由的数量达到该上限,路由器就进入Overflow状态,并同时启动超限状态定时器(默认超时时间为5秒),路由器在定时器超过5秒后自动退出超限状态。

OSPF Database Overflow 数据库溢出过程

进入Overflow状态时,路由器删除所有自己产生的非缺省外部路由。

处于Overflow状态中,路由器不产生非缺省外部路由,丢弃新收到的非缺省外部路由且不回复确认报文,当超限状态定时器超时,检查外部路由数量是否仍然超过上限,如果超限则重启定时器,如果没有则退出超限状态。

退出Overflow状态时,删除超限状态定时器,产生非缺省

外部路由,接收新收到的非缺省外部路由,回复确认报文,准备下一次进入超限状态。

相关配置:

OSPF进程下:lsdb-overflow-limit 1-1000000 //调整溢出时的上限

OSPF进程下:lsdb-overflow-interval //调整定时器

优雅重启GR

GR是Graceful Restart(平滑重启)的简称,是一种在协议重启时保证转发业务不中断的机制。如果不用GR技术的话,当重启OSPF进程的以后,(不管是手动输入命令来重启,还是断电导致重启),路由器都要与邻居断开OSPF关系,转发表也会不可用。等OSPF 进程再次启动后,会跟邻居重新建立关系,再重新计算路由,这需要占用相当一部分时间。在断开邻居关系,到重新计算出路由的这段时间内,转发表无效,流量是不通的。对于大型的网络来说,这是不可取的,因为会造成很大的经济损失。用了GR以后,虽然重启了OSPF进程,但是可以保持转发表不变,这样流量不会中断。

GR机制的核心在于:当某设备进行协议重启时,能够通知其周边设备在一定时间内将到该设备的邻居关系和路由保持稳定。在协议重启完毕后,周边设备协助其进行信息(包括支持GR的路由/MPLS相关协议所维护的各种拓扑、路由和会话信息)同步,在尽量短的时间内使该设备恢复到重启前的状态。在整个协议重启过程中不会产生路由振荡,报文转发路径也没有任何改变,整个系统可以不间断地转发数据。这个过程即称为平滑重启。也就是说,优雅重启只会让控制平面重启,转发平面仍然是正常的,依然可以转发相应的报文。

OSPF与BFD联动

使用场景:

最经典是在不直连的环境下,R1和R2都开启了OSPF,并且成功建立了邻居的关系,但是例如R2的g0/0/0接口断掉了以后,R1因为连接了交换机,接口没有down,不能立刻察觉,只能经过hellodead时间40s后才能给邻居断开关系,这样导致了相关路由条目不能及时更新,造成错误。如果我们开启了BFD与OSPF的联动,那么R1和R2之间只要一边链路一断开,就会被立即检测到,然后断开邻居关系,保证了路由的可靠性。

相应配置:

必须首先在全局开启BFD,然后在接口上开启

[R1-GigabitEthernet0/0/0]ospf bfd enable //在接口上单独开启

[R2-GigabitEthernet0/0/0]ospf bfd enable

然后查看BFD邻居关系建立的情况:为up状态,并且听过OSPF知道的知道了对方的IP地址等信息.

让R2接口shutdown以后,立刻检测R1上与之建立的OSPF邻居关系是否断开:R1上立刻断开,说明BFD与OSPF联动成功。

除此之外,BFD还可以直接在OSPF进程中打开(将作用于所有OSPF的接口):

[R1-ospf-1]bfd all-interfaces enable

其他配置参数:

 OSPF邻居震荡机制:

技术诞生的原因:

如果承载OSPF业务的接口状态在Up和Down之间切换,就会引起邻居状态的频繁震荡。此时,OSPF会快速发送Hello报文重新建立邻居,同步数据库LSDB,触发路由计算,会造成大量报文交互,影响现有邻居的稳定性,对OSPF业务造成较大影响,同时也会影响依赖OSPF的其他业务(如:LDP、BGP)的正常运行。为了解决这个问题,OSPF实现了邻居震荡抑制功能,即在邻居频繁震荡时,启动震荡抑制,实现邻居延迟建立,或实现业务流量延迟经过频繁震荡的链路,达到抑制震荡的目的。

OSPF IP FRR(快速重路由):

原理:

OSPF IP FRRFast Reroute)利用LFALoop-Free Alternates)算法预先计算好备份链路,并与主链路一起加入转发表。当网络出现故障时,OSPF IP FRR可以在控制平面路由收敛前将流量快速切换到备份链路上,保证流量不中断,从而达到保护流量的目的,因此极大的提高了OSPF网络的可靠性。(原来的时候只会计算出最优的路由,如果链路发生了故障,主链路无法使用,那么需要重新收敛并计算备份链路,时间比较损耗,会发生丢包的现象)

LFA计算备份链路的基本思路是:以可提供备份链路的邻居为根节点,利用SPF算法计算出到目的节点的最短距离。然后,按照RFC5286规定的不等式计算出开销最小且无环的备份链路。

OSPF IP FRR支持对需要加入IP路由表的备份路由进行过滤,通过过滤策略的备份路由才会加入到IP路由表,因此,用户可以更灵活的控制加入IP路由表的OSPF备份路由。

也可以将BFD会话与OSPF IP FRR进行绑定,当BFD检测到接口链路故障后,BFD会话状态会变为Down并触发接口进行快速重路由,将流量从故障链路切换到备份链路上,从而达到流量保护的目的。

具体环境:

 

R1去往R4已经计算了最优的路由是通过R5,但是如果R5出现了故障,需要重新计算路由收敛,计算通过R1->R2->R3->R4。但是如果开启了IP FRR的功能,R1在以R5为最优路径的时候,就已经计算出来了可以通过R2到达R4,这样的话当R5故障,直接可以使用备份的路由到达对端,让流量几乎可以不丢包的通过,需要注意的是,OSPF还是需要重新的收敛如果计算出的更新的路由比这条备份的更优先,那么将会选择更新的路由条目,但是在切换时起到了一个过渡的作用。

弊端:对设备的性能要求很高,在计算OSPF路由的时候也需要计算备份的路由,所以默认没有开启,最好也是在收敛完成后的一段时间后再启动这个功能,保证设备不会出现故障。尽量在CPU销毁小于30时进行计算。

    • 初次计算SPF的间隔时间由start-interval参数指定。
    • 第n(n≥2)次计算SPF的间隔时间为hold-interval×2的(n-1)次方。(n=3时,spf间隔时间为4000ms
    • 当hold-interval×2(n-1)达到指定的最长间隔时间max-interval时,OSPF连续三次计算SPF的时间间隔都是最长间隔时间,之后,再次返回步骤1,按照初始间隔时间start-interval计算SPF。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值