1.2.0 IGP高级特性之FRR

理论部分参考文档:Segment Routing TI-LFA FRR保护技术 - 华为

一、快速重路由技术

FRR(Fast Reroute)快速重路由

实现备份链路的快速切换,也可以与BFD联动实现对故障的快速感知。

随着网络的不断发展,VoIP在线视频等业务对实时性的要求越来越高,而OSPF故障恢复的时间远远超过了50ms,不能满足此类网络业务对实时性的要求。

OSPF IP FRRBFD联动可以实现50ms级的切换。OSPF IP FRR提前计算好备份链路的方式,BFD实现主链路出现故障时可以快速感知并使流量快速切换到备份链路上,保证流量不中断,从而达到保护流量的目的,因此极大的提高了OSPF网络的可靠性。

FRR技术适用于网络中对于丢包、延时非常敏感的业务。

二、工作原理

FRR的核心工作原理是提前为路由协议计算好备份链路,使得确认主链路故障之后,可以快速切换至备份链路进行转发流量,而不发再次去计算拓扑及路由后再进行流量转发。

如何计算备份链路?

FRR使用到的一种算法:LFA(Loop-free alternate)无环路备份路径

LFA的原理是找到一个非主下一跳(即不是最短转发路径上的下一跳)的邻居节点,如果这个邻居节点目的节点的最短路径不经过源节点,则这个邻居节点为无环备份下一跳。

关于以上名词介绍:源节点、邻居节点、目的节点、最短转发路径

S为运行LFA计算的源节点,N为邻居节点,D为目的节点

最短路径即由LSP计算链路开销得出的到达目的节点的最优转发路径(开销最小的路径)

在这里插入图片描述

LFA保护分为链路保护节点保护两种场景。

(1)LFA链路保护

链路保护场景可用如下公式计算无环下一跳:

  • Distance_opt(A,B),计算A至B之间的链路开销之和
  • 要想使FRR成功计算出备份链路,需要网络开销满足链路保护公式,否则无法计算出备份路由!

LFA链路保护即:备份的下一跳(邻居节点目的节点)的开销要小于< (邻居节点源节点)及(源节点目的节点)的开销之和。

公式一:Distance_opt(N, D) < Distance_opt(N, S) + Distance_opt(S, D)

LFA链路保护原理如下图:

在这里插入图片描述

可能会疑惑,为啥开销一定需要满足(N, D) <(N,S)+(S,D)呢?

  • 主要原来还是因为开销配置不当会出现短暂环路的情况。
  • 如下图,虽然看起来主备链路开销规划的很好,主用链路也是正确走向(即PE1去PE2,走PE1-PE4)。

在这里插入图片描述

  • 但邻居节点N(P2)去往PE2,走的却是P1-P4,而不是P2-P3-P4,因为ND开销=9,NSED=8。
  • 所以当链路故障之后,S马上将流量转发给N(红线1),由于N去往D最短路径走S,故流量重新回到S(蓝线2),S再…(红线3)因此出现环路。
  • 直到N重新完成网络收敛之后,流量才会正常转发。

在这里插入图片描述

(2)LFA节点保护

当发生节点故障时,流量需要从最短路径上S的**下一跳节点(E)**绕行,故需要计算下一跳节点到目的节点及邻居节点之间的开销,防止出现环路情况。

所以如果邻居节点同时满足下述公式,则该邻居满足节点保护条件。

公式二:Distance_opt(N, D) < Distance_opt(N, E) + Distance_opt(E, D)

LFA节点保护原理如下图:

在这里插入图片描述

如果链路开销不满足时:

  • 虽然主用链路路径正确,即PE1去PE2走的是SED。
  • 但邻居节点N去往PE2,走的却是SED,而不是直接ND,因为ND开销=6,NSED=5。

在这里插入图片描述

  • 当主链路E节点设备故障之后,S马上将流量转发给N(红线1),由于N去往D最短路径走S,故流量重新回到S(蓝线2),S再…(红线3)因此出现环路。

在这里插入图片描述

  • 应用FRR技术之后,需要满足以上两种LFA保护公式才能成功计算出备份路径,否则FRR不生效,无法生成备份路径。

其它LFA算法

除了LFA算法外,还有RLFA(remote loop-free alternates)远端无环路备份路径、TI-LFA(Topology Independent LFA)拓扑无关的无环路备份路径,各算法各有利弊。

(1)RLFA

起因:

  • 虽然LFA在网格状拓扑中通常能够获得较好的覆盖范围,但是针对环网,LFA的覆盖范围很低。

  • 为了提升保护范围,产生了RLFA技术,用于提升FRR保护范围。

优点:

  • RLFA将LFA节点的计算范围扩大到了远端节点,而不仅限于邻居节点,从而提高了LFA计算的成功概率。

缺点:

  • 仍然存在与LFA算法同样的缺陷,即网络开销不满足保护公式时算法失效。

工作原理

RLFA的基本原理是在远端找到一个LFA节点(通常称为PQ节点),然后使得S节点与PQ节点之间建立隧道进行流量转发。因为该节点是去往源和目的无环的一台设备,所以通过隧道将流量转发给PQ节点由它来进行转发给目的/源可保证链路故障后不会出现短暂环路现象。

这个PQ节点需要满足两个条件:

  1. PQ节点源节点(也即受保护链路的源端节点)于故障收敛前的最短路径(Pre-convergence Shortest Path)可达,且路径不经过受保护链路。
  2. PQ节点可以通过最短路径到达受保护链路的对端节点(E节点),且路径不经过受保护链路。

RLFA保护也分为链路保护和节点保护两种场景。

关于RLFA的相关名词解析
概念解释
P空间以保护链路源端为根节点建立SPF树,所有从根节点不经过保护链路可达的节点集合称为P空间。
扩展P空间以保护链路源端的所有邻居为根节点分别建立SPF树,所有从根节点不经过保护链路可达的节点集合称为扩展P空间。
**说明:**华为设备在计算RLFA FRR备份路径时,默认计算扩展P空间。
Q空间以保护链路末端为根节点建立反向SPF树,所有从根节点不经过保护链路可达的节点集合称为Q空间。
P节点P空间、扩展P空间的节点称为P节点。
Q节点Q空间的节点称为Q节点。
PQ节点在(扩展)P空间又在Q空间的节点,PQ节点会作为保护隧道的目的端

P空间内P节点,保证P到S节点不存在故障后出现微环的情况。

Q空间内Q节点,保证Q到D节点不存在故障后出现微环的情况。

处于P空间与Q空间中的节点设备,则具备有去往源目节点都不会环路的能力(下图中的P3设备)

故只需要使S与P3建立一条隧道,该隧道便是PE1-PE2的备用链路。

在这里插入图片描述

RLFA链路保护

P节点的计算公式如下:

公式三:Distance_opt(N, P) < Distance_opt(N, S) + Distance_opt(S, P)

套用公式进行计算得出,满足P节点公式的只有P2、P3设备。

Q节点的计算公式如下:

公式四:Distance_opt(Q, D) < Distance_opt(Q, S) + Distance_opt(S, D)

套用公式进行计算得出,满足Q节点公式的只有PE2、P4、P3设备。

在这里插入图片描述

为啥PQ节点如此计算

其实与LFA算法一致,主要还是为了防止保护链路在故障之后,出现微环的情况。

如P节点计算,以P3作为P节点,故NP=3,NS=8,SP=12,满足公式。

如果链路开销设置不合理

  • 在未故障前,流量正常通过P1-P4转发。
  • 故障之后,因为P2去往PE2最优路径下一跳是P1,故存在微环风险。
  • 同时套用公式可以看出:NP=30,NS=8,SP=17,不满足公式。

在这里插入图片描述

RLFA节点保护

P节点的计算公式如下:

公式五:Distance_opt(N, P) < Distance_opt(N, E) + Distance_opt(E, P)

Q节点的计算公式如下:

公式六:Distance_opt(Q, D) < Distance_opt(Q, E) + Distance_opt(E, D)

在这里插入图片描述

其中规律

此时拿出LFA的保护公式与RLFA的保护公式进行对比记忆:

LFA链路保护:Distance_opt(N, D) < Distance_opt(N, S) + Distance_opt(S, D)

RLFA链路保护-P节点:Distance_opt(N, P) < Distance_opt(N, S) + Distance_opt(S, P)

RLFA链路保护-Q节点:Distance_opt(Q, D) < Distance_opt(Q, S) + Distance_opt(S, D)

以链路保护为例,可以看到明显有变化与没有变化的地方。

将LFA公式中的D节点换成P节点,即成为了RLFA-P节点的计算公式。

将LFA公式中的N节点换成Q节点,即成为了RLFA-Q节点的计算公式。

P节点:计算S至D的下一跳节点(P节点)是否存在环路问题,可将其它设备作为P节点设备进行计算,判断是否还存在其它设备可成为下一跳P节点且不出现环路问题。最终这些P节点的集成就是P空间。

Q节点:计算D至S的下一跳节点(Q节点)是否存在环路问题,与P节点一致,计算出所有可成为下一跳Q节点的设备集成为Q空间。

LFA节点保护:Distance_opt(N, D) < Distance_opt(N, E) + Distance_opt(E, D)

RLFA节点保护-P节点:Distance_opt(N, P) < Distance_opt(N, E) + Distance_opt(E, P)

RLFA节点保护-Q节点:Distance_opt(Q, D) < Distance_opt(Q, E) + Distance_opt(E, D)

节点保护一致。

P节点保护S至D在故障时不出现环路问题,故LFA公式中将D换成P即成为RLFA-P节点公式。

Q节点保护D至S在故障时不出现环路问题,故LFA公式中将N换成Q即成为RLFA-Q节点公式。

理解之后,只需要记忆LFA的两个公式即可推理出其它公式。

(2)TI-LFA

起因:

  • 为了解决RLFA的会因网络开销规划不合理造成计算失败的问题,出现了基于Segment Routing(SR技术)的TI-LFA FRR技术。

优点:

  • TI-LFA FRR可以在网络拓扑中不存在PQ节点的情况下,实现任意拓扑的保护。
  • TI-LFA FRR完全继承了RLFA FRR计算扩展P空间和Q空间的算法,上文的公式三到公式六完全适用于TI-LFA FRR场景。

缺点:

  • 目前只能应于SR技术上。

转至 SR段路由技术之后再进行进一步补充原理及其它内容。

三、配置命令介绍

开启FRR功能,并使用LFA算法(ENSP中只支持该算法)。

[Huawei]ospf 1 
[Huawei-ospf-1]frr
[Huawei-ospf-1-frr]loop-free-alternate 

实验拓扑

​ 按照图中规划进行设置网络及链路开销,要求实现主用链路断开之后,网络能快速感知并切换至备用链路转发数据。

在这里插入图片描述

基础配置

  • 省略底层IP及OSPF相关配置。

  • 未配置FRR时,于P1上查看去往模拟业务的OSPF路由信息:

默认下一跳为10.1.14.4(P4)此外无其它信息。

[P1-ospf-1]dis ip routing-table protocol ospf verboseDestination: 192.168.2.0/24Protocol: OSPF             Process ID: 1Preference: 10                     Cost: 6NextHop: 10.1.14.4         Neighbour: 0.0.0.0State: Active Adv              Age: 00h00m03sTag: 0                  Priority: lowLabel: NULL                QoSInfo: 0x0IndirectID: 0x0              RelayNextHop: 0.0.0.0           Interface: GigabitEthernet0/0/0TunnelID: 0x0                   Flags:  D

启用FRR

  • 将所有设备的FRR功能启用,并指定LFA算法。

  • 配置完成之后,于P1上查看去往模拟业务的OSPF路由信息:

开启FRR之后,出现BKNextHop等信息,表示该路由的备份链路信息。

[P1-ospf-1]dis ip routing-table protocol ospf verboseDestination: 192.168.2.0/24Protocol: OSPF             Process ID: 1Preference: 10                     Cost: 6NextHop: 10.1.14.4         Neighbour: 0.0.0.0State: Active Adv              Age: 00h00m12sTag: 0                  Priority: lowLabel: NULL                QoSInfo: 0x0IndirectID: 0x0              RelayNextHop: 0.0.0.0           Interface: GigabitEthernet0/0/0TunnelID: 0x0                   Flags:  D
----------《新增信息》----------BkNextHop: 10.1.12.2       BkInterface: GigabitEthernet0/0/1BkLabel: NULL            SecTunnelID: 0x0              BkPETunnelID: 0x0         BkPESecTunnelID: 0x0              BkIndirectID: 0x0   

启用BFD

  • 为了实现链路故障之后能够快速感知,需要启用BFD技术。
  • 将所有设备的BFD功能启用,使用默认间隔即可。
[PE1]bfd
[PE1-bfd]ospf 1
[PE1-ospf-1]bfd all-interfaces enable
  • P1上查看BFD会话是否建立成功:
[P1-ospf-1]dis bfd session all 
--------------------------------------------------------------------------------
Local Remote     PeerIpAddr      State     Type        InterfaceName            
--------------------------------------------------------------------------------8192  8193       10.1.14.4       Up        D_IP_IF     GigabitEthernet0/0/0     
8193  8192       10.1.15.5       Up        D_IP_IF     GigabitEthernet0/0/2     
8194  0          10.1.12.2       Down      D_IP_IF     GigabitEthernet0/0/1     
--------------------------------------------------------------------------------Total UP/DOWN Session Number : 2/1

模拟故障

  • PE1设备上进行长ping模拟业务,然后于P4上将G0/0/0接口关闭,观察通断情况。

  • 目前直连链路断开,P1直接感知可能并不需要通过BFD检测就能感知通断,故只丢了1个包。
    在这里插入图片描述

  • 于P1-P4之间添加一台设备S,此时如果将S的E0/0/2口断开,P1无法通过直连快速感知,就需要借助BFD检测进行实现快速感知。

  • 链路断开之后,BFD经过约3秒时间断开会话,触发OSPF邻居断开,快速切换到FRR计算的备份路径转发路由。

  • 但从Ping测试中并没有看出明显的差距,还是只丢包1个,不过可以说明BFD检测的作用。
    在这里插入图片描述
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/586131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web:[BJDCTF2020]The mystery of ip(ssti模板注入、Smarty 模板引擎)

题目 进入页面显示如下 点击flag页面得到ip 点击hint页面 在hint.php的源代码页面中发现 由题目可以知道要从ip入手 这里尝试抓包加上X-Forwarded-For请求头修改为127.0.0.1 因为直接将127.0.0.1输出到页面&#xff0c;可以猜测是ssti模板注入 可以继续验证 这里发现输入什么…

【数据结构】八、查找

一、基本概念 静态查找&#xff1a;只查找&#xff0c;不改变集合内数据元素 动态查找&#xff1a;有则输出元素&#xff0c;无则添加元素 二、静态查找表 2.1顺序查找 在线性表、链表、树中依次查找 2.2折半查找&#xff08;二分查找&#xff09; 在有序的线性表中&…

HTML5 `<audio>` 面试题

HTML5 <audio> 面试题 什么是HTML5 <audio>元素&#xff1f; 元素是HTML5的音频播放器。它允许在网页中嵌入音频文件&#xff0c;并提供了控制音频播放的功能。 如何在HTML中嵌入音频文件&#xff1f; 使用 <audio> 元素&#xff0c;通过设置 src 属性指定…

获取PG库 database与 user 创建时间以及cluster初始化时间

代码实现 echo "获取数据库创建时间" data_dir$(psql -U postgres -d postgres -X -qAt -c "show data_directory" ) db_dirs$(ls $data_dir/base |grep -v pgsql_tmp) for db_oid in $db_dirs dodb_exists$(psql -U postgres -d postgres -X -qAt -c &qu…

macos下转换.dmg文件为 .iso .cdr文件的简单方法

为了让镜像文件在mac 和windows平台通用, 所以需要将.dmg格式的镜像文件转换为.iso文件, 转换方法也非常简单, 一行命令即可 hdiutil convert /path/to/example.dmg -format UDTO -o /path/to/example.iso 转换完成后的文件名称默认是 example.iso.cdr 这里直接将.cdr后缀删…

C#高级 08Json操作

1.概念 Json是存储和交换文本信息的语法。类似于XML。Json比XML更小、更快、更易解析。Json与XML一样是一种数据格式。Json是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。Json采取完全独立于语言的文本格式&#xff0c; 但是也使用了类似于C语言的习惯。这些特性使…

Kotlin基础语法

Kotlin基础语法 Kotlin内置数据类型变量可读可写变量可读变量 自动类型推导机制when表达式range表达式字符串模版函数函数定义函数简写默认参数具名函数参数Unit函数反引号函数匿名函数隐式返回函数作为形参函数引用函数作为返回值 可空性高级函数 let非空断言空合并操作符 高级…

Mac系统通过homebrew安装postgresql和postgis

花费了大概一天的时间安装postgresql和postgis&#xff0c;期间遇到了大量的坑&#xff0c;记录下来分享给大家&#xff0c;方便自己以后再次安装&#xff0c;也帮助别人踩坑 tip:我的系统是MAC ,通过homebrew安装的 最开始是通过homebrew安装了 postgresql13 &#xff0c;但…

2047过滤空格(C语言)

目录 一&#xff1a;题目 二&#xff1a;思路分析 三&#xff1a;代码 一&#xff1a;题目 二&#xff1a;思路分析 1.首先&#xff0c;这道题是一个字符串的问题&#xff0c;我们要先知道字符串存放在char类型的数组中的&#xff0c;并不是一个变量就可直接存放的下一个完整…

1.Linux快速入门

Linux快速入门 Linux操作系统简介Linux操作系统优点Linux操作系统发行版1. Red Hat Linux2. CentOS3. Ubuntu4. SUSE Linux5. Fedora Linux 32位与64位操作系统的区别Linux内核命名规则 Linux操作系统简介 Linux操作系统是基于UNIX以网络为核心的设计思想&#xff0c;是一个性…

云计算:OpenStack 配置云主机实例的存储挂载并实现外网互通

目录 一、实验 1. 环境 2.配置存储挂载 3.云主机实例连接外部网络&#xff08;SNAT&#xff09; 4.外部网络连接云主机实例&#xff08;DNAT&#xff09; 二、问题 1.云主机 ping 不通外部网络 2.nova list 查看云主机列表报错 3.nova list 与 virsh list --all有何区…

Go语言中的包管理工具之Go Modules的使用

GoLang 中常用的包管理的方式 常用的有三种 Go PathGo VendorGo Modules 关于 Go Modules 1 ) 概述 Go的包管理&#xff0c;经过社区和官方的共同努力下&#xff0c;最终在百家争鸣后Go官方在 2018.8 推出了go 1.11版本中的Go Modules&#xff0c;并且很快成为一统江湖的包…

python学习 21 excel分列

简单做了个模板&#xff0c;能干这个&#xff1a; 指定sheet中某列数据进行按需拆分&#xff0c;拆分后新建一个test的sheet&#xff0c;将数据分别存入test的不同列中。 import os import xlwings as xw import re #excel路径 pathrC:\Users\xxx\Desktop\123.xlsx#设置需要…

【代码随想录】刷题笔记Day42

前言 这两天机器狗终于搞定了&#xff0c;一个控制ROS大佬&#xff0c;一个计院编程大佬&#xff0c;竟然真把创新点这个弄出来了&#xff0c;牛牛牛牛&#xff08;菜鸡我只能负责在旁边喊加油&#xff09;。下午翘了自辩课来刷题&#xff0c;这次应该是元旦前最后一刷了&…

行车记录仪变清晰,变高清的办法一定要收藏

有时候我们会发现行车记录仪拍摄的视频不够清晰&#xff0c;特别是出现事故需要视频为证的时候&#xff0c;如果视频太模糊&#xff0c;很难获得交警的支持&#xff0c;那么如何让行车记录仪拍摄的视频变得更加清晰呢&#xff1f; 小编给大家分享几个办法&#xff0c;建议收藏…

Android实验:contentprovider 实验+SQLite 数据库的实现

目录 SQLite实验目的实验内容实验要求项目结构代码实现结果展示 SQLite SQLite 是一个开源的嵌入式关系数据库&#xff0c;实现了自给自足的、无服务器的、配置无需的、事务性的 SQL 数据库引擎。它是一个零配置的数据库&#xff0c;这意味着与其他数据库系统不同&#xff0c;…

全面好用的setting.xml配置

<?xml version"1.0" encoding"UTF-8"?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information…

轻松实现iphone截图传电脑

目录 摘要 引言 用户登录工具和连接设备 生成截图 摘要 本篇博文介绍了克魔助手这款工具&#xff0c;解决了iPhone与Windows系统下图片传输的烦恼。通过连接同一Wi-Fi&#xff0c;使用克魔助手轻松实现了iPhone截图传输到电脑上的便捷操作。用户只需简单地下载并安装克魔助…

前端优化 - 防抖和节流

&#x1f4e2; 鸿蒙专栏&#xff1a;想学鸿蒙的&#xff0c;冲 &#x1f4e2; C语言专栏&#xff1a;想学C语言的&#xff0c;冲 &#x1f4e2; VUE专栏&#xff1a;想学VUE的&#xff0c;冲这里 &#x1f4e2; CSS专栏&#xff1a;想学CSS的&#xff0c;冲这里 &#x1f4…

使用Go-Gin框架实现 OSS 前端直传功能

引言 在现代 Web 应用中&#xff0c;文件上传是一项常见功能。传统的上传方式通常需要文件经过后端服务器转发到对象存储服务&#xff08;如阿里云 OSS&#xff09;。然而&#xff0c;这种方法可能对服务器造成额外的负担&#xff0c;并降低上传效率。本文将探讨如何使用 Go-G…