Segment Routing 之 Data-Plane & Control-Plane

  • 2019 年 10 月 7 日
  • 筆記

作者简介:张磊,思科原厂8年多technical consulting engineer,精通思科数据中心/园区网产品及技术;精通SAN网络架构及产品;熟悉广域网产品及技术。

SR是一种灵活的、可扩展的源路由方法。源选择一条路径,并在包头中将其编码为Segment的有序列表。每个Segment由Segment ID (SID)标识。通过SR,网络不在需要来维护每个应用和每个流的状态。取而代之的是,它完全遵从包头中的转发指令。本篇将针对Segment Routing的Data-Plane & Control-Plane进一步展开介绍。

一、MPLS Data-Plane Operations

1/ MPLS使用现有的MPLS作为Data-Plane:

  • Segment (SR)-> label (MPLS)
  • Segment list (SR)-> label stack (MPLS)

2/ 仍然使用“次末跳弹出(PHP)”以及“显式空(Explicit-Null)”

  • 默认: PHP 开启
  • Explicit-Null label 为非默认,如有需要可以手动enable

二、MPLS Data Plane Operations – PHP:

我们一起来结合下图举例说明:

  • Node-4 通告了它的loopback接口的IPv4前缀:1.1.1.4/32,prefix-SID:16004. (或者Node-4通告ipv6前缀2001::0101:0104/128,prefix-SID:16004)
  • Node-4要求使用默认PHP(noPHP-flag=0, ExpNull-flag=0)。PS:在这里Explicit-Null没有被使用。

接下来,我们逐跳的看一下:

在Node-1上执行“Push”动作,查看FIB:压入标签16004,出接口为G0/0/0/0

在Node-2上执行“Swap”动作,查看LFIB:local label,outgoing label,prefix,outgoing interface,next hop的对应关系

在Node-3上执行“Pop”动作,查看LFIB:Outgoing label变成了Pop

在Node-4上,它收到的包就不再带有SID Lable

三、MPLS Data Plane Operations – Explicit-Null:

  • Explicit-Null需要针对每一个prefix-SID进行配置
  • 针对本地起源的prefix-SID配置E-flag:

老规矩,结合下图举例说明:

这里Node-4通过的loopback接口前缀“NP-flag=1,E-flag=1”,即:禁用PHP,启用Explicit-Null。这里Node-3将与上一个例子中的动作不同:从Node-3的LFIB输出可见:Outgoing Label变成了“Exp-Null-v4”。如果是IPv6,这里就会显示成“Exp-Null-v6”

四、简单高效的MPLS传输服务:

案例走起:

  • MPLS服务依赖于prefix segment
  • 上图两个PE(Node-1 & Node-2)建立MP-BGP
  • Node-2通告前缀1.1.1.2/32,prefix-SID:16002
  • Red VRF中的CE(Node-8)通告前缀10.0.0.0/30

我们看一眼Node-1的输出:

  • Node-1上有两个VRF:一个是global vrf(或者叫default vrf),一个是RED vrf
  • Node-1上查看global vrf中的1.1.1.2/32 FIB:
    • 1.1.1.2/32为global prefix
    • 两个ECMP(等价负载路径)
    • 分别push label 16002,两个出接口
  • Node-1上查看RED vrf中的10.0.0.0/30 FIB:
    • 10.0.0.0/32为VPN prefix
    • BGP下一跳:1.1.1.2(egress PE)
    • 两个ECMP路径:99.1.3.3,99.1.5.5;
    • 两个ECMP,分别压入两层标签:一个是prefix-SID 16002,一个是BGP VPN label 90001

五、IGP Control plane:

  • 使用IS-IS或者OSPF
  • 在IGP下配置Segment Routing
  • Segment Routing同样也支持multi-area,multi-level网络

1/ SR IS-IS Control Plane:

  • 支持IPv4和IPv6
  • 支持Level 1,level 2 和multi-level路由
  • 支持Prefix-SID
  • 支持Adj-SID
  • 支持MPLS的PHP和Explicit-Null

IS-IS的扩展TLV:

IS-IS配置以及database输出:

2/ SR OSPF Control Plane Overview:

  • 支持Multi-area
  • 支持Prefix-SID
  • 支持Adj-SID
  • 支持MPLS的PHP和Explicit-Null

OSPF的扩展:

OSPF配置以及database输出:

3/ Anycast Prefix Segments:

  • Anycast prefixes: 相同的prefix由多个节点通告
  • Anycast prefix-SID:相同的prefix使用相同的prefix-SID
  • 流量转发依据IGP最佳路径
  • 如果primary node故障,流量自动re-route到其他节点
  • 注意:通告相同的anycast prefix-SID必须有相同的SRGB!

4/ Anycast Prefix-SID的高可用:

  • PE1 and PE2 各自通告自己的prefix-SID:16001,16002
  • PE1 and PE2 都通告了一个 Anycast prefix-SID,16100
  • 正常情况下,流量通过PE1转发(这里假设PE1的IGP最优)
  • 当PE1出现故障时,自动re-route,流量通过PE2转发

例行结束语:Adj-SID & LAN-Adj-SID都不需要配置,当IGP启用了Segment Routing之后,IGP会自动分配。Segment Routing TE,敬请持续关注!