写点什么

一文详解:SRv6 Policy 模型、算路及引流

  • 2022 年 7 月 30 日
  • 本文字数:4065 字

    阅读完需:约 13 分钟

一文详解:SRv6 Policy模型、算路及引流

SRv6 Policy 利用 Segment Routing 的源路由机制,通过在头节点封装一个有序的指令列表来指导报文穿越网络。SRv6 利用 IPv6 128 bit 地址的可编程能力,丰富了 SRv6 指令表达的网络功能,除了用于标识转发路径的指令外,还能标识 VAS(Value-Added Service,增值服务),例如防火墙、应用加速或者用户网关等。除此之外,SRv6 还有着非常强大的扩展能力,如果要部署一个新的网络功能,只需要定义一个新的指令即可,不需要改变协议的机制或部署,这大大缩短了新网络业务的交付周期。所以说,SRv6 Policy 可以实现业务的端到端需求,是实现 SRv6 网络编程的主要机制。


通过在 SRH 中封装一系列的 SRv6 Segment ID,可以显式地指导报文按照规划的路径转发,实现对转发路径端到端的细粒度控制,满足业务的高可靠、大带宽、低时延等 SLA 需求。如下图,在头节点 1 插入两个 SRv6 Segment ID,分别是节点 4 到节点 5 的 End.X SID 和节点 7 的 End SID,这样就可以指导报文沿着特定的链路转发,或者沿着支持负载分担的最短路径转发。SRv6 就是通过这种方式实现了 TE。

一、SRv6 Policy 模型

SRv6 Policy 模型包含如下要素。

1、Key 值

SRv6 Policy 使用以下三元组作为 Key,全局唯一标识一个 SRv6 Policy。

  • Headend(头节点):标识 SRv6 Policy 的头节点。头节点可以将流量导入一个 SRv6 Policy 中。

  • Color(颜色):标识指定头节点和目的节点的不同 SRv6 Policy,可与一系列业务属性相关联,例如低时延、高带宽等,可理解为业务需求模板 ID。目前没有统一规定的编码规则,其值由管理者分配。例如,端到端时延小于 10 ms 的策略可分配 Color 的值为 100。Color 提供了一种业务和 SRv6 Policy 的关联机制。

  • Endpoint(目的节点):标识 SRv6 Policy 的目的地址。当下发 SRv6 Policy 到头节点时,由于所有 SRv6 Policy 的头节点字段的取值均为表示自身的值,所以在头节点上通过<Color,Endpoint>即可唯一标识一个 SRv6Policy。在头节点上可以通过<Color,Endpoint>来引导流量进入 SRv6 Policy。


当下发 SRv6 Policy 到头节点时,由于所有 SRv6 Policy 的头节点字段的取值均为表示自身的值,所以在头节点上通过<Color,Endpoint>即可唯一标识一个 SRv6Policy。在头节点上可以通过<Color,Endpoint>来引导流量进入 SRv6 Policy。

2、Candidate Path

一个 SRv6 Policy 可能关联多个 Candidate Path,每个 Candidate Path 附带 Preference(优先级)。存在多个 Candidate Path 时,SRv6 Policy 选择优先级最高的 Candidate Path 作为主路径。Candidate Path 是通过 BGP SRv6 Policy/PCEP 等协议向头节点发送 SRv6 Policy 可选路径的基础单元,不同的协议会下发不同的 Candidate Path。

3、Segment List

Segment List 标识通过 SRv6 Policy 向 Endpoint 发送流量的源路由路径。一个 Candidate Path 可以关联多个 Segment List,通过 Segment List 附带的 Weight(权重)属性来控制流量在多个 SR 路径中的负载比例,从而实现 ECMP/UCMP(Unequal-Cost Multiple Path,非等值负载分担)。


此外,SRv6 Policy 还可以分配 Binding SID(BSID)。Binding SID 也是 Segment Routing 的基础指令,它用于标识整个 Candidate Path,提供隧道连接、流量引导等功能。报文如果携带 Candidate Path 对应的 Binding SID,会被引导到对应的 Candidate Path。Binding SID 可以理解为业务调用网络功能,选择 Candidate Path 的接口。


如果我们把 SRv6 Policy 看成网络服务,那 Binding SID 就是访问这个服务的接口。所以,SRv6 Policy 的这个设计是一个订阅发布模型,业务根据自身的需求来订阅网络服务,网络可以把服务接口提供给业务。Binding SID 既然是接口,就要满足接口的原则。

  • 独立性:任何业务都可以调用该接口,而不需要关注系统内部细节。SRv6 Policy 把所有的细节都封装在内部,业务在使用 SRv6 Policy 的时候,只需要查找到这个接口即可。

  • 可靠性:在接口已经发布的情况下,接口应该对契约负责。不管多少业务调用这个接口,SRv6 Policy 需要保证契约里面承诺的服务,这就要求 SRv6 Policy 具备网络资源的弹性伸缩能力。

  • 稳定性:接口需要不易变性,在 SRv6 Policy 生命周期内,不管网络拓扑发生变化,还是业务本身发生变化或路径发生变化,Binding SID 都需要尽量维持不变。

二、SRv6 Policy 算路

SRv6 Policy 可以通过多种方式生成 Candidate Path,主要包括静态指定路径、头节点算路和控制器算路。不同方式生成的 Candidate Path 可以通过 Protocol-origin 和 Originator 字段来区分。

1、静态指定路径

静态指定路径是指通过 CLI/NETCONF 等方式人工规划,手动配置 SRv6 Policy。静态配置 SRv6 Policy 时,必须配置 Endpoint、Color 以及 Candidate Path 的 Preference 和 Segment List,且不允许配置重复的 Preference。对于静态配置的 SRv6Policy,在 Locator 的静态段范围内配置 BSID。


静态配置路径的方式无法自动响应网络拓扑的变化,当指定的链路或节点发生故障的时候,无法触发 SRv6 Policy 重路由,那会导致流量持续中断。因此在部署的时候,静态配置的 SRv6 Policy 一般需要规划两条不相交的路径,并使用连通性检测机制来检查路径的可达性。当某条路径发生故障的时候,可以快速切换到其他路径,以保证网络可靠性。

2、头节点算路

头节点算路和 RSVP-TE 类似。首先头节点利用 IGP 携带的 TE 信息和 IGP 链路状态信息组成 TEDB,然后基于 CSPF 算法,按照带宽、时延、SRLG(Shared Risk Link Group,共享风险链路组)和不相交路径等约束计算满足条件的路径,并安装相应的 SRv6 Policy 指导转发。


头节点算路有以下限制:由于头节点没有跨域的拓扑,所以只能计算单个 IGP 域的路径,无法支持跨域的路径计算;由于 SR 中间节点不维护连接状态,所以无法支持资源占用,也不支持预留带宽算路。

3、控制器算路

控制器通过 BGP-LS 等收集网络拓扑、TE 信息以及 SRv6 信息,并根据业务需求集中计算路径,然后通过 BGP/PCEP 等协议将 SRv6 Policy 下发到头节点。控制器算路支持全局调优、资源预留和端到端跨域。


控制器最初下发 SRv6 Policy 时不携带 BSID,转发器接收 SRv6 Policy 后主动在 Locator 的动态段范围内随机分配一个 BSID,然后通过 BGP-LS 上报 SRv6 Policy 状态时携带 BSID。这样控制器就能感知 SRv6 Policy 的 BSID,利用 BSID 编排 SRv6 路径。


总体而言,由于控制器能够通过 BGP-LS 获取到全局的拓扑和 TE 等信息,所以基于控制器计算 SRv6 Policy 可以实现全局流量的调优,而静态指定路径和头节点算路方式只能实现 IGP 域内的最优路径计算。此外,控制器算路还可以支持带宽预留和优先级抢占,能够更好地支持 TE。

三、SRv6 Policy 引流

将 SRv6 Policy 部署在头节点之后,还需要完成引流工作,将流量引导到 SRv6Policy 中。目前有 Binding SID 和 Color 匹配这两大类引流方式。

1、Binding SID 引流

节点 A 创建 SRv6 Policy,该 SRv6 Policy 的 Binding SID 为 B1::100,Segment List 为 B3::4,B4::6,B5::55。上游节点向节点 A 发送了一个报文,报文目的地址为 B1::100。节点 A 收到该报文,发现报文的目的地址是本地 SRv6 Policy 的 Binding SID。节点 A 处理 Binding SID,具体流程如下。

① 将原始报文的 SRH 的 SL 值减 1,指向下一个 SID。

② 为报文封装一个新的 IPv6 报文头,目的地址为对应 SRv6 Policy 的第一个 SID B3::4,源地址为本地的一个接口地址。

③ 然后封装 SRH,携带该 Binding SID 对应的 SRv6 Policy 的 Segment List。

④ 更新对应的其他字段,然后查表转发报文。

通过使用 Binding SID 可以引入 SRv6 Policy 的流量,这种方式一般常用在隧道拼接、跨域路径拼接等场景,可以很好地减小 SRv6 SID 栈深;同时也可以显著地降低不同网络域之间的耦合程度,某个网络域内转发路径的变化也不需要扩散到其他网络域。

2、Color 引流

因为 SRv6 Policy 引入了 Color,而 Color 可以作为 BGP 路由携带的扩展团体属性,因此在将业务引流到 SRv6 Policy 时,可以精确到逐条路由的控制粒度。


Color 是 SRv6 Policy 非常重要的属性,它是业务和隧道的锚点。Color 能够关联一个或多个业务需求模板,例如低时延、带宽以及亲和属性等。SRv6 Policy 根据 Color 进行算路。此外,业务也使用 Color 定义网络连接的需求。通过匹配业务和 SRv6 Policy 的 Color,就能实现自动引流。在部署业务的时候,不依赖隧道的定义,只需要定义业务的需求即可,这样实现了业务部署和隧道部署的解耦。

通过 Color 进行引流的具体流程介绍如下:

① 控制器通过 BGP 或其他方式下发 SRv6 Policy,Color 为 123。

② 节点 E 通过路由策略设置路由的 Color 扩展团体属性值为 123,并在发布路由时携带该属性。

③ 节点 A 收到路由以后,会进行路由迭代。使用 BGP 路由的原始下一跳匹配 SRv6Policy 的 Endpoint,使用 BGP 路由的 Color 属性匹配 SRv6 Policy 的 Color,这样一条 BGP 路由就能通过 SRv6 Policy 的 Key 值<Color, Endpoint>匹配到一个 SRv6Policy。路由迭代成功之后,节点 A 将路由和关联的 SRv6 Policy 安装到 FIB(Forwarding Information Base,转发信息库)。


通过以上方法,当流量到达节点 A 时,根据目的地址查询路由,得到隧道的出接口为 SRv6 Policy 的隧道接口,然后封装 SRv6 报文并转发,实现 Color 自动引流到 SRv6 Policy。这种引流模式一般可以通过路由策略控制 BGP 路由携带的 Color 值,这叫作着色。着色策略十分灵活,可以根据需求修改尾节点、头节点甚至 RR 反射器的 Color 的值。

3、DSCP 引流

除了 Binding SID 引流和 Color 引流,还可以通过 IP 报文头中封装的 DSCP(Differentiated Services Code Point,区分服务码点)值来引流,这种方式可以对命中同一个路由但不同来源的业务进一步细分。例如,可以在头节点将多个 SRv6 Policy 组成一个 Group(组),并在 Group 内指定每个 SRv6 Policy 和 DSCP 值的映射关系,然后将业务绑定到指定的 Group。这样当头节点收到业务流量时,可以根据 IP 报文头中携带的 DSCP 值,在对应的 Group 中找到对应的 SRv6 Policy,从而完成引流。这种引流方式要求在源头区分业务,并且指定不同的 DSCP 值。


在一些场景下希望结合以上两种引流方式(既要匹配业务的下一跳 +Color,又要区分 DSCP),可以为 Group 引入 Color,将 Group 的标识也定义为<Color,Endpoint>。通过引流策略指定,一条业务路由根据下一跳和 Color 属性不再去匹配一个 SRv6 Policy,而是匹配一个 Group,同时转发平面再根据收到的业务流量的 DSCP 值,在该 Group 内匹配对应的 SRv6 Policy。

发布于: 刚刚阅读数: 4
用户头像

InfoQ签约作者 2018.11.30 加入

热爱生活,收藏美好,专注技术,持续成长

评论

发布
暂无评论
一文详解:SRv6 Policy模型、算路及引流_7月月更_穿过生命散发芬芳_InfoQ写作社区