唐寅 張進 江逸茗




摘 ?要:新業務的發展對網絡服務提出了更高的要求,其中網絡的可靠性是服務的基礎,分段路由為網絡服務提供了重要的技術支撐,通過規劃多條候選路徑來提供可靠性的提升。在分段路由策略技術的基礎上,對無縫雙向轉發檢測技術進行研究。對主候選路徑進行網絡故障檢測,提升了網絡故障的快速感知能力;通過開源軟件平臺實現功能,更好地滿足了業務對網絡的可靠性提升要求。
關鍵詞:無縫雙向轉發檢測;分段路由策略;FRRouting
中圖分類號:TP393 ?文獻標識碼:A 文章編號:2096-4706(2021)12-0155-04
Abstract: The development of new business puts forward higher requirements for network services, in which network's reliability is the basis of services. Segment routing provides important technical support for network services, and it provides reliability improvement by planning multiple candidate paths. Based on the segment routing policy technology, the seamless bidirectional forwarding detection technology is studied. Network fault detection is carried out for the primary candidate path, which improves the fast perception ability of network fault; through the development work in an open source software platform to realize the functional solution, which better meets the requirements of business for network reliability improvement.
Keywords: seamless bidirectional forwarding detection; segment routing policy; FRRouting
0 ?引 ?言
分段路由(Segment Routing, SR)是基于源路由的技術,如文獻[1]所述,通過在源數據包中指定數據包通過網絡的路徑轉發。多協議標簽交換技術(Multiprotocol Label Switching, MPLS)流量工程是源路由廣泛采用的形式之一,當分段路由網絡的入口節點,MPLS標簽棧會附加在數據包之前,從而確定數據包通過網絡的路徑。SR體系結構將策略狀態放在數據包報頭中,而中間傳輸節點和出口節點不需要任何策略狀態。SR體系結構的目標不是取代現有的源路由和流量工程機制,而是對其進行補充并簡化網絡中的信令,提升網絡的靈活性。
SR域是網絡中參與SR功能的節點的集合。在SR域內,節點包括了入口節點,中間傳輸節點和出口節點等不同的類型。SR路徑是一個SR入口節點到SR出口節點的網絡段的有序列表。SR路徑可以根據業務的需求生成,例如可以遵循從入口到出口的最低成本路徑,也可以遵循其他路徑以用于流量工程和網絡服務管理。SR路徑可以由多個段標識符(Segment ID, SID)表示的序列組成。SR段類型包括鄰接SID、前綴SID、任播SID;其中鄰接段和前綴段是最常見的類型,SR路徑可以由這些段類型中的一種或多種組成。
網絡的可靠性要求,當網絡中的節點或鏈路出現故障時,網絡需要盡快從故障狀態恢復到正常狀態。SR需要能夠提供端到端的路徑保護能力,在主路徑發生故障時能夠快速地恢復數據流的傳輸。SR通過預先的規劃來提高路徑的可靠性,對網絡進行規劃時,預先設定好用于保護的備份路徑,用于實現對重要路徑的流量保護;為了能讓保護路徑起到更好的保護作用,需要讓保護路徑盡量不經過主隧道經過的節點和鏈路。在主路徑的節點或鏈路出現故障時,流量需要及時被切換到備份路徑上;而當主路徑恢復后再將流量切換回來,以實現對主路徑的備份保護。
SR網絡可靠性提升的目的是業務的快速恢復,對網絡故障的快速感知,是其中的重要環節。當SR網絡主路徑上的節點或鏈路發生故障時,需要能夠盡快地探測和感知,然后才能通知業務處理切換到備份路徑。為了實現網絡故障的快速檢測,通常使用雙向轉發檢測(Bidirectional Forwarding Detection, BFD)技術,如文獻[2]描述,BFD基于IP進行盡力而為的轉發,導致無法按照SR指定的路徑進行檢測。SR網絡場景下,需要基于源路由的技術,在入口節點指定檢測報文按照嚴格的路徑檢測,需要對BFD功能做補充。另外,當配置大量BFD會話進行鏈路檢測時,BFD現有狀態機的協商時間會變長,成為整個系統的一個瓶頸。
無縫雙向轉發檢測(Seamless Bidirectional Forwarding Detection, SBFD)是BFD的一種簡化機制,本文方案通過和SR技術的結合,可以在入口節點指定檢測報文按照嚴格的路徑進行轉發檢測;簡化了BFD的狀態機,縮短了協商時間,提高了整個網絡的靈活性,能夠支撐SR隧道的快速檢測。
1 ?無縫雙向轉發檢測
1.1 ?概念和原理
為了減小網絡中節點或鏈路故障對業務的影響,提高網絡的可靠性,需要能夠盡快檢測到與相鄰設備間的通信故障,以便及時采取措施,保證業務繼續進行。BFD技術是通用的、標準化的且協議無關的快速故障檢測機制,用于快速檢測網絡中的節點和鏈路故障而導致的通信問題。在兩個系統之間建立BFD會話,并通過BFD報文中攜帶的參數進行會話協商。BFD會話協商采用三次握手機制,協商成功后,以協商的報文收發時間在彼此的路徑上周期性發送BFD報文。
SBFD簡化了BFD會話協商機制,文獻[3]描述了基本概念。SBFD按照承擔的功能角色分為發起端和反射端,在進行鏈路檢測之前,發起端和反射端互相發送SBFD控制報文進行SBFD描述符等信息的協商。協商成功后,發起端主動發送SBFD Echo報文進行鏈路檢測,反射端根據本端的校驗情況將報文環回,發起端收到反射報文后進行校驗判斷從而進行本端的狀態更新。由于反射端僅環回發起端發送的SBFD報文,不進行有狀態的會話維護和處理,因此提升了SBFD檢測的效率,為網絡路徑檢測提供靈活性。
SBFD發起端維護的狀態只有Up或Down,發出的報文中攜帶的狀態信息中也只有Up和Down狀態。反射端不會主動發送SBFD報文,僅校驗SBFD報文的參數,校驗參數成功的話會構造環回SBFD報文,返回的報文狀態只有Up或Admin Down狀態。
SBFD會話狀態協商和檢測過程如圖1所示。發起端和反射端通過發送SBFD報文進行會話協商。
發起端的狀態過程包括:(1)初始狀態:SBFD報文由發起端首先向反射端發送,發起端初始狀態為Down。(2)狀態遷移:如果發起端收到反射端返回Up報文,則將SBFD狀態置為Up;如果發起端收到反射端返回Admin Down報文,則將SBFD狀態置為Down;如果發起端在指定的時間超時前沒有收到返回報文,則將狀態置為Down。(3)狀態保持:發起端在處于Up狀態的情況下,收到反射端返回Up報文,則SBFD狀態繼續保持在Up狀態;如果發起端在處于Down狀態的情況下,收到反射端返回的Admin Down報文,或者在指定的時間超時前沒有收到返回報文,則SBFD狀態繼續保持在Down狀態。
發起端的無狀態過程為:反射端不保存SBFD的狀態,也沒有檢測機制,因此不會主動發送SBFD報文,僅根據從發起端收到的報文來構造環回SBFD報文。反射端從發起端接收到SBFD報文后,校驗報文中的SBFD描述符與反射端的本地SBFD描述符是否匹配,如果不匹配的話丟棄,如果匹配的話,反射端構造環回SBFD報文反射回發起端。
1.2 ?分段路徑的場景的應用
SBFD檢測在分段路由的場景如圖2所示,節點A、B、C、D、E、F之間使能了SR MPLS能力。在SR域內,節點A為入口節點,節點B、C、D、E為中間傳輸節點,節點F為出口節點。A和B之間的鄰接標簽為1002,B和C之間的鄰接標簽為1003,C和F之間的鄰接標簽為1004。節點A作為SR網絡的入口節點,部署了SR的主備路徑,主路徑為A->B->C->F,備路徑為A->D->E->F。主路徑使用鄰接標簽來表示,初始標簽棧為{1002,1003,1004},業務數據轉發時,逐跳彈出MPLS標簽進行轉發。
為了在SR的主路徑發生故障時快速的感知,需要部署SBFD來進行快速檢測,由于SR MPLS的業務基于主路徑的MPLS標簽棧進行轉發,因此SBFD對SR MPLS的主路徑進行檢測時,檢測報文的路徑需要與SR的主路徑完全一致。SBFD發起端到反射端使用與主路徑一致的MPLS標簽棧,如圖2所示,節點A作為SBFD的發起端,向節點B發送檢測報文時,根據標簽1002找到對應的出接口,并封裝標簽棧{1003,1004}轉發;節點B向C發送時,根據標簽1003找到對應的出接口并彈出標簽,封裝標簽{1004}轉發;節點C向F轉發時,根據標簽1004找到對應的出接口并彈出標簽,將報文轉發給F;節點F作為SBFD的反射端,解析校驗SBFD報文并提取IP報頭中的源IP字段,反射端向發起端回程路徑使用IP轉發,IP報文中的目的IP使用接收到的SBFD報文IP報頭中的源IP字段值,以此方式將報文環回發送到發起端。發起端接收到SBFD報文后,根據SBFD報文中的字段來對判定SBFD的檢測結果,由此可以知道SR主路徑是否存在故障;如果發起端沒有接收到SBFD的環回報文,則可以判定SR的主路徑發生了故障,從而通知業務模塊將SR的轉發路徑切換到備份路徑。
2 ?無縫雙向轉發檢測與分段路由結合方案
分段路由策略(Segment Routing Policy, SR Policy)使用SR的源路由機制,是分段路由網絡中的一種策略[4],該策略包含了一個業務流量的承載訴求,以及轉發路徑可以實現業務的端到端需求。SR Policy的實施可以實現控制面和轉發面的分離,更方便實現控制器的集中控制以及業務轉發路徑的編程。SR Policy設計的初衷是為了更好地提升特定業務的體驗,例如滿足特定業務的帶寬、時延等需求,對業務的最終體驗負責。
SR Policy由頭端節點、顏色、尾端節點三元組描述決定。一個SR Policy內可以有多個候選路徑,不同的候選路徑設定不同的優先級值來表征不同的優先級。SR Policy通過生成不同的候選路徑來實現主備路徑,高優先級的為主用路徑,低優先級的為備用路徑。候選路徑可以配置多條,因此SR Policy可以實現一主一備,也可以是一主多備。所有的主備路徑都在一個SR Policy里實現,簡化管理并提升了效率。控制器根據特定業務的承載需求計算出特定的轉發路徑,也可以由用戶手工靜態指定的方式,在頭端節點根據尾端節點和顏色作為關鍵值去生成SR Policy,此后頭端節點可以將特定業務流量自動引流到對應的SR Policy的候選路徑進行轉發。
SBFD結合SR Policy來檢測主候選路徑的網絡,頭端節點作為SBFD的發起端,尾端節點作為SBFD的反射端,為了在特定SR Policy啟用SBFD,頭端節點需要知道尾端節點的描述符,文獻[5,6]描述了通過動態路由協議的SBFD擴展來實現,尾端節點通過動態路由協議給頭端節點發布其SBFD描述符。由于SR Policy中配置的尾端節點使用IP地址表示,本文設計方案為:當尾端節點開啟SBFD反射端功能時,選用尾端節點的IP地址作為SBFD反射端的描述符,并在此基礎上結合SR Policy進行關聯。
SBFD發起端封裝SBFD報文時,IP報頭中會填充源IP字段,該源IP用于SBFD反射端環回報文的返程路徑。SBFD的反射端接收SBFD報文后,提取IP報頭中的源IP字段構造SBFD的返程報文,將該源IP值填充在IP報頭中的目的IP字段,將報文環回發送到發起端。因此SBFD探測報文的環回路徑取決于IP路由查找的結果,在路徑上逐跳IP轉發,SBFD報文的探測路徑和返程路徑不一定相同。在某些情況下,如果SBFD發起端的源IP填充不正確,會導致反射端環回報文進行IP轉發時,找不到IP路由表導致環回報文發送失敗,最終導致SBFD檢測的誤報。為了解決這個問題,本方案在頭端節點手動配置指定本地IP,確保尾端節點存在對應該IP的路由,保證環回返程的SBFD報文可達。
如圖3所示,頭端節點SR Policy A指定的尾端節點IP為2.2.2.2,尾端節點作為SBFD反射端配置指定描述符為2.2.2.2;同時頭端節點A作為SBFD發起端,SBFD關聯SR Policy A,配置指定本地IP為1.1.1.1,并配置指定反射端SBFD描述符為2.2.2.2。此后SBFD檢測報文通過SR Policy A的主候選路徑A->B->C->F發送到反射端,反射端根據1.1.1.1查找路徑進行環回,圖3中的環回路徑為F->E->D->A,最終完成檢測流程。
3 ?平臺軟件的實現方案
本文使用開源的路由協議平臺軟件FRRouting(FRR)為基礎進行開發和實現,該軟件平臺原本實現了BGP、OSPF、RIP、IS-IS等動態路由協議,并支持基礎的BFD功能。在此功能基礎上,進行了SBFD功能的開發升級,并對SR Policy的功能與SBFD進行關聯,以支持對使用的SR Policy的業務的快速聯動。
系統邏輯結構如圖4所示,SR Policy功能模塊作為獨立的進程,負責SR Policy的管理;Zebra是軟件架構中的重要核心模塊,負責各類業務表項的管理以及進程間通信;新增SBFD功能模塊作為獨立的進程,除了新增需要與Zebra進程的交互接口,與其他模塊解耦。配置的SR policy信息會同步到Zebra,當開啟SBFD檢測某個特定SR Policy時,SBFD向Zebra查詢獲取到該SR Policy的詳細信息,包括尾端節點地址以及主路徑的標簽棧信息;SBFD獲取到這些信息后,根據尾端節點地址查表并封裝SBFD報文發送。
FRR實現SBFD與SR聯動的時序如圖5所示。
具體時序為:(1)SR Policy生成,可以通過用戶配置或通過控制器下發生成,其中包括了顏色,尾端節點信息,以及候選路徑的標簽棧信息。(2)SR Policy進程將所有信息,包括顏色、尾端節點、以及所有候選路徑的標簽棧信息,同步到Zebra進程。(3)Zebra接收到同步的信息后保存,以顏色和尾端節點作為關鍵字索引,候選路徑的標簽棧信息作為屬性保存。(4)SBFD檢測功能開啟,并通過配置顏色和尾端節點信息與SR Policy關聯,其中的尾端節點同時作為SBFD的遠端描述符使用。(5)SBFD向Zebra請求SR Policy信息,攜帶顏色和尾端節點。(6)Zebra根據顏色和尾端節點查找到對應的SR Policy后,向SBFD同步該SR Policy的所有候選路徑的標簽棧信息和出接口信息。(7)SBFD根據獲取到的出接口信息,向Linux內核查詢數據鏈路層表項。(8)SBFD封裝SBFD報文,遠端描述符字段使用SR Policy的尾端節點。(9)通過Linux內核發送SBFD報文。
4 ?結 ?論
在分段路由網絡中使用SBFD技術,可以極大地提升主路徑故障的檢測速率;同時,SBFD技術與SR Policy的結合,提升了SR Policy在多條候選路徑情況下的可靠性,最終實現業務體驗的提升。通過在FRRouting的軟件平臺的優化升級,對SBFD和SR Policy功能的模塊化解耦,實現了SBFD在分段路由場景下的應用。
參考文獻:
[1] FILSFILS C,PREVIDI S,GINSBERG L,et al. Segment Routing Architecture:RFC8402 [S/OL].[2021-04-10].https://www.rfc-editor.org/info/rfc8402.
[2] KATZ D,WARD D. Bidirectional Forwarding Detection (BFD):RFC5880 [S/OL].[2021-04-20].https://www.rfc-editor.org/info/rfc5880.
[3] Pignataro C,Ward D,Akiya N,et al. Seamless Bidirectional Forwarding Detection (S-BFD):RFC7880 [EB/OL].[2021-04-12].https://www.rfc-editor.org/info/rfc7880.
[4] FILSFILS C,TALAULIKAR K,VOYER D,et al. Segment Routing Policy Architecture draft-ietf-spring-segment-routing-policy-13 [EB/OL].[2021-04-12].https://datatracker.ietf.org/doc/draft-ietf-spring-segment-routing-policy/.
[5] GINSBERG L,AKIYA N,CHEN M. Advertising Seamless Bidirectional Forwarding Detection (S-BFD)Discriminators in IS-IS:RFC7883 [S/OL].[2021-04-13].https://www.rfc-editor.org/info/rfc7883.
[6] PIGNATARO C,BHATIA M,ALDRIN S,et al. OSPF Extensions to Advertise Seamless Bidirectional Forwarding Detection(S-BFD) Target Discriminators:RFC7884 [S/OL].[2021-04-22].https://www.rfc-editor.org/info/rfc7884.
作者簡介:唐寅(1982—),男,漢族,江蘇江陰人,工程師,碩士,研究方向:新型網絡體系結構,網絡安全;張進(1979—),男,漢族,江蘇鎮江人,工程師,博士,研究方向:寬帶信息網絡、網絡安全;江逸茗(1984—),男,漢族,江蘇南通人,助理研究員,博士,研究方向:新型網絡體系結構,網絡虛擬化。