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,敬請持續關注!