OSPF 的快速收敛:PRC、智能定时器、IP FRR(配置)、OSPF与BFD联动(配置) 。
一,OSPF 快速收敛有关技术点
1,OSPF的快速收敛:为了提高路由的收敛速度而做的扩展特性,包括: PRC(部分路由计算)和智能定时器。
2,OSPF故障恢复的快速收敛:例如通过 OSPF IP FRR(快速重路由)实现备份链路的快速切换,也可以与 BFD联动实现对故障的快速感知。
二,PRC(部分路由计算)
1,PRC的工作原理:当网络上路由发生变化的时候,只对发生变化的路由进行重新计算。
!----解释1:ospf是基于spf算法来计算路由的。如上图,某网络运行 OSPF ,网络收敛后,左图是以 R1 为根的最短路径树。此时 R1 访问节点 R5 时,通过 [R1 下行链路的出接口, R3 上行链路接口的 IP 地址 ] 到达该目的地。随后R5 将环回口 Loopback0 开启 OSPF ,即 OSPF 网络内有新增网段。
@----解释2:老版的spf算法是,当拓扑里有其他节点或叶子发生变化时,会触发r1重新将网络里的所有的拓扑在计算一份,每台路由器都要重新计算一次全网的的拓扑,但是会有些网络节点根本没有发生变化,在次计算式没意义的。所以就衍生出了PRC(部分路由计算)
#----解释3:PRC(部分路由计算)是,R5 将环回口 Loopback0 宣告近 OSPF 里。此时R5 全网泛洪新增的一类 LSA ,并且序列号加一,校验和重新计算,该一类lsa里有描述loop 0接口信息的字段。R1 收到该 一类LSA 后会创建新的路由,仍继承原有访问节点 R5 的路径及下一跳,即最短路径树不变,只在自己的lsdb里新增一个节点 R5 上的叶子信息。因此 R1 访问 R5 的 Loopback0 时,通过 [R1 下行链路的出接口, R3 上行链路接口的 IP 地址]到达该目的地。
%----优点:OSPF 网络新增网段时,只关注发生变化的路由,加快了路由的计算。
&---注意:在华为设备上OSPF的PRC功能默认开启。
三,智能定时器
1,默认情况下控制 LSA 的生成与接收:OSPF 通过如下两个规定来避免网络连接或者路由频繁动荡引起的过多占用设备资源的情况。
规则一:同一条 LSA 在 1 秒内不能再次生成,即 LSA 的更新时间间隔 5 秒。
规则二 : LSA 被动接收的时间间隔为 1 秒。
(解释,为何要执着于1s的限制:某个路由器的接口一直up down。在理想情况下是,设备一旦up则就会发送lsa报文,设备一旦down则就会收回lsa报文。那么极短的时间里出现了反复的up down,就会导致邻居设备在极短的时间里收到和删除非常多的las报文,设备就会发烧)
2,缺点:在网络相对稳定时、对路由收敛时间要求较高的组网环境中,如果还是沿用以上默认的方法 来控制LSA 的生成与接收,显然不是最优解。那么智能定时器就可以好的解决了。
3,智能定时器的概念:智能定时器是在进行 SPF 计算和产生 LSA 的时候用到的一种定时器。智能定时器既可以对少量的外界突发事件进行快速响应,又可以避免过度地占用 CPU 。
4,智能定时器的作用:当网络没有震荡的时候,提供快速地收敛机制;当网络发生震荡的时候,降低设备的资源消耗,降低收敛速度。
例如:在网络相对稳定、对路由收敛时间要求较高的组网环境中,可以通过智能定时器指定 LSA 的更新时间间隔为 0 来取消 LSA 的更新时间间隔,使得拓扑或者路由的变化可以立即通过 LSA 发布到网络中,或者立即被感知到,从而加快网络中路由的收敛速度。
例如:当网络发生变化时, OSPF 的 LSDB 会发生改变,需要重新计算最短路径。如果网络频繁变化,由于不断地计算最短路径,会占用大量系统资源,影响设备的效率。通过配置智能定时器,设置合理的 SPF 计算的间隔时间,可以避免占用过多的路由器内存和带宽资源。
5,智能定时器的配置命令(ar1在向外更新lsa时):
!----配置OSPF LSA 更新的时间间隔的命令
[Huawei-ospf-1]lsa-originate-interval intelligent-timer ? //配置lsa的更新的周期时间关联上智能定时器。
INTEGER<1-10000> Max-interval(in millisecond), the default is 5000 //最大延迟时间默认为 5000ms
[Huawei-ospf-1]lsa-originate-interval intelligent-timer 6000 ?//配置最大延迟时间为 6000ms
INTEGER<0-1000> Start-interval(in millisecond), the default is 500//初始延迟时间默认为 500ms
[Huawei-ospf-1]lsa-originate-interval intelligent-timer 6000 50 ?//配置初始延迟时间为50ms
INTEGER<1-5000> Hold-interval(in millisecond), the default is 1000//递增时间默认为1000ms
[Huawei-ospf-1]lsa-originate-interval intelligent-timer 6000 50 100//配置递增时间 为100ms
@----命令配置原理解释:(原理实验路径:2023-07-24,40min)
#----注意:1,当三次达到最大延迟定时器6000ms后,计时器会重新跳回初始延迟时间开始重新计算。2,最后一次翻倍位6200ms,会默认为6000ms的。3,当最大延迟时间续了3持次,或者OSPF进程被重启的时候,将会再次回到初始时间,其他情况不会回到初始时间的。
¥---总结:如果网络只是简单的变化,响应速度非常及时;如果网络频繁的震荡,响应速度会非常缓慢,缓慢上限时间为配置的最大延迟时间。从而去保证设备的正常工作。
&---文档的专业解释
6,智能定时器的配置命令(ar2在接收lsa时)
!----配置 OSPF LSA 接收的时间间隔的命令(命令的格式和计时器的计算公式仍是一样的)
[Huawei-ospf-1]lsa-arrival-interval intelligent-timer ?
INTEGER<1-10000> Max-interval(in millisecond), the default is 6000
[Huawei-ospf-1]lsa-arrival-interval intelligent-timer 1000 ?
INTEGER<0-1000> Start-interval(in millisecond), the default is 500
[Huawei-ospf-1]lsa-arrival-interval intelligent-timer 1000 20 ?
INTEGER<1-5000> Hold-interval(in millisecond), the default is 500
[Huawei-ospf-1]lsa-arrival-interval intelligent-timer 1000 20 300
@----文档的专业解释
7,智能定时器的配置命令( OSPF 路由计算时间间隔。)
!----配置OSPF 路由计算时间间隔的命令(命令的格式和计时器的计算公式仍是一样的)
[Huawei-ospf-1]spf-schedule-interval intelligent-timer ?
INTEGER<1-20000> Max-interval(in millisecond), the default is 10000
[Huawei-ospf-1]spf-schedule-interval intelligent-timer 5000 ?
INTEGER<1-1000> Start-interval(in millisecond), the default is 500
[Huawei-ospf-1]spf-schedule-interval intelligent-timer 5000 50 ?
INTEGER<1-5000> Hold-interval(in millisecond),the default is 1000
[Huawei-ospf-1]spf-schedule-interval intelligent-timer 5000 50 200 ?
@----文档的专业解释
8,由人为的根据不同的情况来配置不同时间智能定时器的参数。
四,OSPF IP FRR(快速重路由)
1,正常情况下的转发:ar2访问ar4的loop接口3.3.3.3。按照路由加表原则,在ar2的路由表上会有一条去往3.3.3.3的路由,下一跳为12.1.1.2。当12.1.1.0网段出故障时,ar2会重新计算去往3.3.3.3的路由,在加到路由表里,下一跳为14.1.1.2。实际上是路由表计算好路由,在基于路由表计算出(下发到)转发表,由转发表来控制路由和报文的转发过程。
2,IP FRR技术下的转发:通过FRR技术让备用路径的路由信息提前在转发表里产生且存在。当设备感知到或主用链路接口down时,会直接启用备用路径的路由信息来指导报文的转发,无需花费任何时间去计算了和收敛新的路径。节省了当主路径发生故障时,还要重新计算到达3.3.3.3的路由路径(备用路径)所用的时间。
3,OSPF的 IP FRR具体是什么:OSPF IP FRR 是动态 IP FRR ,利用 LFA ( Loop-Free Alternates )算法预先计算出备份路径,保存在转发表中,以备在故障时将流量快速切换到备份链路上,保证流量不中断,从而达到流量保护的目的,该功能可将故障恢复时间降低到 50 ms 以内。OSPF IP FRR 的流量保护分为链路保护和节点链路双保护。
!---LFA 计算备份链路的基本思路是: 以可提供备份链路的邻居为根节点,基于该根节点利用 SPF 算法计算出到目的节点的最短距离。然后,按照不等式计算出开销最小且无环的备份链路。(可能会存在多个像这样的邻居根节点,那么哪个邻居根节点时最优的呢)。
@---链路保护(保证流量不在经过故障链路,是链路故障)
1 链路保护的公式:Distance_opt(N,D)<Distance_opt(N,S)+Distance_opt(S,D) (可以设想一下,等于或小于的情况)
2 链路保护公式的说明(设备触发LFA算法的动态处理过程):
S上开启了FRR功能后,S会按照链路保护的公式去计算备份路径。具体是,S会计算N到D的cost大小,其cost必须要小于下一跳到S,在到D的cost之和。
因为如果和以上条件背驰时(不满足以上的)。当如图所示的链路故障,S会把报文传递到N上,但是N没有开启FRR功能(退一万步说或者开启了frr功能),由于不满足Distance_opt(N,D)<Distance_opt(N,S)+Distance_opt(S,D)公式,所以其下一跳还是S,那么可能会引发短暂的环路,或者网络收敛不及时,网络延迟相对较大。(lsdb的重新收敛和最优下一跳的再次计算所需流量中断的时间,远大于了N开启FRR功能所需流量中断的时间(多种说法情况,看7-24视频的1h45min部分),但是从源头就遵循好链路保护的公式才是从本源防止了对应问题的出现)
那么,流量从设备 S 到 D 进行转发,网络开销值满足链路保护公式,可保证当主链路故障后,设备 S 将流量切换到备份链路 S 到 N 后可以继续向下游转发,确保流量中断小于 50ms 。
3 基于链路保护的实验配置和现象:
1.没有开启frr功能
[ar5]dis ip routing-table 3.3.3.3 verbose //查看本路由表去往对应目的的详细路径的细节信息
Destination: 3.3.3.3/32
Protocol: OSPF Process ID: 1
Preference: 10 Cost: 2
NextHop: 12.1.1.2 Neighbour: 0.0.0.0
State: Active Adv Age: 00h05m12s
Tag: 0 Priority: medium
Label: NULL QoSInfo: 0x0
IndirectID: 0x0
RelayNextHop: 0.0.0.0 Interface: Ethernet0/0/1
TunnelID: 0x0 Flags: D
结果:并没有去往3.3.3.3的备份的下一跳信息存在
[ar5]ping -c 1000 -a 1.1.1.1 3.3.3.3 //使用该命令检测恢复故障时的丢包情况
Reply from 3.3.3.3: bytes=56 Sequence=13 ttl=254 time=50 ms
Oct 6 2023 00:09:06-08:00 ar5 %%01PHY/1/PHY(l)[32]: Ethernet0/0/1: change st
atus to down
Oct 6 2023 00:09:06-08:00 ar5 %%01IFNET/4/LINK_STATE(l)[33]:The line protocol I
P on the interface Ethernet0/0/1 has entered the DOWN state.
Oct 6 2023 00:09:06-08:00 ar5 %%01OSPF/3/NBR_CHG_DOWN(l)[34]:Neighbor event:nei
ghbor state changed to Down. (ProcessId=1, NeighborAddress=14.1.1.2, NeighborEve
nt=KillNbr, NeighborPreviousState=Full, NeighborCurrentState=Down)
Oct 6 2023 00:09:06-08:00 ar5 %%01OSPF/3/NBR_DOWN_REASON(l)[35]:Neighbor state
leaves full or changed to Down. (ProcessId=1, NeighborRouterId=14.1.1.2, Neighbo
rAreaId=1, NeighborInterface=Ethernet0/0/1,NeighborDownImmediate reason=Neighbor
Down Due to Kill Neighbor, NeighborDownPrimeReason=Physical Interface State Cha
nge, NeighborChangeTime=2023-10-06 00:09:06-08:00)
Request time out(丢一个包)
Reply from 3.3.3.3: bytes=56 Sequence=15 ttl=253 time=90 ms
丢包原因:来自重新计算备份下一跳的时间间隔的这个时间断内的网络down状态所丢的包
2,开启frr功能后
[ar5-ospf-1]frr //进入frr的视图下
[ar5-ospf-1-frr]loop-free-alternate //开启Lfa的算法功能
由于ar8-ar6-ar7的cost=2小于ar8--ar5--ar6--ar7的cost=3,满足链路节点公式,因为开启了FRR
功能后,会按照链路保护的公式去计算备份路径的。
[ar5]dis ip routing-table 3.3.3.3 verbose //查看本路由表去往对应目的的详细路径的细节信息
Destination: 3.3.3.3/32
Protocol: OSPF Process ID: 1
Preference: 10 Cost: 2
NextHop: 12.1.1.2 Neighbour: 0.0.0.0
State: Active Adv Age: 00h08m18s
Tag: 0 Priority: medium
Label: NULL QoSInfo: 0x0
IndirectID: 0x0
RelayNextHop: 0.0.0.0 Interface: Ethernet0/0/1
TunnelID: 0x0 Flags: D
BkNextHop: 13.1.1.2(备份下一跳) BkInterface: Ethernet0/0/0
BkLabel: NULL SecTunnelID: 0x0
BkPETunnelID: 0x0 BkPESecTunnelID: 0x0
BkIndirectID: 0x0
结果:存在去往3.3.3.3的备份的下一跳信息
[ar5]ping -c 1000 -a 1.1.1.1 3.3.3.3 //使用该命令检测恢复故障时的丢包情况
Reply from 3.3.3.3: bytes=56 Sequence=57 ttl=254 time=30 ms
Oct 6 2023 00:02:39-08:00 ar5 %%01PHY/1/PHY(l)[0]: Ethernet0/0/1: change sta
tus to down
Oct 6 2023 00:02:39-08:00 ar5 %%01IFNET/4/LINK_STATE(l)[1]:The line protocol IP
on the interface Ethernet0/0/1 has entered the DOWN state.
Oct 6 2023 00:02:39-08:00 ar5 %%01OSPF/3/NBR_CHG_DOWN(l)[2]:Neighbor event:neig
hbor state changed to Down. (ProcessId=1, NeighborAddress=14.1.1.2, NeighborEven
t=KillNbr, NeighborPreviousState=Full, NeighborCurrentState=Down)
Oct 6 2023 00:02:39-08:00 ar5 %%01OSPF/3/NBR_DOWN_REASON(l)[3]:Neighbor state l
eaves full or changed to Down. (ProcessId=1, NeighborRouterId=14.1.1.2, Neighbor
AreaId=1, NeighborInterface=Ethernet0/0/1,NeighborDownImmediate reason=Neighbor
Down Due to Kill Neighbor, NeighborDownPrimeReason=Physical Interface State Chan
ge, NeighborChangeTime=2023-10-06 00:02:39-08:00)
Reply from 3.3.3.3: bytes=56 Sequence=58 ttl=253 time=150 ms
无丢包原因:因为使能了frr功能,路由器间的线路在没down之前就已经计算出了,备份的下一跳,无需在链路down了后,在花时间重新计算下一跳的路径
#--节点链路双保护(保证流量不在经过故障节点,是路由器的故障)
1 cost值应该同时遵循以下两个公式
链路保护公式:Distance_opt(N,D)<Distance_opt(N,S)+Distance_opt(S,D)
节点保护公式:Distance_opt(N,D)<Distance_opt(N,E)+Distance_opt(E,D)
2 需要满足链路保护公式的原因:原因同上都是为了避免环路等等
3 需要满足节点保护公式的原因:由链路保护公式来触发N路由器对N--E,E--D路径和N---D路径的选择,由于是路由器E发生的故障,避免通过走N--E,E--D的线路来到达D,而是直接通过N---D来到达目的网络。所以一定要满足节点保护公式,让其对应的cost值更优,来达到目的网络。
五,OSPF 与 BFD 联动
1,BFD和ospf联动的必要性:对于某些对网络稳定性比较高的公司,当网络出现故障时,只靠ospf的链路检测机制发现故障需要等待40s的邻居老化时间,才能检测到网络故障的发生。(其实就是慢He11o方式方式检测)
2, OSPF 与 BFD 联动:而OSPF 与 BFD 联动可以借助BFD的一些特性,达到ms级的故障的检测。那么一旦路由器与邻居之间的链路出现故障, BFD 对链路故障的快速感应能够加快 OSPF 对于网络拓扑变化的响应。
3, 实验展示:
一:实验目的:在osfp下使用bfd联动和搭配frr功能,达到主链路故障时,切换到备链路时没有任何数据包的丢失
二:实验配置前提说明:使用ospf达到的全网通;在ar1和ar4上配置loop接口;将ar1--ar2--ar4配置为osfp的主链路,ar1--ar3--ar4配置为osfp的备链路。
三:实验配置
ospf的配置(略)
路由器下的loop接口配置(略)
1, 主链路和备链路的配置
[ar1-Ethernet0/0/0]ospf cost 10 //修改接口的cost值为10
[ar1]dis ip routing-table 4.4.4.4 //查看结果,下一跳的路径为主链路的下一跳。(可以使用tracert 追踪命令)
Destination/Mask Proto Pre Cost Flags NextHop Interface
4.4.4.4/32 OSPF 10 2 D 12.1.1.2 Ethernet0/0/1
2,第一次故障演示
<ar1>ping -c 10000 -a 1.1.1.1 4.4.4.4 //先使用连续ping4.4.4.4 10000个包。
[lsw5-GigabitEthernet0/0/1]shutdown //undo掉lsw5上g0/0/1接口
<ar1>ping -c 10000 -a 1.1.1.1 4.4.4.4的现象
Reply from 4.4.4.4: bytes=56 Sequence=3 ttl=254 time=80 ms
Reply from 4.4.4.4: bytes=56 Sequence=4 ttl=254 time=60 ms(走的主链路)
Request time out//丢包
Request time out//丢包
(大量的请求超时..........)
Reply from 4.4.4.4: bytes=56 Sequence=22 ttl=254 time=60 ms
Reply from 4.4.4.4: bytes=56 Sequence=23 ttl=254 time=70 ms(切换为备链路)
丢包时长原因:需要等待40s的邻居老化时间,丢40s的报文,之后ar1会再次重新进行ospf的收敛,开始进入正常收敛工作。
缺点:无法忍受到达秒级的丢包体验
3,bdf联动配置(对故障的检测时间的快慢配置)
[ar1]bfd //开启bfd功能
[ar1-ospf-1]bfd all-interfaces enable //开启所有接口的bfd功能
[ar2bfd //开启bfd功能
[ar2-ospf-1]bfd all-interfaces enable //开启所有接口的bfd功能
[ar1]dis ospf bfd session all // 查看bfd邻居状态
OSPF Process 1 with Router ID 12.1.1.1
Area 0.0.0.1 interface 12.1.1.1(Ethernet0/0/1)'s BFD Sessions
NeighborId:24.1.1.1 (ar2) AreaId:0.0.0.1 Interface:Ethernet0/0/1
BFDState:up(成功建立) r x :1000 tx :1000
Multiplier:3 BFD Local Dis:8193 LocalIpAdd:12.1.1.1
RemoteIpAdd:12.1.1.2 Diagnostic Info:No diagnostic information
Area 0.0.0.1 interface 13.1.1.1(Ethernet0/0/0)'s BFD Sessions
NeighborId:13.1.1.2 (ar3) AreaId:0.0.0.1 Interface:Ethernet0/0/0
BFDState:down(没有配置bfd)rx :2300 tx :2300
Multiplier:0 BFD Local Dis:8192 LocalIpAdd:13.1.1.1
RemoteIpAdd:13.1.1.2 Diagnostic Info:No diagnostic information
4,第二次故障检测
[lsw5-GigabitEthernet0/0/1]shutdown //undo掉lsw5上g0/0/1接口
<ar1>ping -c 10000 -a 1.1.1.1 4.4.4.4的现象
Reply from 4.4.4.4: bytes=56 Sequence=17 ttl=254 time=70 ms
Request time out
Request time out
(只有两个请求超时)
Reply from 4.4.4.4: bytes=56 Sequence=20 ttl=254 time=70 ms
5,小优化(第三次故障检测)
如何尽可能的减少丢包:
在ar1和ar2配置命令[ar3-ospf-1]bfd all-interfaces min-rx-interval 30 min-tx-interval 30 //配
置故障检测前后的时间间隔,默认为1000ms的时间间隔。
<ar1>ping -c 10000 -a 1.1.1.1 4.4.4.4的现象
Reply from 4.4.4.4: bytes=56 Sequence=12 ttl=254 time=110 ms
Reply from 4.4.4.4: bytes=56 Sequence=13 ttl=254 time=70 ms
Request time out
(一个请求超时,是由于没有配置frr功能导致的,也或许是bfd的检测延时和没有配置frr功能一起导致的,反正已经是显示的极限了。)
Reply from 4.4.4.4: bytes=56 Sequence=15 ttl=254 time=60 ms
6,配置ospf的frr功能(对故障切换的时间间隔快慢的配置)
[ar1-ospf-1]bfd all-interfaces frr-binding//配置当我检测到bfd中断后,去触发frr的切换(只需在ar1上配置即可,因为是由ar1发起的ping的检测)
7,第四次故障检测
[ar1]ping -c 10000 -a 1.1.1.1 4.4.4.4(注意:使用ar系列路由器来配置bfd all-interfaces min-rx-interval 20 min-tx-interval 20 )
Reply from 3.3.3.3: bytes=56 Sequence=27 ttl=254 time=70 ms
Reply from 3.3.3.3: bytes=56 Sequence=28 ttl=254 time=60 ms
Reply from 3.3.3.3: bytes=56 Sequence=29 ttl=254 time=70 ms
Reply from 3.3.3.3: bytes=56 Sequence=30 ttl=254 time=60 ms(无包丢失)
Sep 25 2023 20:59:41-08:00 ar1 %%01BFD/4/STACHG_TODWN(l)[28]:BFD session changed
to Down. (SlotNumber=0, Discriminator=35651584, Diagnostic=DetectDown, Applicat
ions=OSPF, ProcessPST=True, BindInterfaceName=GigabitEthernet0/0/1, InterfacePhy
sicalState=Up, InterfaceProtocolState=Up) (BFD的down)
[ar1]
Sep 25 2023 20:59:41-08:00 ar1 %%01OSPF/3/NBR_CHG_DOWN(l)[29]:Neighbor event:nei
ghbor state changed to Down. (ProcessId=256, NeighborAddress=2.1.1.11, NeighborE
vent=KillNbr, NeighborPreviousState=Full, NeighborCurrentState=Down) (ospf邻居down)
[ar1]
Sep 25 2023 20:59:41-08:00 ar1 %%01OSPF/3/NBR_DOWN_REASON(l)[30]:Neighbor state
leaves full or changed to Down. (ProcessId=256, NeighborRouterId=2.1.1.11, Neigh
borAreaId=16777216, NeighborInterface=GigabitEthernet0/0/1,NeighborDownImmediate
reason=Neighbor Down Due to Kill Neighbor, NeighborDownPrimeReason=BFD Session
Down, NeighborChangeTime=2023-09-25 20:59:41-08:00)
[ar1]
Reply from 3.3.3.3: bytes=56 Sequence=31 ttl=254 time=30 ms(无包丢失)
Reply from 3.3.3.3: bytes=56 Sequence=32 ttl=254 time=20 ms
最终达到了无包的丢失
4,OSPF 与 BFD 联动工作原理:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)