广域网技术——SR-MPLS隧道保护技术

news2024/11/13 11:19:43

目录

TI-LFA FRR保护技术

LFA FRR

R-LFA FRR

TI-LFA FRR

Anycast FRR技术

Host-Standby技术

VPN FRR技术

SR-MPLS防微环技术

场景一 SR本地正切防微环

场景二 SR本地回切防微环

场景三 SR远端正切防微环

场景四 SR远端回切防微环

TI-LFA和防微环的对比


TI-LFA FRR保护技术

TI-LFA FRR能够为SR隧道提供链路以及节点的保护,当某处链路或者节点故障时,流量会快速切换到备份路径继续转发

目前我们所用到FRR技术有LFA FRR、RLFA FRR、TI-LFA三种,其中TI-LFA能够提供最高级别的链路保护

LFA FRR

通过IGP协议实现,备份路径是普通的IP路径

OSPF高级特性——快速收敛与网络稳定性_静下心来敲木鱼的博客-CSDN博客icon-default.png?t=M85Bhttps://blog.csdn.net/m0_49864110/article/details/127437922?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167007400916782425160206%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=167007400916782425160206&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-127437922-null-null.nonecase&utm_term=FRR&spm=1018.2226.3001.4450

LFA FRR如何生成备份路径

以可提供备份链路的的邻居为根节点(即以N备份节点为根节点),利用SPF算法计算到达目的节点的最短距离,得到一条开销最小且无环的备份链路

当保护的链路发生故障后,直接通过备份链路进行转发

 

LFA的不足之处

  1. 只有网络满足链路保护公式或节点保护公式才可以以备份节点为根建立最短路径树

 例如:当Cost(N,D)<Cost(N,S)+Cost(S,D)时,不会建立备份节点

  1. IP FRR场景可能会出现临时环路

 当没有满足公式,备份路径建立不起来时,如果S与D相连的路径出现故障后

 S会把流量丢向N节点,由于N节点没有建立备份路径

 N在还没有收到S发送的故障收敛通告消息之前,N会把流量再次丢到S,造成临时环路

R-LFA FRR

通过LDP协议实现R-LFA,备份路径是LDP隧道

RLFA(Remote LFA)如何计算备份路径

找到网络中的PQ节点,在源节点与PQ节点之间建立隧道形成备份下一跳保护

建立的备份隧道时通过LDP标签建立的

当保护的链路发生故障时,流量自动切换到备份隧道继续转发

相关概念

P节点

不需要经过保护链路就可以到达源节点(保护链路源端)的设备为P节点

Q节点

不需要经过保护链路就可以到达目的节点(保护链路末端)的设备为Q节点

扩展P节点

以P节点(此P节点必须是源节点的邻居)来作为源节点计算出扩展P节点

源节点把数据丢给此P节点,保证P节点可以把数据丢到扩展P节点

PQ节点

既是P节点,也是Q节点的设备为PQ节点

此节点为备份链路的目的端

 

RLFA的不足之处

网路中如果没有PQ节点,无法建立备份隧道,无法保证高可靠,可能造成临时环路

当保护链路出现故障,R1讲数据发往R2,但是由于R2没有建立备份路径,在没有收到故障链路收敛的通告之前,R2会将R1发来的数据再发往R1,造成临时环路

TI-LFA FRR

通过SR协议实现TI-LFA,备份路径是SR隧道

TI-LFA(Topology-Independent LFA)如何计算路径

  1. 找到网络中的PQ节点,在源节点与PQ节点之间建立隧道形成备份下一跳保护(同RLFA)
  2. 当没有PQ节点时,源节点直接将数据送到最远P节点,然后此P节点通过Adj SID将数据送到Q节点,建立隧道形成备份下一跳保护

建立的备份隧道时通过SR标签建立,当保护的链路发生故障时,流量自动切换到备份隧道继续转发

TI-LFA的优点

在某些情况下,LFA和RLFA对于某些场景(不满足公式、没有PQ节点)无法计算出备份路径,不能满足可靠性要求

TI-LFA可以通过Adj SID解决没有PQ节点无法建立备份路径的问题(备份路径的计算不会受到拓扑的局限)

 

TI-LFA路径保护

TI-LFA可以同时保护链路故障和节点故障

由于节点故障的保护路径也可以保护链路故障,所以TI-LFA会优先计算节点保护备份路径

TI-LFA的不足

  1. 对于SR隧道中指定的必经节点(首节点,尾节点、路径约束节点)故障,TI-LFA无法生成相应的保护;需要通过Anycast FRR技术解决
  2. TI-LFA场景也可能会存在微环;需要通过SR防微环技术解决

Anycast FRR技术

Antcast FRR

使得多个节点发布相同的前缀SID,为节点形成备份,解决无法保护必经节点故障的问题

即多台设备虚拟为同一个设备;相同的前缀SID就称为Anycast SID

Anycast SID

Anycast SID是指一个组内所有路由器发布相同的SID


Host-Standby技术

工作原理

通过控制器计算(或手工配置)一条与主路径不同的备份路径,实现端到端的路径保护

一般应用在SR-MPLS TE Policy场景中

通过一个SR-MPLS TE Policy中的多个Candidate Path实现到达同一目的的多条路径


VPN FRR技术

Host-Standby的不足

如果尾节点出现故障,备用路径也会失效,造成数据中断,无法实现高可靠性

此时可以通过VPN FRR技术来解决

VPN FRR工作原理

在源节点建立多个隧道,即建立多个SR-MPLS TE Policy

SR-MPLS Policy源节点、尾节点、Color标识(即源节点、尾节点,Color相同就代表同一个SR-MPLS Policy,也代表走同一隧道--隧道可能有不同的路径,通过candidate path来区分)

 

在SR-MPLS TE Policy场景下(以上述图为例子),当TI-LFA FRR、Host-Standby、VPN-FRR一起使用时,故障切换保护情况如下

Segment List中标签之间的路径  可以通过TI-LFA FRR保护

当PE1-P1的路径出现故障,可以通过TI-LFA FRR使PE1通过备份路径到达P1(PE1-P3-P1)

Segment List                  之间可以实现ECMP(负载分担)

每个Segment Lsit都是一个显式标签栈,多个Segment List之间通过权重实现负载分担

Candidate Path                之间可以实现Host-Standby

当主路径(Candidate Path 1)中有链路或节点出现故障后,可以通过备份路径(Candidate Path)到达尾节点

SR-MPLS TE Policy             之间可以实现VPN FRR

当SR-MPLS TE Policy1的尾节点出现故障后,可以通过SR-MPLS TE Policy2隧道实现数据的继续传输


SR-MPLS防微环技术

为什么会有微环

由于SR-MPLS会依靠IGP协议进行计算,在IGP还没有完成收敛的这段时间,可能出现临时环路,收敛结束后环路消失,此类环路就称为微环

SR防微环的工作原理

SR通过一种对网路影响比较小的方式来消除网络中潜在的环路,具体如下

如果网络拓扑变化可能引发环路

网络节点会创建一个无环的Segment List,引导流量转发到目的地址

等待网络节点全部收敛以后再回退到正常转发状态,从而能有效的消除网路中的环路

场景一 SR本地正切防微环

出现临时环路的情况

全网节点已经部署了TI-LFA,当节点B故障后,节点A针对目的地址C的收敛过程

  1. 节点A感知到故障,进入TI-LFA快速重路由切换流程,向报文中插入Repair List<105,16056>,将报文转发给P节点E,此时数据正常转发

 

  1. 当节点A完成到目的地址C的路由收敛后,则直接查找节点C的路由,将报文转发给下一跳节点D(此时不携带Repair List,而是直接基于Node SID 103转发)

此时节点D还没有完成收敛,当A节点向D节点转发报文时,节点D又将报文转发给节点A,形成临时环路

 

如何解决此场景的临时环路——节点A需要按照TI-LFA备份路径转发来等待D收敛

  1. 节点A感知到故障,进入TI-LFA快速重路由切换流程,向报文中插入Repair List<105,16056>,将报文转发给P节点E,此时数据正常转发
  2. 节点A启动一个定时器T1,在T1期间,节点A不响应拓扑变化,转发表不变(还是通过TI-LFA的备份路径转发),网络中的其它节点正常收敛
  3. 节点A的定时器T1超时后,这时网络中的其它节点都已经完成收敛,等到节点A收敛完成后,退出TI-LFA流程,按照正常收敛后的路径转发报文

注意事项

以上只限于单点故障的情况

如果没有开启TI-LFA,节点A会通过防微环计算出到达目的地的无环路径来等待D收敛

场景二 SR本地回切防微环

出现临时环路的情况

  1. 当链路正常的情况下:A去往F路径:A-B-C-E-F
  2. 当B-C之间的链路出现故障,当网络收敛后:A去往F路径:A-B-D-E-F
  3. 当B-C之间的链路故障恢复后,由于B设备性能或CPU超负荷等原因,使得D比B优先收敛,此时

        A将数据发往B,由于B没有收敛,将数据发往D

        此时D收敛完成,将数据发往B,形成临时环路

 

如何解决此场景的临时环路——节点D需要计算一条无环的路径来等待B收敛

   1、故障恢复后,节点D率先完成收敛

此时在节点D启动定时器T1,在T1超时前,节点D针对访问节点F的报文计算的防微环Segment List为<102,16023>

   2、当节点A转发数据到B时,由于B未完成收敛,将数据转发给节点D

   3、节点D在报文中插入防微环Segment List<102,16023>,并转发到节点B

   4、节点B根据<102,16023>执行转发动作,将数据转发到节点C

   5、节点C然后再将数据转发到目的地址F

当节点D的定时器T1超时后,网络中的其它节点也完成了收敛

头节点A重新按照收敛后的正常路径A-B-C-E-F转发报文

场景三 SR远端正切防微环

出现临时环路的情况

  1. 当节点C和节点E之间的链路故障,如果节点G率先完成收敛,节点B未完成收敛
  2. 节点A将数据发往B,由于B未收敛,将数据发往G
  3. 由于G节点完成收敛,根据路由下一跳转发到B,形成临时环路

 

如何解决此场景的临时环路——节点G需要计算一条无环的路径来等待B收敛

  1. G率先完成收敛后,启动定时器T1,在T1超时前,节点G针对访问节点F的报文计算的防微环Segment Lsit<104,16045>
  2. 节点A将数据传到B,B未完成收敛,将数据传到G
  3. 节点G在报文中插入防微环Segment List<104,16045>,并转发给B
  4. 节点B根据Node SID 104将数据转发到D
  5. 节点D根据Adj 16045将数据转发到E
  6. 最后E节点将数据转发到F

当节点G的定时器T1超时后,网络中的其他节点也都已经完成收敛,头节点A按照正常

收敛后的路径A->B->D->E->F转发报文。

场景四 SR远端回切防微环

出现临时环路的情况

  1. 当链路正常的情况下:A去往F路径:A-B-G-C-E-F
  2. 当C-E之间的链路出现故障,当网络收敛后:A去往F路径:A-B-D-E-F
  3. 当B-C之间的链路故障恢复后,由于G设备性能或CPU超负荷等原因,使得G比B优先收敛,此时

        A将数据发往B,由于B完成收敛,将数据发往G

        此G收敛未完成,将数据发往B,形成临时环路

 

如何解决此场景的临时环路——节点B需要计算一条无环的路径来等待G收敛

  1. B率先完成收敛后,启动定时器T1,在T1超时前,节点B针对访问节点F的报文计算的防微环Segment Lsit<107,2001>
  2. A将数据转发到B,B插入Segment List<107,2001>,发往节点G
  3. 节点G根据Adj SID将数据发往节点C,防止微环

TI-LFA和防微环的对比

TI-LFA:为目的地址在本地计算备份路径,当主路径链路/节点故障时触发

防微环:防止主路径更新时产生的临时环路,当主路径信息更新时触发

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

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

相关文章

41. set()函数:将可迭代对象转换为可变集合

41. set()函数&#xff1a;将可迭代对象转换为可变集合 文章目录41. set()函数&#xff1a;将可迭代对象转换为可变集合1. set( )函数的作用2. set( )函数的语法3. set函数创建空集合4. set函数的参数只能是可迭代对象4.1 将字符串转换为集合4.2 set( )函数的参数不能为整数4.3…

MIT 6.S081 Operating System Lecture8 (非常随意的笔记)

系列文章目录 文章目录系列文章目录Page FaultCOPY ON WRITEPage Fault eager allocation 通常&#xff0c;因为应用程序无法非常准确地估计自己要增加的内存有多少&#xff0c;所以通常申请的内存会比真实要使用的内存要多。 在XV6中&#xff0c;sbrk的实现默认是eager alloc…

基于粒子群算法优化的lssvm回归预测-附代码

基于粒子群算法优化的lssvm回归预测 - 附代码 文章目录基于粒子群算法优化的lssvm回归预测 - 附代码1.数据集2.lssvm模型3.基于粒子群算法优化的LSSVM4.测试结果5.Matlab代码摘要&#xff1a;为了提高最小二乘支持向量机&#xff08;lssvm&#xff09;的回归预测准确率&#xf…

【C++】stack/queue/list

文章目录注意事项1 emplace 与 push 的区别一、stack&#xff08;栈&#xff09;&#xff08;先进后出、【头部插入、删除】、不许遍历&#xff09;1 基本概念&#xff08;栈是自顶向下(top在下)&#xff0c;堆是向上&#xff09;2 stack 常用接口&#xff08;构造函数、赋值操…

[蓝牙 Mesh Zephyr]-[005]-Key

[蓝牙 Mesh & Zephyr]-[005]-Key 1. Keys Mesh Profile specification 定义了 2 种key&#xff1a;application keys &#xff08;AppKey&#xff09;和 network keys&#xff08;NetKey&#xff09;。AppKeys 用于保护 upper transport layer 的通信安全&#xff0c;Net…

如何手动添加NLTK data

一、问题描述 Python的自然语言处理库NLTK在安装之后需要下载一些data文件才能使用。官方比较推荐的方式是直接运行下载data的代码&#xff1a; import nltk nltk.download(punkt) 但是实际操作之后发现由于网络原因无法下载成功。 除了运行代码之外&#xff0c;官方还推荐…

分布式队列celery学习

说明&#xff1a;本文内容来自《python自动化运维快速入门》学习 一、介绍 Celery是由纯Python编写的&#xff0c;但协议可以用任何语言实现。目前&#xff0c;已有Ruby实现的RCelery、Node.js实现的node-celery及一个PHP客户端&#xff0c;语言互通也可以通过using webhooks…

[附源码]JAVA毕业设计客户台账管理(系统+LW)

[附源码]JAVA毕业设计客户台账管理&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&…

Activiti7工作流(二)

流程定义相关 流程定义查询 查询流程相关信息&#xff0c;包含流程定义&#xff0c;流程部署&#xff0c;流程定义版本 Test public void testDefinitionQuery(){//创建ProcessEngine对象ProcessEngine processEngine ProcessEngines.getDefaultProcessEngine();//获取仓库…

自动识别验证码实现系统自动登录(可扩展实现无人自动化操作,如领取各个平台的优惠券),不依赖第三方可以支持离线识别处理,附源码可直接运行

自动识别验证码实现系统自动登录(可扩展实现无人自动化操作,如领取各个平台的优惠券),不依赖第三方可以支持离线识别处理,附源码可直接运行。 实现过程: 1、只要是图片验证码都支持识别; 2、通过百度API实现验证码识别;(依赖第三方,且需要连接互联网,内网不可用,实…

7-FreeRTOS软件定时器

1- 简介 1.1 软件定时器简述 软件定时器就是允许函数设置一定的等待时间&#xff0c;然后执行。定时器执行的函数被称为定时器的回调函数。定时器从启动到执行回调函数之间的时间称为定时器的周期。定时器的回调函数在定时器的时间到达时执行。 软件定时器要先创建才能使用。…

实战Docker未授权访问提权

1、fofa关键字 port“2375” && body“page not found” 2、docker -H tcp://ip:port 可查看到当前所有的实例 3、docker -H tcp://ip:port pull alpine 4、docker -H tcp://ip:port run -it --privileged alpine bin/sh 5、fdisk -l 查看其分区结构 6、创建一个…

Java安全-CC1

CC1 这里用的是组长的链子和yso好像不太一样&#xff0c;不过大体上都是差不多的。后半条的链子都是一样的&#xff0c;而且这条更短更易理解。yso的CC1过段时间再看一下。 环境 Maven依赖&#xff1a; <dependencies><dependency><groupId>commons-colle…

十四、使用 Vue Router 开发单页应用(3)

本章概要 命名路由命名视图编程式导航传递 prop 到路由组件HTML 5 history 模式 14.5 命名路由 有时通过一个名称来标识路由会更方便&#xff0c;特别是在链接到路由&#xff0c;或者执行导航时。可以在创建 Router 实例时&#xff0c;在routes 选项中为路由设置名称。 修改…

用Unity实现FXAA

用Unity实现FXAAFXAA是现代的常用抗锯齿手段之一&#xff0c;这次我们来在Unity中从零开始实现它。 首先我们来看一个测试场景&#xff0c;我们在Game视角下将scale拉到2x&#xff1a; 可以看到画面的锯齿比较严重&#xff0c;下面我们将一步一步地实现FXAA&#xff0c;消除锯…

BDD - SpecFlow ExternalData Plugin 导入外部测试数据

BDD - SpecFlow ExternalData Plugin 导入外部测试数据引言SpecFlow ExternalData 插件支持的数据源Tags实践创建一个 Class Libary Project添加 NuGet Packages添加测试数据源文件CSV 文件Excel 文件添加 Feature 文件实现 Step Definition执行Scenario 导入测试数据源Scenari…

深入URP之Shader篇4: Depth Only Pass

Depth only pass unlit shader中包含了一个Depth Only Pass&#xff0c;这个pass的代码在Packages\com.unity.render-pipelines.universal\Shaders\DepthOnlyPass.hlsl中。这是一个公共pass&#xff0c;几乎所有的URP shader都会包含这个pass。本篇说一说这个pass的作用以及实…

Ubuntu映射到Windows网络驱动器

将虚拟机Ubuntu映射到Windows网络驱动器中&#xff0c;我们需要Ubuntu的网络和主机网络处于同一网段下&#xff0c;然后使Ubuntu具备共享文件功能&#xff0c;最后在windows下添加网络地址。 将Ubuntu设置和主机同一网段 查看主机网络信息 在虚拟机中 选择编辑-- 虚拟网络编…

Java的字符串String

文章目录什么是字符串String类的声明为什么我们的String是不可变的为什么String类用final修饰String的创建字符串比较相等关于Java中的比较关于字符串不同赋值操作对应的内存分配那对象如何进行比较内容字符串常量池StringTalbe的位置字符串常见的操作拼接操作获得字符串的子串…

事件驱动的微服务、CQRS、SAGA、Axon、Spring Boot

事件驱动的微服务、CQRS、SAGA、Axon、Spring Boot 学习构建分布式事件驱动的微服务、CQRS、事件溯源、SAGA、事务 课程英文名&#xff1a;Event-Driven Microservices, CQRS, SAGA, Axon, Spring Boot 此视频教程共10.0小时&#xff0c;中英双语字幕&#xff0c;画质清晰无…