Segment Routing笔记(一)

2023-05-16

SR | 理论(一)

MPLS TE缺点

  1. RSVP-TE大部分都是为了FRR的目的
  2. 不支持ECMP
  3. 所有流量都需要在隧道里
  4. 诞生了“战术型”TE,只在需要的时候使用。

术语

TI-LFA:与拓扑无关的无环路备份,能保证备份路径的最优性即备份路径是收敛后路径,并且是针对每个目的地单独计算的。特点:
- 小于50ms链路、节点和SRLG保护
- 100%覆盖率
- 基于IGP自动计算
- 是PLR本地机制
- 可增量部署
- 适用于IP、LDP、SR流量

PLR:本地修复点SRv6:把SR架构应用到IPV6数据平面称为SRV6LFIB:MPLS转发表LSD:标签交换数据库,用于管理本地标签的分配。

SR定义

基于源路由,节点选择路径并引导数据包沿着该路径转发,做法是在数据包报头插入带顺序的segment list,而segment可以表示任何类型的指令,转发路径上的节点不需要维护流状态信息,除了源节点之外其他节点不需要存储和维护任何流状态信息,流量引导只在于节点。

segment和SID

segment是节点针对所接受到的数据包要执行的指令,包含在数据包报头中。SID(segment标识segment Identifier)用于标识segment,格式可自行实现。Segment List(SID List)是segment的有序列表,每个条目是一条指令。

segment list支持的操作

PUSH:在SID list头部压入一个或多个segment,并将第一个设为活动segment;CONTINUE:表示segment还没处理完成,继续保持活动状态;NEXT:活动segment已完成,segment列表中的下一个segment将成为活动segment;

全局和本地segment

全局:表示所有启用SR的节点均质池与全局segment相关联的指令,每个节点转发表中均装载全局segment的指令。
本地:只有生成本地segment的节点支持与该segment相关的指令。不一定只在本地有效

SR控制平面

可由IGP或BGP分发segment,、

IGP segment

IS-IS和OSPF都支持分发SID的扩展,IGP segment分为IGP前缀segment(IGP prefix segment)和邻接segment(IGP Adjacency segment),分别对应IGP前缀和IGP邻接。

IGP Prefix Segment

Prefix-SID是由IS-IS或OSPF通告的全局segment,特点:

  • 全局性,SR域中所有节点都知道如何处理prefix segment为活动segment的数据包
  • 多跳的,并且允许使用跨多跳ECMP
  • 支持ECMP
  • 由动态路由协议自动维护和计算
  • 自动50ms保护

要求:prefix-SID全局唯一的,最典型的是分配Loopback地址,使用的是SPF的最短路径算法,但支持松散最短路径和严格最短路径两种模式。一个算法中一个prefix只能关联一种prefix-SID。

IGP节点segment

Node segment Node-SID,也是一种IGP prefix segment,通常用于该节点环回地址的主机前缀,类似路由器ID
Node-SID是prefix-SID的子类型,所以二者的指令相同,不同点在于Node-SID仅与主机前缀相关联,即N-flag被置位,其他被通告时不会有该指示。

IGP anycast segment

域中多个节点上分配相同的单播前缀,该单播前缀构成anycast segment,该前缀在语法上和单播IP前缀无区别,Anycast-SID是与anycast前缀相关联的特殊类型IGP prefix segment,Anycast segment是Prefix segment的子类型,因此指令相同。不标识特定节点,而是标识一组节点。通告时N-flag`不置位。一个prefix-SID即使关联到一个loopback地址上的主机前缀也不一定总是标识一个节点,也可能是一个anycast-SID

IGP Adjacency Segment

Adj-SID单向邻接segment,指令为“引导流量由与该segment相关联的邻接链路(集合)转发出去”而不再遵循最短路径如何。
一般Adj-SID用于通告它的节点的本地segment。虽然协议允许全局,但一般用在本地使用。

可以给一条特定的链路分配多个Adj-SID,使得每个Adj-SID具有不同的属性。

Adj-SID只能被始发它的路由器识别。但不支持ECMP。

二层Adj-SID

用于引导流量到单个LACP成员组的一个成员链路上。

组Adj-SID

group Adj-SID用于实现ECMP的方式下在组内链路上转发流量

BGP Prefix segment

BGP Prefix-SID与BGP前缀相关联,属于全局segment,指令为“引导流量沿着支持ECMP的BGP多路径去往该segment相关联的前缀”。BGP prefix-SID可以把流量负载均衡到可用的BGP多路径上。

BGP anycast segment

效果与IGP anycast segment效果相同,简写为BGP Anycast-SID。

BGP 对等体segment

与BGP peer特定邻居或一组邻居相关联,为本地segment。通常由BGP speaker分配给其对等体会话,并通过BGP通告出去。

还有BGP 对等体节点segment,对等体邻接segment。

SR数据平面

SR的MPLS数据平面利用MPLS架构,SID表现为MPLS标签或MPLS标签中的索引。segment列表在MPLS数据包中被表示为MPLS标签栈。

SR的IPV6数据平面被称为SRv6,在SRv6中,segment体现为IPv6地址,SRv6无需网络支持MPLS就可以提供SR功能。

SID在数据平面被编码为MPLS标签,在SR中前缀到FEC的映射方式与传统MPLS基本相同,唯一的区别为对应该FEC的标签是从Prefix-SID(IGP/BGP作为信令协议)获得,而不是从LDP分发获得。

SRGB

SR的全局块SRGB是用于全局segment的SID集合。SID是一个标签值或标签块的一个索引,本地segment的SID是本地标签值,而全局segment的SID是全局唯一的索引。SRGB是给特定节点分配全局segment的一个本地标签集合
每个节点都可独立决定分配SRGB的预留范围。

SID索引从0开始,指向每个节点本地SRGB中的一个本地标签值,一般SRGB中的第一个标签值加上SID索引数字,就可计算出全局segment的本地标签值。

SRGB只本地有效,所以每个节点需向其他节点通告它的SRGB。但SRGB不适用于本地segment,SID也是SRGB外的标签范围分配的。

SR MPLS标签栈操作

segment列表MPLS标签栈
PUSHPUSH
CONTINUESWAP
NEXTPOP

倒数第二跳

倒数第二跳弹出会导致MPLS的EXP(SR中称为TC字段)在倒数第二跳被弹出,导致COS信息无法到达最后一跳节点,解决方案为倒数第二跳将顶层标签交换为显式空标签,而不是弹出。代价就是最后1跳必须先弹出空标签,再进行二次查找。

最后一跳

该跳可以是不带任何标签,直接按照报头进行查找。

Adj-SID和MPLS

Adj-SID的MPLS标签动作总是弹出,和Prefix-SID的倒数第二跳不同。
Adj-SID与邻接相关联,而不是和前缀相关联。因此流量不会自动被压入Adj-SID标签。Adj-SID被用于引导流量到特定链路,不管是不是最短,比如TI-LFA,SRTE

MPLS TTL和TC/EXP

MPLS标签格式
  • LABEL: 20bit标签值;
  • TC: 3bit TC字段,也叫EXP位;
  • TTL:8bit TTL字段;
  • S:1bit 是否栈底;

当SR MPLS域在入口收到去往隧道的报文,压入Perfix-SID标签,并将IP TTL减一后复制到MPLS标签的MPLS TTL字段,或把MPLS TTL字段设置为255,默认是复制(可通过命令改变默认行为),在压入多个标签时(TE, TI-LFA,L3VPN等)所有标签的MPLS TTL都一样,都是从IP TTL复制来的。可选择对本地生成数据包有效,也可选择对转发的数据包有效。

当最后一个标签被弹出且IP报头暴露时,默认行为是将MPLS TTL减一后再将其复制到IP TTL(仅当MPLS TTL小于IP TTL时才会发生,防止环路导致IP TTL不会递减到0),也可配置不复制,这样数据包在MPLS网络中的所有跳数不会被计入。

MPLS到MPLS 的TTL

交换

交换

入向顶层标签被交换的话,默认只有顶层的标签MPLS TTL减一

交换+压栈

交换+压栈

入向顶层被交换同时有一个或多个标签被压入,则顶层标签的MPLS TTL减一,然后复制到交换之后的MPLS TTL字段以及 所有新压入标签的MPLS TTL字段

弹出

顶层标签要被弹出,则顶层MPLS TTL减一后复制到新暴露出标签的MPLS TTL字段,仅当顶层MPLS TTL小于新暴露标签的MPLS TTL值时才会发生。

MPLS TC/EXP

当入向数据包压入一个或多个标签时,默认将IP报头的优先级复制到所有新压入标签的MPLS TC字段,如果IP DSCP的6个比特都被占用了则将DSCP的前三个比特复制。
当弹出最后一个标签时,默认不会将MPLS TC字段复制到暴露出的IP优先级或DSCP位。
当顶层标签被交换时,则MPLS TC字段复制到交换后的标签上。
当顶层标签被交换且又有新压入的标签时,则顶层标签的TC字段复制到交换后的和新压入的。
当弹出时,默认顶层TC字段不会复制到新暴露出的TC字段。

MPLS 负载均衡

为实现用数据包的MPLS报头下的IP头负载均衡,设备需要深入数据包报头中查看,不同设备可以深入的能力不一样,如果标签栈过深则会有一定影响。

MPLS MTU

PTU(Protocol Data Unit)规定了该协议层最大数据包,如二层以太网MTU为1514字节(二层头开销14字节,三层1500字节,不含前导码、帧定界符、FCS等)。而PPP/HDLC则二层开销为4字节。

所有接口IP MTU默认1500字节,而MPLS MTU默认也是1500,单个MPLS头4字节。为保持IP MTU的默认,则MPLS MTU要增加4*N字节。N为MPLS报头中最大标签数量。最后应用到接口上还必须增加二层MTU。

为考虑到Jumbo帧,还经常使用9216字节。

SRGB

SRGB用于指定全局Segment标签范围,SRGB范围的大小在SR域中所有节点上应当相同,否则受限于最小的范围。SRGB大小决定了全局segment的SID索引的最大值。

思科默认16000-23999,共8000个segment。可修改

SRGB与anycast segment

同一anycast集合中的所有节点应适用相同SRGB来简化操作。最好网络中使用相同的SRGB。

SRGB为节点属性,与SR协议无关,修改SRGB会导致流量中断

SGRB配置的优先级应用顺序:每个IGP实例的配置>全局配置>默认
BGP仅使用全局SRGB,无默认值,必须显式的配置。

标签空间默认划分范围:
0~15:特殊用途保留
16~15999:静态MPLS
16000~23999:默认SRGB
大于24000,用于动态标签分配

动态标签的例子:LDP 、RSVP、L2VPN、BGP、TE、 ISIS、OSPF
在路由器启动时,LSD会优先让SR的控制平面协议(ISIS, OSPF和BGP)优先发起注册,并执行SRGB的分配。

LSD首先等待SR协议客户端去注册,比如ISIS或OSPF,等他们激活分配标签后,再为其他MPLS应用分配本地标签。

  1. 每个节点保留一个范围的本地标签,用于全局segment的SGRB
  2. Prefix-SID是SRGB中的唯一索引
  3. 前缀始发节点使用Prefix-SID通告索引
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Segment Routing笔记(一) 的相关文章

  • java8的ConcurrentHashMap为何放弃分段锁,为什么要使用CAS+Synchronized取代Segment+ReentrantLock

    原文地址 xff1a https cloud tencent com developer article 1509556 今天突然被一个同事问到java8为何放弃分段锁 xff0c 于是花了点时间针对这个问题进行了小小的总结 jdk1 7分
  • 这个为什么报错*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS

    这个错误消息是指在软件编译过程中 xff0c 编译器发现了一个段 segment xff0c 但是这个段并没有被调用 uncalled 这可能是因为这个段中的代码没有被执行 xff0c 或者是因为这个段没有被正确链接到程序的其他部分 这个问
  • HCIE-Routing & Switching V3.0模拟试题.docx

    1 单选 如果有一个运行802 1D生成树协议的局域网 那么在这个网络中的交换机会从根交换机收到哪些参数信息 A Maxage nbsp B Forward delay nbsp C Root Cost nbsp D 以上选项都正确 2 单
  • Paper review: Dynamic Routing Between Capsules

    Paper review Dynamic Routing Between Capsules 基本信息主要内容摘要基本思想神经科学设想routing by agreement卷积胶囊 算法和网络算法细节网络结构网络主体用重构来做正则化方法 实
  • 【21-7-25笔记】SR(Segment Routing)详解

    第一卷 第一章 简介 1 11 SRv6 SRv6 将SR框架应用到IPv6数据平面 SRv6对IPv6的价值至关重要 xff0c 将极大地影响未来的IP基础设施部署 xff0c 无论是在数据中心 xff0c 大规模汇聚网络 xff0c 还
  • Segment Routing笔记(一)

    SR 理论 一 MPLS TE缺点 RSVP TE大部分都是为了FRR的目的不支持ECMP所有流量都需要在隧道里诞生了 战术型 TE xff0c 只在需要的时候使用 术语 TI LFA 与拓扑无关的无环路备份 xff0c 能保证备份路径的最
  • Segment Routing—BGP-LS

    BGP LS概况 BGP LS是学习多个IGP区域和区域拓扑的首选机制 BGP LS使用BGP xff0c 以可扩展的方式分发网络信息 重要的是 xff0c BGP LS还承载了IGP没有分发的信息 xff08 例如BGP对等体互联链路 x
  • 【数据结构与算法】车辆路径问题(Vehicle Routing Problem,VRP)

    车辆路径问题 xff08 Vehicle Routing Problem VRP xff09 什么是车辆路径问题 车辆路线问题 xff08 VRP xff09 是指一定数量的客户 xff0c 各自有不同数量的货物需求 xff0c 配送中心向
  • NS3 的 ipv4-static-routing-test-suite 源码分析

    下面进行源码注释 xff1a End to end tests for Ipv4 static routing include 34 ns3 boolean h 34 include 34 ns3 config h 34 include 3
  • 程序员的自我修养--链接、装载与库笔记:可执行文件的装载与进程

    可执行文件只有装载到内存以后才能被CPU执行 1 进程虚拟地址空间 程序和进程有什么区别 程序 或者狭义上讲可执行文件 是一个静态的概念 它就是一些预先编译好的指令和数据集合的一个文件 进程则是一个动态的概念 它是程序运行时的一个过程 很多
  • C 中的内存段——文本段

    有人可以告诉我什么是 C 中的 文本段 如果可能的话 给我看一个简单的例子 Unix 系统上程序的 文本 段是代码 机器代码 组成程序的函数 特别包括 main 如果程序是用 C 或 C 编写的 它还可以包含只读数据 经典程序中的其他段是
  • 如何访问 Nuxt 插件中的 .env 变量?

    细分分析提供了一个包含秘密 API 密钥的代码片段 在我的Nuxt js项目我创建了一个名为的插件segment js我在我的nuxt config js nuxt config js plugins src plugins segment
  • 使用 ggplot2 仅将线段添加到一个方面

    作为一个例子 我有这个数据框 称为my data Groups FactorA FactorB FactorC N value sd se ci 1 Control Condition1 Condition1 Condition1 3 92
  • 如何使用 gstreamer 从较长源的片段中制作音频剪辑?

    我想使用 gstreamer 将一个音频文件中的任意剪辑保存到一个新文件中 比如原著中1分钟到2分钟的片段 我该怎么做 你需要gnonlin http wiki pitivi org wiki GNonLin documentation S
  • 如何在 R 中创建字符串的重叠段列表?

    对于像 ABCDEFG 这样的字符串 是否可以分成不同长度的重叠段的不同列表 例如 有 2 个字母 AB BC CD DE EF FG 包含 3 个字母 ABC BCD CDE DEF EFG 等等 这些片段应该只是一个字母的移位 而不是简
  • ORG指令后设置段寄存器

    我目前正在关注操作系统开发教程 http brokenthorn com Resources OSDev4 html 其中包括有关引导加载程序的讨论 我的引导加载程序当前处于 16 位实模式 因此 我能够使用提供的 BIOS 中断 例如 V
  • Tensorflow unsorted_segment_sum 维度

    我正在使用tf unsorted segment sumTensorFlow 的方法 当我作为数据给出的张量只有一行时 它工作得很好 例如 tf unsorted segment sum tf constant 0 2 0 1 0 5 0
  • 如何通过 $_GET 接受 URL 中的哈希标记?

    据我所知 井号 不会发送到服务器 因此我似乎无法使用原始 PHP 来解析数据 如下面的 URL 所示 index php name Ben address 101 S 10th St Suite 301 我希望使用 GET 数据预先填充表单
  • 使用指针作为函数参数时的段前缀

    我有一个汇编 c 问题 我刚刚读到了有关段前缀的内容 例如 ds varX 等 前缀对于逻辑地址的计算很重要 我也读到 默认值是 ds 一旦您使用 ebp 寄存器来计算地址 就会使用 ss 对于代码 cs 是默认值 这一切都是有道理的 现在
  • cytoscape.js。对于边缘线段,将坐标转换为线段距离和线段权重

    我想与社区分享一个有用的函数 该函数从坐标 PointX PointY 返回线段距离和线段权重 我从工具 例如draw io 创建图表 并且在使用多个路点制作边缘 线段样式 时 该免费软件通过其坐标提供路点 不幸的是 最新版本的 cytos

随机推荐

  • nRF52832的I2C例程代码

    nRF52832的I2C例程代码 include 34 nrf drv i2c h 34 include 34 app error h 34 define I2C SCL PIN 0 SCL引脚号 define I2C SDA PIN 1
  • HX711 24位A/D模块计算公式

    基本原理讲解 100kg 传感器 满量程输出电压 61 激励电压 灵敏度2 0mv v 例如 xff1a 供电电压是5v 乘以灵敏度2 0mv v 61 满量程10mv 相当于有100Kg 重力产生时候产生10mV 的电压 711模块对产生
  • stm32 keil实现串口printf输出中文字符

    添加如下代码 xff0c 可以GNUC的方式实现 span class hljs comment ifdef GNUC span With GCC RAISONANCE small printf option LD Linker gt Li
  • stm32 基于TIM1定时器的PWM输出

    void PWM TIM1 uint16 t arr uint16 t psc RCC APB2PeriphClockCmd RCC APB2Periph TIM1 ENABLE 定时器TIM1时钟使能 TIM DeInit TIM1 设置
  • stm32 can总线参考例程

    CAN初始化 tsjw 重新同步跳跃时间单元 范围 1 3 CAN SJW 1tq CAN SJW 2tq CAN SJW 3tq CAN SJW 4tq tbs2 时间段2的时间单元 范围 1 8 tbs1 时间段1的时间单元 范围 1
  • 物联网IOT-mqtt协议

    MQTT是一种客户机服务器发布 订阅消息传递传输协议 它重量轻 开放 简单 设计简单 易于实现 这些特性使其非常适合在许多情况下使用 xff0c 包括受限的环境 xff0c 如机器间通信 M2M 和物联网 IoT 环境 xff0c 在这些环
  • 联合索引的最左匹配原则的成因

    联合索引的最左匹配原则的成因 上面我们只看的是单一的索引 xff0c 接下来咱们来看看联合索引 xff0c 也就是回答第二个问题 联合索引的最左匹配原则的成因 什么是联合索引呢 xff0c 就是由多列组成的索引了 那亦要了解其成因 xff0
  • 腾讯云轻量服务器的Ubuntu如何使用root(根)用户登陆ssh/Shell/terminal/终端/WindTerm/FinalShell

    Ubuntu 系统的默认用户名是 ubuntu xff0c 并在安装过程中默认不设置 root 帐户和密码 您如有需要 xff0c 可在设置中开启允许 root 用户登录 具体操作步骤如下 xff1a 使用 ubuntu 帐户登录轻量应用服
  • Ubuntu安装sshd服务

    ubuntu安装ssh服务 一 安装shhd SSH分客户端openssh client和openssh server 如果你只是想登陆别的机器的SSH只需要安装openssh client xff08 ubuntu有默认安装 xff0c
  • Linux环境(六)--资源与限制

    资源与限制 运行在Linux系统上的程序是有资源限制的 这些也许是硬件引起的限制 例如内存 xff0c 也许由系统策略引起的限制 例如 xff0c 允许 的CPU时间 xff0c 或者是实现的限制 例如 xff0c 整数的尺寸或是文件名允许
  • 遇到了C/C++控制台程序无法输入中文的情况

    其实C C 43 43 控制台程序无法cin中文的情况并不是你使用了string xff0c string是能输入并保存中文的 xff1b 经过一番探究 xff0c 我发现主要的问题是文件的编码和控制台所处的代码页 xff08 控制台的编码
  • Jpg2Dcm中文乱码问题

    Jpg2Dcm中文乱码问题 最近老板提出了一个新的功能要求 xff0c 希望可以把图片转成dcm 在实现功能的问题中遇见了很多问题和掉过许多坑 于是在此记录下来 问题 xff1a 第一次在进行Jpg2Dcm时 xff0c 可以进行图片转dc
  • 神经网络的数学表达式,神经网络的数学理论

    什么是神经网络 神经网络可以指向两种 xff0c 一个是生物神经网络 xff0c 一个是人工神经网络 生物神经网络 xff1a 一般指生物的大脑神经元 xff0c 细胞 xff0c 触点等组成的网络 xff0c 用于产生生物的意识 xff0
  • python装饰器详解(四)---把参数传递给装饰器

    因为装饰器必须接收一个函数当做参数 所以 不可以直接把被装饰函数的参数传递给装饰器 装饰器就是一个普通的函数 xff0c 回顾 def my decorator func print 34 I am an ordinary function
  • Motion Deblurring图像运动去模糊代码

    http www di ens fr whyte Efficient Deblurring for Shaken and Partially Saturated Images http www di ens fr willow resear
  • maven执行install时报错 The packaging for this project did not assign a file to the build artifact

    问题描述 maven中执行plugins下面的install install时会报如下错误 span class token class name Failed span span class token keyword to span s
  • realsense相机两种获取相机内外参的方式

    https www it610 com article 1296417297711308800 htm 命令 xff1a rs sensor control 这个命令是一个exe文件 xff0c 可以去 C Program Files x8
  • wget设置代理

    1 在bash shell中设定代理 basrhc export http proxy 61 34 166 111 53A 167 3128 34 export ftp proxy 61 34 166 111 53A 167 3128 34
  • chown,chgrp,chmod,u+s,g+s,o+t

    chown user file directory change owner 将后面的目标文件或者目录的所有者替换成 user chgrp group file directory change group 将目标文件或者目录的所有组替换成
  • Segment Routing笔记(一)

    SR 理论 一 MPLS TE缺点 RSVP TE大部分都是为了FRR的目的不支持ECMP所有流量都需要在隧道里诞生了 战术型 TE xff0c 只在需要的时候使用 术语 TI LFA 与拓扑无关的无环路备份 xff0c 能保证备份路径的最