SR-MPLS原理与落地:从SID、SRGB到TI-LFA与配置实践

发布时间:2026/10/9 3:07:13
SR-MPLS原理与落地:从SID、SRGB到TI-LFA与配置实践 SR-MPLS这四个字最近几年只要在运营商、企业骨干网或者大型数据中心网络里工作的人基本都会频繁碰到。它全称是Segment Routing over MPLS直译是“基于MPLS数据平面的段路由”工程圈里一般直接叫SR-MPLS。我第一次认真研究它是因为一张省干网络实在跑不动了——当时核心层用的是LDP加RSVP-TE隧道多、协议多一次割接要同时盯IGP收敛和RSVP信令状态半夜三更还得人工去重置软状态运维成本肉眼可见地高。后来把核心层逐步切换到SR-MPLS配置量砍掉一大截流量工程的部署方式也彻底变了。这篇文章我就把SR-MPLS从原理到落地拆开讲清楚适合刚接触这个技术的一线网工也适合正在规划传统MPLS网络平滑演进的架构师。1. 先搞明白SR-MPLS到底在解决什么问题1.1 传统MPLS为什么让人头大传统MPLS网络里要让标签转发跑起来通常需要两套信令协议LDP负责沿着IGP最短路径分发标签RSVP-TE负责建立显式路径并预留资源。问题就出在“多”字上。一台PE/P设备上IGP要维护邻居关系LDP要和所有邻居建立会话并逐条分配标签RSVP-TE更夸张每一条隧道在沿途每一跳节点都要保存PATH和RESV状态隧道数量一上来设备内存和CPU直线飙升。而且LDP有个天然短板它只会跟着IGP的最短路径走想人为指定一条避开拥塞链路的转发路径LDP完全做不了必须再叠一层RSVP-TE。RSVP-TE的配置极其琐碎路径要逐跳定义带宽要逐条预留隧道的软状态还需要周期性刷新一刷新就是全网范围的流量交互。更麻烦的是一旦IGP拓扑发生变化RSVP-TE需要重新计算路径并逐跳下发收敛时间往往以秒级起步对关键业务来说这个窗口太长了。这些痛点归根结底是一件事路径信息被分散存放在每一台设备的信令状态里而不是由头端节点整体决策。只要换个思路把路径信息集中编码在数据包头部的标签栈中所有中间设备变成“无状态转发”上面这一堆问题就全都绕开了。1.2 段路由的核心思想把整条路径变成一串路标SRSegment Routing的核心思想不难理解用快递转运来类比很贴切。老办法——LDP/RSVP-TE时代相当于一个包裹从A市发往E市包裹每到一个中转站中转站都要通过电话会议和上下游确认“接下来往哪送”然后各自记录在台账上。SR的做法则简单粗暴包裹从A市出发之前发货人就把整条路线的关键中转站信息按顺序做成一串贴纸贴在包裹上。每个中转站收到包裹后只撕掉最外面那张贴纸看看下一站是谁然后照送不用知道整条路线的全貌也不用维护额外的台账。对应到网络里这一张贴纸就是一个Segment段每一段的标识符叫SIDSegment Identifier。一整条端到端路径就是一组有序的SID列表也就是MPLS里的标签栈。头端节点源节点负责把标签栈压进数据包中间的转发节点只看栈顶标签做一次MPLS标签交换把栈顶剥离或替换后继续转发。路径的所有决策都发生在头端中间设备不需要为每条隧道保存状态这就是“源路由”的意思。这样一来SR-MPLS把LDP和RSVP-TE这两套庞杂的协议直接拿掉了标签的通告交给原有IGP来做路径的编码交给标签栈来做网络架构一下子瘦身很多。2. 核心要素逐层拆解SID、SRGB与IGP通告2.1 Prefix-SID、Node-SID、Adj-SID这些SID到底怎么用在SR-MPLS里SID不是随便编一个数字而是有明确语义的“路标”。用得最多的是三类Prefix-SID绑定到某一条IPv4/IPv6前缀上的SID。最常见的就是设备Loopback0接口对应的主机路由比如/32这条前缀的SID在整个SR域内全局有意义任何一台设备都知道这个SID对应的转发方向。Node-SID本质上是绑定到某台设备Loopback地址的特殊的Prefix-SID因为通常每台设备的Loopback地址在全网唯一所以Node-SID直接可以被理解为“代表这台节点”。IGP计算路由时到Node-SID指向的最短路径就是数据实际走的路径。Adj-SID绑定到某两台设备之间某条具体邻居链路的SID。它只在通告这条SID的节点上有局部意义它的作用是强行指定流量从某一台设备走某一条特定链路口出去而不是遵循SPF最短路。Anycast-SID同一组多台设备通告同一个相同的Prefix-SID形成一个任播地址。流量沿着IGP最短路径到达这个组里最近的一个节点适合做负载分担或冗余保护。用一个简单的例子说明。假设R1要发数据到R5R1知道R5的Node-SID为16005那么它在数据包上压入标签16005中间路由器收到后根据MPLS转发表把标签一层层往后送R5在最后一跳弹出标签并还原成IP包。这个场景下R1只告诉网络“我要去R5”走到哪里由IGP最短路径决定。如果R1实际想绕开某条链路要经过某条特定光纤走那就在标签栈里叠加一个Adj-SID外层放Adj-SID指定“下一跳必须走这条链路”内层放Node-SID指定“最终目标是谁”。转发的时候先按外层SID走到指定链路后弹出外层标签再按内层SID继续送。这就是SR最核心的表达方式标签栈的顺序就是路径的顺序栈顶先执行。2.2 SRGB和标签分配机制这里必须引入SRGBSegment Routing Global Block全局段路由块的概念。SRGB是一个全局统一的标签空间所有参加SR路由的设备都必须配置相同的SRGB区间通常是一个连续的MPLS标签范围比如16000到23999。在这个范围里SID用“索引值Index”来标识实际标签值 SRGB起始值 Index。举个例子全网配置SRGB为16000-23999设备R2给它的Loopback地址分配Prefix-SID index 2那么R2的Node-SID实际对应的MPLS标签就是16002。同理R5配index 5就是标签16005。因为全网SRGB一致所以大家看到一个SID index都能推导出同一个MPLS标签值。这个设计巧妙在哪里传统MPLS里每台设备独立地给自己的每一条前缀分配一个本地标签然后通过LDP把“标签-前缀”的映射关系通告给所有邻居每个节点的转发项都不太一样标签管理分散。SR-MPLS则是全网共享同一个编号体系SID本身就是全球唯一的路由标识不需要逐台分发“标签映射表”相当于给网络里的每个关键前缀发了一张固定身份证。2.3 IGP如何通告SIDIS-IS和OSPF的扩展SID不是手工写在每台设备路由表里的而是靠IGP的协议扩展自动泛洪出去的。对于IS-IS来说SR-MPLS的扩展在RFC 8667里定义IS-IS的LSP报文中新增了SR-Capabilities Sub-TLV通告设备的SRGB范围和算法、SR-Algorithm Sub-TLV、Prefix-SID Sub-TLV等对于OSPFv2来说对应的扩展定义在RFC 8665里通过Opaque LSA承载这些信息。OSPFv3的SR扩展则对应RFC 8666。IGP通告SID的大致流程是每台设备使能SR-MPLS后会把自己的SRGB区间、支持的算法最基本的是SPF最短路径算法、以及自己绑定到前缀上的SID Index值放进LSP/LSA里发出去。整个SR域内的设备收到这些信息后本地构建出两张关键表一是IGP路由表知道某个前缀怎么走二是SID映射表知道某个SID对应哪条路径。这里有一个“为什么必须靠IGP”的逻辑SR希望中间的转发节点不做状态维护但至少得知道每个SID往哪个方向转发。这个“转发方向”信息本质上就是IGP对每个前缀的最短路径结果。SID只是给这条前缀贴了个标签编码所以把SID作为前缀的属性放到IGP里一起泛洪是成本最低、一致性最高的方案。不需要新建任何信令协议一个IGP就把拓扑和转发标签全部搞定了。如果要用SDN控制器做全局流量调度控制器还得通过BGP-LSBGP Link State把SR域内的拓扑、SRGB、SID信息都上收上来然后由控制器统一下发路径策略。这就形成了“全网一跳感知、控制器集中决策”的架构。3. 转发原理与关键机制3.1 标签栈怎么个压法一个五节点组网实例光说概念容易飘直接上拓扑。假设有R1到R5五台路由器链路线性排列R1-R2-R3-R4-R5SRGB全网配置16000-23999各节点Loopback的Node-SID分别为16002160031600416005。场景一R1发数据到R5走最短路径。R1压入标签栈[16005]转发交给MPLS数据面。R2收到后查MPLS转发表发现栈顶标签16005的出接口是R3于是交换标签后送到R3R3同样送到R4R4是R5的倒数第二跳根据PHP机制Penultimate Hop Popping倒数第二跳弹出直接把标签弹掉把原始IP包交给了R5。这个过程中间节点完全没有为这条路径维护任何呼叫状态只看标签。场景二R1发数据到R5但要求经过R2与R4之间的直连链路。由于这条链路不在IGP最短路径上IGP最短路是R2-R3-R4就必须叠加显式段。R1压入标签栈[AdjSID(R2-R4直连), 16005]。外层标签是R2通告的邻居SID内层标签是R5的Node-SID。R1将包发给R2R2看到外层是本地邻接SID知道要走那条直连链路于是剥掉外层标签把包从指定链路口转发给R4同时带上的内层标签16005。R4看到16005继续送到R5并弹出。这样实际路径就是R1-R2-R4-R5完全绕开了R3。场景三路径上想把多个中间节点都作为“锚点”比如要求经过R2、R3、R4再到R5。R1可以把标签栈写成[16003, 16005]。栈顶16003的意思是“先走到R3”R1沿IGP最短路把包发到R3经过R2R3弹出16003看到栈里还有16005于是再沿IGP最短路发往R5经过R4。通过这种方式任何逐跳指定的约束路径都可以转化为多个Node-SID组成的标签栈。这就是SR-MPLS数据平面的基本玩法头端把路径折叠成一串SID中间节点无脑按照栈顶标签走。3.2 数据平面复用MPLS部署平滑的关键值得强调的是SR-MPLS不是一个全新数据平面它复用的还是标准MPLS标签转发机制。这意味着现有运行MPLS的设备只要硬件支持标签转发绝大多数核心/汇聚设备都支持就能通过软件升级启用SR-MPLS。标签格式、栈深度、TTL处理、显式空标签等细节和传统MPLS完全一致不需要替换硬件也不需要改变物理拓扑。这一点非常关键。我在实际项目里见到很多团队担心引入SR是不是要动网络架构其实不用。只要设备支持SR可以在存量网络上直接叠加启用并与传统MPLS协议共存运行。这在后面第6章还会讲到平滑演进的细节。3.3 与LDP、RSVP-TE的对比一张表看懂差异把三种技术方案放在一起看差异非常直观维度LDPRSVP-TESR-MPLS信令协议独立的LDP会话和标签分发独立的RSVP会话和逐跳状态无独立信令IGP扩展通告SID路径计算跟随IGP最短路径无法显式指定头端CSPF计算逐跳下发头端/控制器计算标签栈编码中间节点状态需保存完整标签转发库每条隧道逐跳保存软状态只需保存SID对应的转发项无隧道状态显式流量工程不支持支持但配置和运维复杂支持头端一条策略即可快速重路由LFA受限于拓扑TE FRR需预留带宽TI-LFA拓扑无关扩展性较好差状态随隧道数量线性增长好头端有状态中间无状态运维复杂度中高低RSVP-TE的逐隧道状态是它最大的包袱状态越多故障面越大。SR-MPLS的简洁性直接转移到了运维端新增一条业务路径不需要逐台设备配置信令参数控制器下发一条segment-list就行了。4. 实操在现网配置SR-MPLS的关键步骤4.1 规划SRGB和SID索引动手配置之前最重要的一步是规划。SRGB全网统一取16000-23999是最常见的做法这个范围能容纳几千个SID对绝大多数骨干网足够了。Index的规划建议按照设备角色或地理位置分段编号例如核心层设备Index从100起汇聚层设备Index从1000起标号规则全网文档化避免后续加设备时SID冲突。Loopback地址最好全部使用/32掩码OSPF环境下尤其要注意不规范掩码可能导致Prefix-SID通告不完整。每台设备的Loopback需要分配一个唯一Index并同步记录到网络资产表里。4.2 以IS-IS为例的设备配置参考IS-IS在运营商现网中广泛部署也是在SR-MPLS中支持最成熟的协议之一。下面给一份简化的配置参考以常见设备风格为例具体命令视厂商实现略有差异router isis 1 net 49.0001.0000.0000.0002.00 segment-routing mpls srgb 16000 23999 address-family ipv4 unicast segment-routing mpls interface Loopback0 ip address 2.2.2.2 255.255.255.255 address-family ipv4 unicast prefix-sid index 2这里的关键点有三个SRGB全域一致IS-IS进程中启用segment-routing mplsLoopback接口下给前缀绑定prefix-sid index 2。设备会自动计算出Node-SID 16000 2 16002并通过IS-IS LSP泛洪给全网。OSPFv2环境下的配置思路上基本一致router ospf 1 segment-routing mpls area 0 srgb 16000 23999 interface Loopback0 prefix-sid index 2启用之后设备会建立MPLS转发层面的标签转发表项并支持通过IGP自动完成SID的传播。配置不算难真正考验人的是全网一致性。4.3 验证命令与输出解读配置完成后验证工作决定了一次割接的成败。下面这几条命令就是最常用的体检工具# 查看本机的SRGB范围与SR能力 show segment-routing mpls label-range # 查看已经通告/学习到的所有Prefix-SID show segment-routing mpls prefix # 查看MPLS转发项确认标签转发生效 show mpls forwarding # 测试到某条前缀是否存在端到端标签转发路径 ping mpls ipv4 5.5.5.5/32我检查的时候有一个习惯不只看本台设备还要在源、宿以及中间节点分别执行show mpls forwarding逐跳对比转发项的出入接口是否和预期拓扑一致。任何一跳的转发项缺失都可能导致端到端标签路径断裂。还要注意SR-MPLS启用后如果网络中同时存在LDP部分设备上会出现“LDP与SR标签竞争”的情况哪些前缀走LDP分配的标签哪些走SR分配的标签默认策略可能不一致。规划时务必明确标签优先级必要时对特定前缀指定SR标签优先避免流量走到一半标签栈断掉。4.4 常见配置阶段的坑我踩过且建议所有人都避开的坑有几个一是全局SRGB不一致某台设备少了一段看起来问题不大实际转发时标签值错位业务直接中断二是Prefix-SID Index重复两台不同节点绑定了相同Index全网路由表里出现两个“160XX”打到不同方向流量就进黑洞了三是忘了给Loopback配置/32掩码部分OSPF实现不通告主机路由Prefix-SID自然不生效。配置完成后的“全网SID台账核对”这一遍功夫省不得。5. 真正值钱的应用TI-LFA、Flex-Algo与流量工程5.1 TI-LFA拓扑无关的快速重路由SR-MPLS最有杀伤力的特性之一就是TI-LFATopology Independent Loop-free Alternate拓扑无关无环备份路径。传统LFA在做快速重路由时有个硬约束它要找一个“比当前节点更靠近目的节点的邻居”来做备份下一跳并不是所有拓扑都能找得到。远程LFA虽然扩展了备份空间但需要预先建立额外的封装路径运维也不简单。TI-LFA的思路完全不同它利用SR的标签栈能力在主路径失效的位置预先计算一条经过某一台远端节点的无环备份路径并将这条备份路径编码成一组SID标签栈。主链路故障时本地设备立刻把报文切到备份路径整个过程不等IGP收敛通常能做到毫秒级切换而且和拓扑形态无关——只要网络里存在另一条可达路径理论上就能算出来。这对承载网的可用性提升是实打实的。以前RSVP-TE的FRR需要预留带宽、逐隧道配置很多现网隧道多了根本无法全覆盖。TI-LFA配置简单得多启用SR后基本是默认能力保护效果却更好。5.2 基于SR的流量工程头端一条segment-list传统TE用RSVP-TE要在头端定义LSP路径然后逐跳维护显式路由对象SR做TE核心动作就是定义一条segment-list。例如从R1到R5显式路径是经过R2-R3-R4-R5那么segment-list就可以写成segment-list R1_to_R5 index 10 sid 16003 index 20 sid 16005然后把它绑定到一条显式路径策略上下发到头端节点即可。中间节点无需配置无需为每条隧道保存状态。控制器场景下更是如此PCE通过BGP-LS拿到全网SR拓扑算好路径后通过PCEP或NetConf/YANG把segment-list下发到头端设备策略调整可以在分钟级完成。这比RSVP-TE时代逐台设备操作、逐隧道刷新路径的方式先进了一个量级。5.3 Flex-Algo让IGP自己算多棵“树”SR-MPLS在流量调度上还有一个很实用的扩展叫Flex-AlgoFlexible Algorithm灵活算法。传统IGP只有一颗SPF树所有流量都按同一套度量跑最短路。Flex-Algo允许网络管理员定义多套算法例如“最低时延算法”“最小跳数算法”“避开某条链路的算法”每台设备通过IGP通告自己的算法参与能力IGP为每种算法分别计算一棵不同的生成树。使用场景非常直接如果一张网络里普通业务走默认SPF度量是链路带宽/开销而视频业务希望走低时延路径Flex-Algo跑起来之后SR的SID本身就具备算法维度头端给不同业务选择不同算法SID流量自然就分流到不同的树上。这是在IGP层面实现的“大颗粒度流量工程”比逐条隧道预留带宽要轻量得多。所以在实际组网里SR TE的落地形态通常是两种细粒度、逐业务的精确调度交给控制器下发segment-list粗粒度、按业务类别的自动选路交给Flex-Algo。两者配合使用网络调度的灵活度和运维成本都能兼顾。6. 常见问题与排查技巧实录6.1 SID冲突与黑洞症状某一方向业务时通时断或到某条路由的MPLS ping显示标签路径断裂。排查第一步不是看光功率或接口状态而是看SID表。我在一次跨省业务联调中遇到的情况是两座核心节点的Loopback都绑定了同一个Index全网泛洪后转发表里出现了同一个标签对应两个不同出接口的条目流向其中一端的业务就被送到了错误方向。排查命令就是全网执行show segment-routing mpls prefix把每个Index对应的节点列个清单发现有重复立即修改其中一边的Index值。杜绝这类问题的根本手段是规划期就建立Index台账并把它作为变更评审的一项必查内容。6.2 SRGB不一致导致标签错位症状转发面看起来有表项但端到端ping mpls不通。原因往往是某台新上线设备SRGB配置和其他设备不一致例如一台设备配了17000-24999其他设备都是16000-23999这台设备通告的Prefix-SID index 2实际MPLS标签是17002而全网其他设备认为标签应该还是16002。标签错位后中间节点找不到匹配的转发项流量直接丢弃。排查方法就是全网巡检SRGB配置看是否完全一致。这也是为什么SRGB规划一定要区域级统一管理不能因为某台设备标签不够用就单独调整区间。6.3 SR与LDP共存期间的平滑切换症状SR启用后部分既有LDP业务仍然工作但新部署的SR业务不通或两者相互抢标签。解决思路是明确“共存策略”而非“一刀切”。现网演进时可以先让SR和LDP同时运行IGP同时通告两种标签信息数据面选择由本地策略决定。我建议的切换顺序是先在核心层启用SR并建立SR转发表再逐步把需要承载的业务隧道从LDP切换为SR segment-list最后才在边缘节点关闭LDP。关闭LDP前务必花一个维护窗口把全网所有节点的SR转发项和MPLS ping检查跑一遍确认没有任何前缀依赖LDP标签转发。6.4 常见问题速查表现象可能原因首选排查手段Prefix-SID重复Loopback绑定了相同Indexshow segment-routing mpls prefix全网点名核对标签转发黑洞全网SRGB不一致巡检各节点label-range配置IGP邻居正常但SR不生效未在IGP进程内启用segment-routing检查IGP的SR扩展是否开启OSPF下Prefix-SID不通Loopback掩码不是/32确认Loopback为32位掩码端到端路径走错显式segment-list绑定的SID不是预期路径用show mpls forwarding逐跳验证明细TI-LFA未生效备份路径标签栈深度超限检查SRGB范围是否够用或调整备份路径关键锚点6.5 一个独家排查心得SR-MPLS网络排查和传统MPLS最大的区别在于传统MPLS出问题你要顺着协议状态一层层找RSVP-TE每跳查PATH/RESVLDP每跳查标签绑定SR-MPLS出问题你只需要两步先看SID映射是否全网统一再看段路由的标签栈是否被某台设备错误弹出。绝大多数故障都出在“标签规划不一致”和“倒数第二跳弹出逻辑异常”这两类原因上。理解了这一点排查思路会清晰很多不会被IGP或MPLS的细枝末节干扰。我在实际运维中的一个习惯是收尾必做两次验证一次是show mpls forwarding逐跳核对一次是控制平面与数据平面同步比对——控制平面看SID表、数据平面看转发表两张表每个条目的出入接口必须一致。这套动作虽然朴素但救过大命值得推广。这篇从原理到落地的拆解就到这里。按照我个人经验SR-MPLS真正难的不是配置而是从“逐跳维护状态”的旧思维切换到“源路由编码路径”的新思维。上手最快的办法是把一整套现网的SID台账和segment-list翻出来拿测试设备模拟一遍从R1压栈到R5全弹出的过程。等你想清楚“为什么这个标签栈能代表这条路径”之后后续的TI-LFA、Flex-Algo、控制器下发这些高级玩法就都是水到渠成的事了。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询