陳梅 蘇晨 趙靜雅 高震宇



摘要:本文結合Segment Routing業內常使用的SR-MPLS轉發平面的規則,設計了基于P4的Segment Routing方案。P4程序部分包括了基本轉發邏輯和Segment Routing標簽處理邏輯,用于在P4交換機上編譯運行實現數據平面功能。使用ONOS控制器做Segment Routing的控制平面指導流表的下發,底層P4交換機從ONOS控制器的通告中得知對每個Segment的處理方法。
關鍵詞:Segment Routing;P4;軟件定義網絡;協議無關
中圖分類號:TP393? ? ? 文獻標識碼:A
文章編號:1009-3044(2021)10-0223-03
1引言
當前基于互聯網的業務發展速度非常迅猛,這一現象給網絡基礎架構發出了很大的挑戰,業界需要一種全新的技術來支撐越來越被人們重視的基于業務和應用的超大規模流量工程。路由收斂速度的主要問題往往不在于控制平面和路徑計算算法,而是在于路由處理器往線卡發送FIB更新的時間,以及從線卡CPU往線卡硬件轉發表寫入這些更新的時間。Segment Routing正是將這一個問題進行了思想的革新[1]。Segment Routing是在SDN環境下一種全新的應用驅動網絡思想,它將網絡中的指令抽象成Segment,直接使用報文頭部的字段指導交換機的動作[2]。SDN控制器由于其具有的集中式管控的全局視角很適合作為Segment Routing的控制平面,但是在使用SDN交換機作為轉發工具時,會存在硬件限制,白盒交換機不足以支持Segment Routing靈活的標簽棧需求[3]。在這種情況下,使用可以自定義轉發規則的P4交換機就可以更好地支持Segment Routing和SDN控制器的結合[4]。
P4(Programming Protocol-Independent Packet Processors可編程協議獨立數據包處理語言,以下簡稱P4)是一種開源的數據面高級編程語言。P4是專為編程可重構網絡架構而設計出來的一種協議無關的語言[5],自其誕生之日起就引起學術界的廣泛關注與工業界的積極實現:P4相關的學術論文如雨后春筍現于各大頂級會議和期刊上,AT&T、谷歌、Cisco、華為等超過100家世界知名設備商、運營商、互聯網企業等大型公司也已加入了P4語言聯盟,產業界在這場革新狂歡下正在掀起P4探索和應用的浪潮。
2設計方案
在SR和P4相互結合可以完善SR的擴展性和靈活性的基礎上,設計了基于P4的Segment Routing實現方案,本內容將從轉發平面、控制平面和數據平面的三個角度詳細分析每一個部分的需求和針對各需求的設計方案。
2.1 SR轉發平面的選擇
參考Segment Routing Architecture (RFC 8402 July 2018)給出了兩種SR轉發平面并根據調研結果做出設計:
1) MPLS轉發平面:
Segment list體現為MPLS標簽,其優點是:(1)SR可以利用現有MPLS數據平面;(2)Segment即MPLS標簽;(3)可以用于IPv4和IPv6兩種情況下地址協議族,擴展性強。
2) IPv6轉發平面(即SRv6):
Segment list體現為路由擴展報頭SRH(中存在多個IPv6 地址),其特點是:SRv6的交換機需要支持SRH的節點讀取報頭、更新指針、交換目標地址并轉發。
由以上兩種轉發平面的特性可以看出,在核心網中這兩種轉發平面幾乎都不需要基礎設備本身進行路由,因為數據包中已經嵌入了轉發的指令。而在進入核心網之前都需要在邊緣路由器或是控制器為數據包創建路徑并以標簽的形式將發放到入口交換機進而封裝到數據包頭部。
在研究中發現,SR-MPLS數據平面目前在服務提供商中已經得到了一定的采用,但SRv6的采用卻一直處于滯后的狀態。這樣發展的差異主要來源于硬件。
由于SR-MPLS轉發平面是由傳統MPLS轉發平面升級而來,當涉及轉發時,SR-MPLS沒有任何特殊的ASIC要求。盡管需要特定于SR-MPLS的控制平面軟件,但這并不影響ASIC轉發數據包的能力。因此,SR-MPLS的采用成本相對較低。
相比之下,SRv6對ASIC提出了一些特殊的要求。即SRH是一個新的IPv6報頭,仍處于IETF的草案。SRv6節點必須沿SR路徑執行多個操作,包括讀取SRH,將IPv6目標字段重寫到路徑中的下一個節點,更新指針以及執行特定于節點的操作。這些要求并不是不可克服的,但是很少有人會將這種少用的功能加入硅片中。簡而言之,SRv6的大規模部署需要設備芯片的更新,這就造成了SRv6發展的滯后。
在這種情況下,P4天然的可編程性在硬件中的應用可以極大程度解決SRv6的窘境,所以,本文在完成常用的SR-MPLS轉發平面的基礎上,做了簡單的SRv6開發論證,在p4語言和控制器簡單實現的基礎上留下一些可供今后發展的接口。
2.2 SR控制平面的設計
2.2.1 P4runtime作為控制平面
P4runtime是一種對內置對象(表和值集)、便攜式交換機架構(PSA),以及外部(如計數器、儀表、動作配置文件等)進行控制訪問的架構,它的對外接口是一套特別開發的基于GRPC的API。在P4Runtime的架構中,要控制的設備位于底層,頂部可以是一個或多個控制器。P4Runtime允許多個控制器參與,但是需要確保只有一個控制器對每個讀/寫實體或管道配置本身具有寫訪問權。任何控制器都可以對任何實體或管道配置執行讀訪問。
使用p4的工作流程中,編譯P4源程序以生成P4設備配置和P4Info元數據。P4Info中的元數據描述了整個程序本身(PkgInfo)以及從P4程序派生的所有實體實例——表和外部實例。每個實體實例都有一個由P4編譯器分配的相關數字ID,作為簡潔“處理”的憑證,用于API調用。P4Runtime的API則定義了客戶端和服務器之間接口的消息和語義,供外部控制使用。
P4Runtime的API支持多種語言,本方案中ONOS使用Java進行開發也是使用了P4runtime的擴展API,本方案除了使用ONOS作為控制平面以外,也編寫python對p4程序進行驗證,python由于其簡單使用的特點,可以比較方便的實現大規模p4程序及p4交換機組網的仿真和驗證。本文中的方案通常在實現用python描述的p4邏輯驗證之后使用ONOS控制器作為集中控制細化控制方案,因此這里只對控制層面使用的p4runtime API做一說明,后文中不再贅述。
2.2.2 ONOS控制器作為控制平面
SR可以使用路由協議或SDN控制器在網絡中分發Segment信息,支持的協議包括域內的ISIS、OSPF和域間的BGP協議。為了更好地將SR的分布式轉發控制和SDN控制器的集中式調度控制相結合,本設計方案中采用ONOS作為控制器,它可以具有全局網絡拓撲、使用算法規劃段路由以及對設備進行流表和標簽棧下發。
另外,本方案在全局標簽規格的選擇上,仿照IGP作為控制的標準,參考其全局標簽(Prefix Segments,下文中稱Prefix-SID)和鄰接標簽(Adjacency Segments,下文中稱Adj-SID)進行設計,Prefix-SID和Adj-SID的主要特點如下:
?Prefix-SID
– SR域的任一節點都明白該Segment的相關指令
– SR域的每個節點的轉發表中都安裝了該Segment相關指令
– 在MPLS SR中:為段路由全局塊(SRGB)中的全局標簽值
? Adj-SID
– 只有該Segment的始發節點明白它的相關指令
– 在SR-MPLS中:為設備本地分發的標簽
在ONOS控制層需要做出的設計有:
1) 標簽(Prefix-SID和Adj-SID)的分配和分發:
a. Prefix-SID的分配由設備監聽服務(Device Service和Device Listener)監聽到新設備上線開始,本設計中采用的是在給定SRGB的基礎上,取每個設備的標識ID中從第一位非0的字段開始一直到ID字段結束作為index(索引),將這一index加在代表全局塊的SRGB值上作為Prefix-SID,即Prefix-SID為【“SRGB+index”】。
例如device.Id為device:bmv2:s2;全局塊SRGB為16000;則index為2;Prefix-SID 為16002。
這一操作在交換機上線時,ONOS中由一Prefix映射函數完成,控制器中具有網絡內所有交換機的Prefix-SID。
b. Adj-SID的分配由設備監聽服務(Device Service和Device Listener)監聽到新設備上線開始。對于這個新上線的設備,Adj-SID指的是它的每一個出端口,因此本方案將Adj-SID設計為:本交換機的index通過某端口連接到另一交換機的index中加一個0來表示,即Adj-SID為【“index1” + “0” + “index2”】。
例如device.Id為device:bmv2:s2,該交換機的2端口和device.Id為device:bmv2:s3 的交換機相連;則代表2端口的Adj-SID為203。
這一操作在交換機上線時,ONOS中由一Adjacency映射函數完成,控制器中具有網絡內所有交換機中各端口對應的Adj-SID,并將屬于每個交換機的Adj-SID及其對應端口通告各交換機。
2) 標簽(Prefix-SID和Adj-SID)轉發表的建立:
a. Prefix-SID的轉發表在新交換機上線時完成,設備監聽器(Device Listener)監聽到新交換機上線時,對這個交換機和當前所有已知Prefix-SID的交換機進行路由規劃,采用最短路徑,將每個Prefix-SID對應的轉發端口port生成協議無關流表,下發給本交換機,即下發內容如下的流表。
b. Adj-SID的轉發表同樣在新交換機上線時完成,設備監聽器(Device Listener)監聽到新交換機上線時,對這個交換機和當前所有和本交換機相鄰的交換機進行遍歷,找到對應端口進行端口對Adj-SID的映射,并將這個映射關系以流表的形式下發給本交換機,即下發內容如下的流表。
3) 路徑(Segments)的標識和建立
SR實現的路由又被稱為大跳路由,因此SR只是在網絡中選取交換機作為需要映射標簽的節點,形成一個有序的segment列表(在MPLS中為標簽棧),交換機將這一封裝標簽的動作以流表的形式下發給邊緣P4交換機,P4交換機通過數據層面定義好的邏輯將標簽棧封裝在數據包的包頭,然后進入P4交換機分布的網絡中,即下發內容如下的流表。
2.3 SR數據平面的設計
P4交換機作為設計的數據層面,需要對數據格式、報文處理邏輯等進行定義。本方案中設計了IPv4基本轉發功能、SR基本轉發功能、以及一些適合后期擴展的功能。
2.3.1數據包的解析(parser模塊)
P4代碼中的解析器本質上是一個狀態轉移的邏輯,按照包頭遇到的情況進行解析,并把一層一層的解析結果對應放在一個新的標準報頭實例中,本方案中,SR-MPLS頭部位于二三層之間,但是為了后期擴展,解析了一些可能不存在的包頭類型,并且一直做到四層TCP的解析,但是由于P4程序的特性,這些操作并不會影響普通數據包進行SR功能的驗證。
2.3.2數據報入口處理流程(control模塊)
a. Action
action是table中可以調用動作的具體實現,類似編程語言中的函數實現,但是可以執行的基本動作比較有限,需要根據需求設計出精煉的動作集。
b. Table
經過對P4語言的學習,可以發現,Table的設計原則就是Action的邏輯性。Table的邏輯性和其他編程語言中建立一個class很像,需求的根本是“Match +Action”匹配對應關系,給一組Match,需要得到一個Action,這就是像是傳遞參數得到返回值一樣。然而不一樣的是,一個Table可以匹配很多的Match也可以不匹配Match域,但是都只能調用一個Action。
因此,一個精簡有效的Table是需要反復測試修正設計方案的。本設計方案在多次修正后,對Table的需求分為以下幾種:
(1)初始化標簽棧:該table的目的是在match目的地址之后,將ONOS控制器返還的一組Segment數組封裝進報文頭部預留的自定義Segment Routing類型中。
(2)標簽的轉發:按照SR-MPLS的設計方案,標簽存在三種標準action,其中push動作即是初始化標簽棧,因此轉發table中,需要有如下兩種標準動作和一個自己定義的結束動作:
? Next:按照倒數第二跳彈出的規則彈出當前標簽,并設置出端口;
? Continue:不彈出標簽,按照當前標簽對應的轉發表設置出端口;
? Finish:彈出棧底標簽,將以太網類型設置為Ipv4并給出轉發端口。
(3)Ipv4轉發:Ipv4的設計考慮了不適用SR的情況下需要仍然可以完成轉發,因此本部分的交換機邏輯就是對目的Ip進行匹配,按照最短路徑給出出端口即可。
c. Apply:apply是table執行的語句,可以寫在一個判斷語句內,調用table來完交換機內部的邏輯,流程圖內陰影部分的判斷將在這里實現,如圖1所示。
3 P4代碼設計思路
4結論
本文設計主要對Segment Routing網絡架構進行研究,設計了更加符合當前網絡現狀、更靈活且易于擴展的SR方案。當前的SR方案比較少采用SDN控制器作為控制平面,而是使用IGP、BGP等協議進行控制,這樣的做法不光沒有追上軟件定義網絡的廣泛使用化,也缺少了全局視野在控制層面的優越性。因此本文使用ONOS控制器作為控制平面可以有效利用 SDN的集中控制管控能力,為SR規劃更合理更科學地標簽棧。
參考文獻:
[1] 吳理炫.基于SDN的移動核心網流量管理的研究[D].北京:北京郵電大學,2018.
[2] 馮濤.軟件定義網絡(SDN)網絡管理關鍵技術研究[D].北京:清華大學,2015.
[3] 趙敏,田野.P4與POF協議無關可編程網絡技術比較研究[J].網絡新媒體技術,2018,7(1):54-58.
[4] 林耘森簫,畢軍,周禹,等.基于P4的可編程數據平面研究及其應用[J].計算機學報,2019,42(11):2539-2560.
[5] 陳果.基于P4的可編程數據交換原型系統的設計與實現[D].西安:西安電子科技大學,2018.
【通聯編輯:唐一東】