Segment Routing基礎知識

本文是在讀C. Filsfils et al. 所著的Segment Routing第一卷第2章內容所做的總結

What is Segment Routing

Segment Routing (SR) architecture 基於源路由。節點(通常爲路由器/主機/設備)選擇路徑,並且引導數據包沿着該路徑通過網絡,其做法是在數據包報頭中插入帶順序的Segment列表,以指示接收到這些數據包的節點怎麼去處理和轉發這些數據包。Segment其實是一個指令,可以表示任何類型的指令:與拓撲相關的,基於服務的,基於上下文的等。
因爲指令被編碼在數據包報頭中,所以網絡節點在接收數據包時只需執行這些指令。轉發路徑上的節點並不需要爲所有可能經過它們的流維持狀態信息,也就是所謂的“狀態在數據包中”。
源節點通過在數據包報頭中添加適當的Segment,可以實現基於單條流顆粒度的數據包引導。由於除了源節點之外的節點不需要存儲和維持任何流狀態信息,所以流量引導的決定權僅在於節點。通過這種方式,SR能在IP和MPLS網絡中提供高級流量引導能力,同時在數據平面和控制平面中保持可擴展性。

Segment Routing Concepts

  • Segment和Segment Identifier
    Segment是節點針對所接受到的數據包要執行的指令,此指令包含在數據包報頭中。指令的例子包括:按照去往目的地的最短路徑轉發數據包;通過特定接口轉發數據包;將數據包發到指定應用/服務實例等。
    Segment Identifier (SID)用於標識Segment。SID的格式取決於具體實現。SID的格式的例子包括:MPLS標籤,MPLS標籤空間中的索引,IPv6地址。
    Segment和SID有時爲了簡便不做區分,可以交替使用。

  • Segment組合
    Segment是構建網絡路徑基本模塊,可以單獨使用,也可以組合成一個有序列表,這種有序列表稱爲Segment List。

  • Segment List Operations
    SR數據包在其報頭攜帶了Segment List。當前針對數據包執行的指令,是active Segment的指令。如果數據包在active Segment的指令是“沿着去往目的地節點1的最短路徑轉發數據包”,則收到該數據包的每個節點將沿着最短路徑將數據包轉發到節點1。
    除了執行編碼在Segment List中的指令外,節點還需要維護Segment List本身。爲此定義了三個基本的Segment List Operations:
    (1) PUSH
    在Segment List的頭部插入一個或多個Segment,並將第一個Segment設置爲活動Segment。如果數據包報頭中還沒有Segment List,則首先插入Segment List。
    (2) CONTINUE
    active Segment還沒有完成,所以讓它保持active。
    (3) NEXT
    active Segment已經完成,Segment List中的下一個Segment將稱爲active Segment。
    這些操作映射到實際數據平面中。需要區分一下指令和操作,指令是存在於Segment中的,操作是針對Segment List的。

  • Global & Local Segment:
    Global 是指 “SR domain” 內。
    Global Segment:SR domain中所有SR-enabled的節點都支持域Global Segment相關聯的指令,並且它們都會在轉發表中安裝Global Segment的指令。
    Local Segment: 只有生成Local Segment的節點支持與Local Segment相關聯的指令,並且只有生成它的節點會在轉發表中安裝相關聯的指令。
    需要注意的是,Local Segment雖然是本地有效的,但並不意味着網絡上的節點不知道其它節點的Local Segments。爲了能夠使用Local Segment,其它節點也是需要知道Local Segment的存在和功能的。

SR Control Plane

SR Control Plane當前支持IGP IS-IS/OSPF和BGP。這裏暫時只講IGP。IGP Segment分爲兩種類型:IGP Prefix Segment & IGP Adjacency Segment。

IGP Prefix Segment

IGP Prefix Segment(通常縮寫爲Prefix Segment或Prefix-SID)是由IS-IS/OSPF通告的全局Segment,此Segment與該IGP通告的一條前綴(CIDR前綴)相關聯。IGP Prefix Segment的指令是 “引導流量沿着支持ECMP的最短路徑去往該Segment相關聯的前綴” 。從網絡中的任何地方,攜帶着以Prefix Segment爲active Segment的數據包,將沿着支持ECMP的最短路徑,轉發至通告該Segment相關聯前綴的節點。該路徑通常是多條路徑。
操作員爲SR域中的前綴分配一個全域範圍內唯一的Prefix-SID,**典型的是爲域中每個節點的loopback地址分配一個Prefix-SID。**在將Prefix-SID與前綴相關聯時,應確保Prefix-SID的唯一性,具體見書P30。
Prefix Segment遵循前往與Segment相關聯的前綴的最短路徑的意思是,遵循由所採用算法計算出的路徑。默認情況下,採用的是以IGP鏈路度量作爲cost的SPF算法(如Dijkstra算法)。也可以指定其它算法。

重點來了!重點來了!重點來了!


SR域中的每個節點會爲收到的Prefix Segment安裝轉發條目。節點學習到IP前綴P,以及與該前綴相關聯的Prefix-SID S。假設S指定的算法爲A。那麼該節點就採用算法A計算出去往前綴P的下一跳N。該節點及其下一跳N都支持算法A。如果存在多條去往前綴P的等價路徑,則存在多個下一跳N1, N2, N3… 節點將在這些等價路徑上均衡負載。
節點會爲該Prefix Segment按照以下的SR轉發條目:
— 入向active Segment: S
— 出接口: 去往下一跳N的接口
— 下一跳: N
— Segment List Operation: 如果下一跳N是P的發起者,且N指示刪除active Segment(這個是採用了SR MPLS倒數第二跳的機制),則執行 “NEXT” 操作,否則執行 “CONTINUE” 操作。


Prefix Segment有兩種特殊類型,一種是Node Segment,另一種是Anycast Segment。Node Segment與標識特定節點的前綴相關聯。在大多數情況下,每臺路由器都需要設置一個Node Segment,它通常關聯到用作路由器ID的loopback的主機地址,這一loopback地址也常用作OSPF的路由器ID,和傳統MPLS信令協議的路由器ID。 這兩種類型詳見P32,這裏不多闡述。

IGP Adjacency Segment

IGP Adjacency Segment(通常寫爲Adjacency Segment或Adjacency-SID,甚至Adj-SID)是與單向鄰接或單向鄰接集合相關聯的Segment。Adj-SID所包含的指令是 “引導流量由與該Segment相關聯的鄰接鏈路(集合)轉發出去”。使用Adj-SID轉發的流量由被引導至指定的鏈路,不管最短路徑路由如何。如果一個節點到它某個鄰居的IGP最短路徑不是經由兩節點之間的直連鏈路,通常可以用Adj-SID來引導流量經由直連鏈路去往鄰居節點,否則一般優選使用該鄰居的Prefix Segment。
典型情況下,Adj-SI是通告它的節點的Local Segment。爲了使用Local Adj-SID,通常在Segment List中把節點的Prefix-SID安插在Adj-SID前面。

重點!


一個節點爲它在接口I上的IGP鄰接分配Adjacency Segment S。該節點在轉發表中安裝以下條目:
— 入向active Segment: S
— Segment List Operation: NEXT
— 出接口: I
可以爲一條給定的鏈路分配多個Adjacency Segment,使得每個Adjacency Segment具有不通的屬性。


Adjacency Segment有兩種特殊類型:二層Adjacency Segment,組Adjacency Segment。具體見P37。簡單的說,就是一對路由器之間可能會有多條平行鏈路,前者就可以對這每一條鏈路都分配一個Adjacency Segment,使它們獨立,後者則可以給這些鏈路分配一個Adjacency Segment,將它們捆綁在一起。

組合使用Segment

Segment是SR的構建模塊,這些構建模塊可以被組合起來引導流量經由網絡中任何端到端的路徑。在端到段路徑中不通類型的Segment可以組合在一起,例如不同類型的IGP Segment和BGP Segment。由於Segment可以是任何指令:可以是拓撲相關的,基於業務的,構建的路徑也可以引導數據包經過服務連(Service Function Chain, SFC)。
具體見P43。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章