这几年,在云计算和SDN技术的推动下,很多网络新技术,新名词涌现出来,让人眼花缭乱,有些是包装概念,有些是技术创新。其中,Segment Routing可以堪称是在核心路由领域的黑科技。

在这篇文章里,我们不讲协议字段解释,不讲配置步骤,只谈谈Segment Routing 的工作原理,让我们一起看看Segment Routing为什么与众不同。

1 Segment Routing(SR)概念

1.1 什么是Segment和Segment 路径

在谈SR之前,我们先要搞清楚一个最基本的概念,什么是Segment。 如图1所示,这是一个由支持SR 的路由器组成的网络,为了和其他网络区分开,我们叫它SR 域。在SR 域里,连接任意两个SR 节点的一段网络就叫Segment。Segment 由一个Segment ID (SID) 标识。SR支持MPLS和IPv6两种数据转发平面。在MPLS中, SID是一个MPLS标签,在IPv6网络中,SID是一个IPv6地址。

图1:Segment基本概念示意图

我们分别看看图1所示Segment A, B, C, D, E 的特点。

Segment A: 连接R1到R4, 跨两跳网络R1 -> R2 -> R4 。

Segment B: 连接R4 到R6, 跨一跳网络R4 -> R6。

Segment C: 连接R6到R8, 跨一跳网络R6->R8。

Segment D: 连接R1 到R6, 三跳网络,两条转发路径: R1->R2->R4->R6, R1->R3->R5->R6,

Segment E: 连接R1到R8, 跨四跳网络,有三条转发路径。

连接SR域的入节点(R1)和出节点(R8)的段的列表,我们就叫它Segment 路径 。在图1中,从R1 到R8, 我们有多条Segment路径: Segment A + B +C ,Segment D + C, Segment E。思考一下,Segment路径 A+B+C和D+C有什么不同 ?

1.2 SR的路由架构

了解什么是Segment 和Segment 路径后,我们再介绍一下SR的路由架构。SR路由分为两个步骤:

第一步:计算Segment 路径。
数据报文进入SR域时,入节点需要为这个数据报文选择一个Segment路径,并把这个路径包含的Segment 列表写入报文头,其他网络节点根据报文头中的Segment 列表转发报文,直到出SR域。

那么谁来计算Segment 路径?

Segment路径可以是在入节点上静态配置,也可以是动态计算。Segment路径动态计算通常由单独的设备完成。这就是为什么人们说SR是一种SDN技术。需要注意是,Segment路径信息只需要下载到入节点,然后入节点把SR路径包含的段列表写入报文头中,其余网络设备上并不需要保存Segment路径信息,只是按照报文头中的Segment列表转发报文,这样有利于大规模的网络部署。

第二步:Segment 内部和Segment之间的路由和转发。

在前文的例子里, 假如R1计算的Segment路径是Segment D+C, 我们期望的是网络先把报文从R1转发到R6 (Segment D), 然后再由R6 转发到R8(Segment C)。那么下一个问题是,其他网络设备如何按照报文头中的Segment列表转发报文 ?我们将在下一章节里,详细介绍SR在MPLS网络里怎么转发。

读到这里,您可能已经意识到:SR路由第一步其实就是决定Overlay路由,第二步是Underlay路由。所以首先SR是一种Overlay 技术,如MPLS, VxLAN, GRE 一样。不同的是,其他的Overlay技术,只能指定Overlay的起点和终点,然后交由Underlay把报文从起点转发到终点。Overlay 和 Underlay完全是分开的。

然而,SR可以指定Overlay途中经过的多点,比如前文的例子,从R1到R8, 我们可以指定走 R1 -> R6 -> R8, 或者 R1 -> R4 -> R8等,可以用来规划网络流量。所以SR 更是一种流量工程技术。

1.3 Segment 转发平面

在这篇文章里,我们不讨论SDN控制器部分,我们主要讨论上文提到的路由的第二步,如何在Segment内部和Segment之间路由和转发。

SR主要支持两种数据平面,MPLS 和IPv6。

1.3.1 MPLS 转发平面

在MPLS转发平面,一个Segment SID对应于一个MPLS标签,一个Segment 路径对应于MPLS 标签栈。

SR中定义了很多种Segment, 我们只要先了解节点Segment, 节点Segment代表一个路由器节点。这个Segment 往往就是配置在路由器的loopback 0 接口上,配置如下:

这段配置的意思是,101标签用来标识这个路由器节点,网络中任何其他设备,在处理MPLS标签的时候,如果发现报文是发往101的,就需要转发给这个路由器。

这个标签是静态配置的,全局唯一。SR扩展了IGP,如图2所示,每个路由器通过IGP通告各自的节点SID 标签。各个路由器可以通过IGP独立计算去其他各个节点SID标签的最短路径。

图2: 通过IGP通告节点SID

接下来,我们看看转发平面,如图3所示,如果R1到R8 的SR路径是R1->R4->R8,

图3: SR-MPLS 报文转发

  • R4的SID 是104,R8的SID是108。R1 把相应的标签栈104/108写入报文头,然后查询去104的最短路径,下一跳是R2, R1把报文发给R2。
  • R2收到报文后,查看栈顶标签104,查询去104的最短路径,发现104是直连下一跳,R2触发PHP,弹出标签104,把报文发送到R4。
  • R4 查询栈顶标签108,查询去108的最短的路径,发送给R6。
  • R6 查询标签108,触发PHP,弹出108,发送给R8。
  • R8收到报文。

可见,SR-MPLS可以非常方便的在入节点上规划网络路径,网路中其他节点上只需要维护跟拓扑相关的信息,不需要知道每个流的路径,也不需要LDP来交换标签,这个方案非常简单有效。

1.3.2 SRGB

我们提到每个节点SID需要静态配置,而且要全局唯一。传统MPLS网络标签由路由器动态分配,事实上,我们很难知道全网范围内,还有哪些标签可以用来配置SR-MPLS。

解决的方法是引入SRGB (Segment Routing Global Block)

我们需要在每台设备上配置SRGB, 默认是16000 ~ 23999,这些标签预留给Segment Routing。如果哪台设备上,已有业务已经使用到了16000~23999中的某些标签,我们可以在这台设备上配置不一样的SRGB范围。

另外,设备的SID只配置相当于SRGB 起始标签的索引,下面的配置表明,loopback0的SID 的索引是1,那么在这台设备上对应的标签是16001。每个SID的索引要在全网范围里唯一。

配置好SRGB后,各个路由器需要通告各自的SRGB,以及各自节点的SID。如图4所示,每个节点都通告各自的SRGB Base和节点SID Index。节点SID Index 全网唯一,每个节点的SRGB范围可以各自配置,在这个例子里,大部分路由器SRGB 都从100开发,R2, R4, R6 两个节点例外,R6从200开始,R4从300开始,R2从400开始。

图4: IGP通告SRGB 和 Node SID Index

引入SRGB后,我们再看看SR MPLS 转发平面如何工作,如图5所示,假设R1到R8的SR 路径是R1->R4->R8, 那么:

图5: 引入SRGB后,SR-MPLS 的数据转发

  • R4的Index是4,R8的Index是8。所以逻辑上标签栈应该是index 4/index 8。Index 8最先要经由R4转发,R4的SRGB Base 是300,所以index 8对应的标签是308。发往标签index 4 的最短路径是通过R2, R2的SRGB Base 是400,所以index 4对应的标签应该是404。R1 把两层标签404/308 写入报文头,然后把报文发往R2。
  • R2 收到报文,检查栈顶标签404,因为R2 的SRGB Base是400,所以R2知道404是发往index 4 的SID,R2 查询index 4 SID的转发路径, 发现index 4是直连邻居,然后触发PHP, 弹出标签404,然后把报文发送到R4。
  • R4 检查栈顶标签308,因为其自身SRGB是300, R4知道报文是发往index 为8的Segment。 R4查询转发表,发现需要转发给R6, 并且R6 的SRGB 是200,所以R4 把栈顶标签从308交换成208,发往R6。
  • R6 检查栈顶标签208,因为其SRGB是200,知道是发往index 为8的Segment。 R4查询转发表,触发PHP,弹出标签208, 把报文发往R8。
  • R8 收到报文。

可见SRGB解决了全局静态分配标签可能存在冲突的问题,用户只需要为每个Segment配置一个全局唯一的index。设备发送报文的时候,会根据邻居SRGB Base 把index映射成一个真正的标签,在收报文的时候,再根据自身的SRGB Base,把标签再映射回index。

在实际应用中,最佳实践是在每个设备上配置同样的SRGB,这样可以根据标签识别整条路径,利于故障诊断。

1.3.3 IPv6 (SRv6)转发平面

下面我们看看SRv6的工作机制,首先,每个路由器通过IGP发布一个IPv6地址作为Node SID。

图6:SRv6路由转发

在数据转发平面,假设SR路径是R1->R4->R8:

  • R1 把 SR 扩展头写入报文,这里包含两个Segment。 Segment 0是R8的SID IP8, Segment 1 是R4的SID IP4。SL (Segment Left) 表示当前在哪个段,这里是1。外层IPv6 源地址是IP1, 目的地址是当前段的地址IP4。然后R1依据IGP 最短路径把报文发送给R2。
  • R2收到报文,目的地址是IP4, R2只需要做正常的IP路由,把报文发给R4,R2并不参与SR 路由。
  • R4 收到报文,发现目的地址是其自己,检查SRH,发现SL不等于0,把SL减一,把外层目的地址改成新的段地址,这里SL是0,就把外层地址改成Seg0的地址IP8,然后发往下一跳。这种操作在SRv6上叫End 操作。
  • R6收到报文,做IP路由。
  • R8 收到报文,发现目的地址是其自己,检查SRH, 发现SL 等于0,去掉IPv6 和SR外层封装,把payload 转发出SR域。这种操作在SRv6上叫End.DX4。

SRv6 可以在现有IPv6 网路中无缝部署,Linux 已经从4.10版本支持SRv6,SRv6有很多应用场景。

2 SR应用场景

2.1 简化的MPLS

SR是MPLS网络的优化和升级,可以无缝的提供MPLS网络的功能,因此在运营商网络里有大量的部署。如图7所示,客户路由器CE连接到运营商路由器PE,运营商在PE之间建立MP-BGP用来交换从CE路由器学到的VPNv4或者EVPN路由,为企业客户提供二层或者三层VPN功能。

如果运营商把网络从MPLS升级到SR,企业网络是感知不到变化的,运营商依然在PE之间运行MP-BGP交换从CE学到的IP或者MAC路由,然后把用户的流量封装在MPLS 报文里在PE 之间转发。

不同的是,MPLS报文怎么从一个PE转发到另一个PE。如图8所示,MPLS网络需要有三种协议,最底层是IGP协议实现所有路由器之间的IGP可达,在此基础上,MPLS 需要在所有PE路由和P路由器之间运行标签分发协议(LDP),用来建立PE之间的标签交换路径(LSP)。最后MPLS需要在PE之间运行MP-BGP交换用户侧的路由条目,实现用户网段在各个PE之间路由。

SR的改进在于,SR去掉了LDP协议。SR首先需要IGP 组建Underlay网络,也通过IGP 分发每个IP Prefix(FEC) 对应的标签, 同时PE也通过IGP 学到去任何其他PE Segment 的最短路径。

那么你可能要问个问题,去掉LDP有什么好处 ?

MPLS 的设计思想是每台路由器为同一个Prefix/FEC 动态的,逐跳独立的分配标签。好处在于标签都是自动分配的,用户不需要配置标签。但也会造成全网标签数量庞大等问题。

SR的设计思想是静态分配标签,SR需要用户手工为全SR域直连的每个网段静态配置一个标签(SRGB + Index)。所以,SR网络需要的标签数量是有限的。这种静态的标签分配方法相对来说更简单,更稳定。

但是,LDP不是网络致命的问题,去掉LDP也不能算是巨大的改进,但因为SR支持静态分配标签的机制,使得SR 能够使用这些静态标签来指定网络传输的路径,这就是SR支持另一个更重要的场景:流量工程。

2.2 流量工程SR-TE

流量工程要在分组交换网络里实现类似于电路交换的功能,让数据报文按照固定的路径逐跳转发。那么问题来了,逐跳的路径信息存放在哪里?主要有两种思路:

  1. 逐跳的路径信息存入网络设备中

如果要为某个IP流建立一个转发路径,就需要在沿路的每一跳设备上增加一个路由条目。如果要修改路径,就需要修改沿路的每台设备。实现和维护的难度是显而易见的。之前主流的流量工程技术 RSVP-TE就是采用了这种方法。

2. 逐跳的路径信息存入数据报文头中。

这是另一个极端,用户流量需要经过的每跳路由器信息都保存在报文头里,中间网络设备不保存用户流量的路由状态,只需要解析报文头,把报文转发到下一个节点。这种技术也没有得到广泛的应用。

SR-TE采用了混合模式,SR把关键节点的信息(Segment列表)写入报文头,让网络设备依据IGP把报文在Segment内部转发。跟RSVP-TE相比,SR-TE有很多优势。

限于篇幅,我们不展开讨论SR-TE的技术细节。我们在这里简要的讨论一下SR-TE的框架。如图9所示,SR-TE主要有这些功能模块:

  1. 网络性能度量和数据收集,控制器通过BGP-LS协议收集网络拓扑和性能度量数据。
  2. 路径计算,控制器通过PECP协议与设备交互,响应设备计算路径的请求,计算符合SLA要求的路径。路径计算算法也是SR研究的热点。
  3. 定义Policy, 为用户不同业务(目的IP网段,或者更细粒度)定义不同的SLA要求,低延时,高带宽等等。这叫SR-Policy。相对于RSVP-TE ,这个配置模式有很大的改进。对于每条policy, 可以有多条SR 路径,可以是静态路径,或者动态由控制器计算。
  4. 引流,当入口路由器收到报文时,怎么自动的匹配SR-Policy, 然后转发到SR-Policy 对应的路径。 SR-Policy的引流机制也很是自动的,不需要额外的配置策略路由等等,非常简便。

3 后记

SR的想法源自于对Openflow 等SDN技术的思考,Openflow 高举重新定义网络的大旗,希望使用软件全面控制报文转发,把转发智能从设备中完全剥离出来,Openflow从被发明之初,就得到的业界的充分响应,很多公司投入Openflow硬件和软件的研发,然而,人们也不得不思考,把大量的Openflow流转发表逐跳的写入每台设备中,这样的设计可行吗 ? 事实也证明,Openflow并没有得到广泛的应用。

另一方面,VxLAN Overlay技术近年来被广泛的应用,尤其在数据中心Fabric网络里,起初不同的厂商试图推广不同的Tunnel技术, 最终VxLAN慢慢胜出,一统江湖。然而Overlay技术对Underlay网络完全没有感知和控制,当我们需要在Underlay网络上选路时,VxLAN就束手无策了。

在这样的背景下,思科的专家提出了SR技术,很优雅的解决了大规模部署流量工程的问题,也为Overlay 和Underlay的整合提供了一个新的方向。SR已经得到业界普遍的认可,并有广泛的应用,是成功的创新技术。

这篇文章我们只简介了SR的技术原理,希望能帮您建立一个关于SR的知识框架。关于SR还有很多话题可以详谈,什么是SR-Policy,SR和另一个路由黑科技SDWAN之间的关系,如何相互集成等等。有机会我们再单独详细介绍。

下面是一些不错的参考资料和网站:

  • Segment Routing 官网https://www.segment-routing.net
  • 思科SR技术中文网站 https://www.cisco.com/c/zh_cn/solutions/service-provider/segment_routing.html
  • SR RFC 8432 https://tools.ietf.org/html/rfc8402
  • SR-Policy RFC Draft https://tools.ietf.org/html/draft-ietf-spring-segment-routing-policy-04)

Segment Routing相关推荐

  1. Segment Routing — SR-MPLS

    目录 文章目录 目录 SR-MPLS v.s. MPLS SR-MPLS SR-MPLS 的转发原理 SR-MPLS 的控制面 IGP Prefix/Node Segment IGP Adjacenc ...

  2. Segment Routing — Overview

    目录 文章目录 目录 Segment Routing 的发展历程 IP 网络 ATM 网络 MPLS 网络 Segment Routing 网络 Segment Routing 的发展历程 IP 网络 ...

  3. Segment Routing — SRv6 — Overview

    目录 文章目录 目录 SRv6 SRv6 v.s. SR-MPLS SRv6 拥有更好的传统网络兼容性 SRv6 拥有更好的可编程能力 SRv6 拥有更好的可扩展性 功能的可扩展性 网络容量的可扩展性 ...

  4. 互联网协议 — Segment Routing(分段路由网络)— SR-MPLS

    目录 文章目录 目录 SR-MPLS 技术 SR-MPLS 技术 SR 脱胎于 MPLS,但是又做了革命性的颠覆和创新. 所谓 "脱胎" 意指 SR Forwarding Plan ...

  5. Segment Routing入门

    <Segment Routing详解卷一>:"SR项目的目标是简化IP网络的操作,增加其可扩展性和功能,并最终使应用能够控制网络,而不需要在整个网络基础设施上增加流状态.&quo ...

  6. Segment Routing MPLS学习笔记

    定义:段路由SR(Segment Routing)是基于源路由理念而设计的在网络上转发数据包的一种协议.Segment Routing MPLS是指基于MPLS转发平面的Segment Routing ...

  7. segment routing详解十一问

    文章目录 1 传统mpls存在什么问题? 2 什么是segment routing? 3 什么是sr mpls? 4 什么是srv6? 5 sdn openflow和sr的对比? 6 什么是sr控制平 ...

  8. Segment routing分段路由

    为了解决传统IP转发和MPLS转发的问题,业界提出了SR(segment routing ,分段路由).SR的转发机制有很大改进,主要体现在以下几个方面 1.基于现有协议进行扩展: 扩展后的IGP/B ...

  9. 2.3、Segment Routing基础之IGP Segment 类型详解

    本文将重点介绍IGP Segment 分发场景下常见的几种Segment类型,同时为各位介绍了这些Segment类型在在Segment Routing转发过程中的转发动作以及转发特性.本文将对各位理解 ...

最新文章

  1. 设计模式--模板方法(Template Method)模式
  2. python赋值、深浅拷贝
  3. 判断小米华为等系统 MD
  4. Spring Boot——基于spring-boot-starter-mail发送邮件的 Service 服务类DEMO
  5. [No0000119]什么是柳比歇夫的时间事件记录法
  6. SAP Spartacus Focusdirective继承自Lockdirective,静态代码分析
  7. python apriori_python apriori算法代码怎么实现
  8. webview中cookie的读取与保存
  9. 北妈每日一学:ES6语法入门 之开门见山
  10. 3种重构EF Linq查询的方法而不扼杀性能
  11. eclipse进行远程调试教程,轻松搞定生产环境问题
  12. python爬取一张图片并保存_python爬取百度图片并保存到本地
  13. 「leetcode」463. 岛屿的周长【模拟便可】详解
  14. VS debug调试时提示“未找到源”
  15. Atititi 计算机系 教材 目录 1. 硬件类 2 1.1. 《微机系统与接口技术》 2 1.2. 《计算机组成与系统结构(第2版)》 2 2. Atitit 操作系统原理 操作系统原理(cpu
  16. tomcat的工作原理
  17. 视频通讯使用的SIP协议详解
  18. 如何将dwg文件转为pdf?
  19. 区块链学习系列:对称与非对称加密区别?
  20. 2019年全球卫星遥感行业现状、融资及卫星遥感行业发展趋势分析:即时化、网络化、个性化、多样化(转载)

热门文章

  1. 【转】Arp的攻防实战
  2. Catagory用法
  3. 商品表设计-实现侧滑栏类目Catagory和商品的多对多关系
  4. 使用小程序云开发添加背景音乐
  5. Linux man帮助文档
  6. 互动让综艺再进化,「黑科技」如何让这届年轻人身临其境做戏精?
  7. new Foo 和 new Foo()的区别以及Foo f2()的问题
  8. 制作一个微商城要多少钱
  9. HTML文本域添加滑杆,Objective-C 自定义UISlider滑杆 分段样式
  10. 硬件电路设计之三极管和场效应管做开关管