01、為什么需要Flex-Algo
傳統(tǒng)IGP(Interior Gateway Protocol,內(nèi)部網(wǎng)關(guān)協(xié)議)基于鏈路的開銷值來計算到達目的地的最優(yōu)路徑。在鏈路開銷值不能作為路徑優(yōu)劣的唯一標準時,傳統(tǒng)IGP的路由計算方法無法滿足用戶的不同需求,主要表現(xiàn)在如下兩點:
-
-
- 流媒體、視頻會議等業(yè)務(wù)對網(wǎng)絡(luò)
時延
- 要求高,需要IGP根據(jù)鏈路時延進行路徑計算。如果網(wǎng)絡(luò)中的某些鏈路存在故障風險,需要IGP在路徑計算時排除具有故障風險的鏈路。
-
在IGP無法滿足上述需求的情況下,Flex-Algo(Flexible Algorithm,靈活算法)技術(shù)應(yīng)運而生。采用Flex-Algo算法,用戶可以根據(jù)需要自由選擇最優(yōu)路徑計算方法和度量值類型,并可以為不同的業(yè)務(wù)規(guī)劃最優(yōu)路徑,從而達到靈活控制路徑的選擇、實現(xiàn)流量工程等目的。
以下拓撲分別展示了基于IGP metric、時延delay和帶寬的路徑規(guī)劃。
基于IGP metric
基于時延delay
基于帶寬
02、什么是Flex-Algo算法
用戶可以自定義的Flex-Algo算法范圍是Flex-Algo(128)~Flex-Algo(255),可以有128個。其中每個Flex-Algo算法可以使用Flex-Algo(k)表示,k是FAID(FA算法標識符)。Flex-Algo(k)在參與這個算法的邏輯拓撲中具有本地意義,并且具有唯一定義。
Flex-Algo(k)的定義包含三個要素:
03、Flex-Algo是如何工作的
以IGP采用IS-IS(Intermediate System-to-Intermediate System,中間系統(tǒng)到中間系統(tǒng))、SR采用SR-MPLS的場景為例介紹Flex-Algo的工作流程。
01、定義算法
在參與Flex-Algo(k)計算的邏輯拓撲中,需要存在Flex-Algo(k)的定義,即前面介紹的Flex-Algo(k)的三個要素。不需要每個節(jié)點都定義Flex-Algo(k),只需要部分(至少一個)節(jié)點定義并通告到拓撲中。為了保證拓撲內(nèi)所有節(jié)點對于Flex-Algo(k)的定義統(tǒng)一,避免定義沖突,建議在其中的2個節(jié)點進行相同的定義,并通告出來。IS-IS使用攜帶IS-IS FAD Sub-TLV的協(xié)議報文來定義Flex-Algo(k)。其中,F(xiàn)AD的含義是靈活算法定義(Flexible Algorithm Definition)。
02、通告算法
網(wǎng)絡(luò)拓撲中的節(jié)點將如下內(nèi)容通告到拓撲中。
- 部分(至少一個)節(jié)點將本地定義的算法通告到拓撲中。該通告是通過定義算法中提到的IS-IS FAD Sub-TLV來實現(xiàn)的。IS-IS FAD Sub-TLV只能在同一個IS-IS級別里傳播,不能傳播到該級別區(qū)域之外。所有節(jié)點將本節(jié)點擁有的Flex-Algo能力,即所有支持的算法ID通告到拓撲中。該通告是通過SR-Algorithm Sub-TLV來實現(xiàn)的。SR-Algorithm Sub-TLV只能在同一個IS-IS級別里傳播,不能傳播到該級別區(qū)域之外。所有節(jié)點將Prefix SID通告到拓撲中,其中包含了Prefix SID和算法ID的關(guān)聯(lián)關(guān)系。這個通告是通過Prefix-SID Sub-TLV來實現(xiàn)的。
03、生成拓撲
每個Flex-Algo(k)都會生成自己的邏輯拓撲,拓撲生成的原則如下。
- 節(jié)點范圍:只有參與Flex-Algo(k)的節(jié)點才會被包含在Flex-Algo(k)拓撲中,包括Flex-Algo(k)定義的本地產(chǎn)生者和通告接收者。鏈路范圍:如果在Flex-Algo(k)的定義中配置了約束條件,如Admin-group或者SRLG,拓撲將根據(jù)這些約束條件進行調(diào)整,保留或排除部分鏈路。如果拓撲中的某些鏈路不具有Flex-Algo(k)所使用的度量值,這些鏈路也會被排除。
04、計算路徑
Flex-Algo(k)將采用其定義中的計算類型和度量類型進行路徑計算。Flex-Algo支持ECMP負荷分擔,可以根據(jù)情況生成多條具有相同F(xiàn)lex-Algo代價的路徑。任何參與Flex-Algo(k)的節(jié)點都會執(zhí)行路徑計算。如果節(jié)點參與多個Flex-Algo,將針對每個Flex-Algo進行獨立計算。所有節(jié)點都默認支持Flex-Algo(0),即支持傳統(tǒng)的IGP路徑計算。節(jié)點會將路徑計算的結(jié)果通過Flex-Algo(k)關(guān)聯(lián)的Prefix SID加入到自己的MPLS-MPLS轉(zhuǎn)發(fā)表,不會加入到任何IP-MPLS或者IP-IP的轉(zhuǎn)發(fā)表。
04、Flex-Algo是如何應(yīng)用的
SR TE Policy可以通過ODN(On-Demand Next-hop,按需下一跳)功能自動創(chuàng)建。如果在設(shè)備收到的BGP路由中,Color屬性與ODN模板相匹配,則根據(jù)該ODN模板自動創(chuàng)建一個SR TE Policy。ODN模板關(guān)聯(lián)Flex-Algo算法后,F(xiàn)lex-Algo算法會自動為ODN創(chuàng)建的SR TE Policy的候選路徑計算SID列表。在R1上創(chuàng)建ODN模板,并且關(guān)聯(lián)了Flex-Algo算法。
在該場景中,F(xiàn)AD為:
- 使用SPF算法?;赥E開銷計算到達目的地的最小開銷路徑。R2和R6之間的鏈路不支持TE開銷值,因此該鏈路被排除。排除親和屬性為“紅色”的鏈路。R1與R2之間的鏈路親和屬性為紅色,R3與R5之間的鏈路親和屬性也為紅色,因此R1與R2之間的鏈路、R3與R5之間的鏈路都被排除。
在SR Policy的Candidate Path下配置Segment List,內(nèi)容為數(shù)據(jù)包經(jīng)過R5、R3。由于該SR Policy關(guān)聯(lián)了以上的Flex-Algo算法,數(shù)據(jù)包轉(zhuǎn)發(fā)路徑如下所示。
通過不同的FAD定義與SR的綁定,可以自由控制轉(zhuǎn)發(fā)路徑,達到軟切片的效果。Flex-Algo算法可以應(yīng)用于SRv6和SR網(wǎng)絡(luò),可以為SRv6 Policy和SR Policy直接計算出SID列表,滿足流量工程的需求。