?,F(xiàn)威 常朝穩(wěn) 秦 晰 左志斌
(解放軍戰(zhàn)略支援部隊信息工程大學(xué)密碼工程學(xué)院 鄭州 450004)
軟件定義網(wǎng)絡(luò)[1](Software-Defined Network,SDN)將控制平面和數(shù)據(jù)平面進行解耦,使得網(wǎng)絡(luò)中引入新的網(wǎng)絡(luò)協(xié)議和功能更加容易。但是目前OpenFlow[2]協(xié)議定義的協(xié)議類型和字段都僅限于網(wǎng)絡(luò)前4層中一些常用的協(xié)議和字段。但是許多安全協(xié)議需要添加新的匹配字段和安全功能,所以為了能夠兼容多種網(wǎng)絡(luò)安全協(xié)議,需要一種可編程數(shù)據(jù)平面,能夠使網(wǎng)絡(luò)管理者自定義匹配字段和轉(zhuǎn)發(fā)動作。研究表明將安全功能部署在數(shù)據(jù)平面能夠?qū)崿F(xiàn)更高的性能,并且能夠節(jié)省控制器CPU資源。因此越來越多的網(wǎng)絡(luò)安全協(xié)議將安全功能部署在數(shù)據(jù)平面上。但是目前網(wǎng)絡(luò)安全協(xié)議部署在可編程數(shù)據(jù)平面仍存在以下問題:(1)包頭解析。由于安全協(xié)議需要在數(shù)據(jù)包中插入密文或者簽名,需要自定義匹配字段,所以在傳統(tǒng)的包頭解析中需要分層多次提交,產(chǎn)生較大的延遲。(2)獨占的可編程數(shù)據(jù)平面。當(dāng)前可編程數(shù)據(jù)平面是獨占設(shè)備的,一旦安全功能部署之后,該設(shè)備只能運行一個可編程數(shù)據(jù)平面程序。(3)密碼算法編程可重構(gòu)。在同一網(wǎng)絡(luò)安全協(xié)議下有多種密碼算法。因此程序員需要實現(xiàn)不同的密碼算法來滿足不同的安全需求,并且當(dāng)前P4并沒有提供密碼算法方面的編程原語,以上原因增加了安全協(xié)議編程難度。
針對以上問題本文提出了一種面向安全協(xié)議的虛擬化SDN可編程數(shù)據(jù)平面。本文主要貢獻如下:
(1) 提出一種快速的包頭解析器,其為數(shù)據(jù)包添加一個密碼協(xié)議描述頭來降低提交次數(shù),實現(xiàn)包頭的快速解析,在實現(xiàn)自定義字段解析的基礎(chǔ)上提高解析效率。
(2) 提出一種基于P4的虛擬化可編程數(shù)據(jù)平面VCP4,通過對P4進行虛擬化,能夠在同一個設(shè)備上虛擬出多個隔離的數(shù)據(jù)平面。實現(xiàn)多租戶下的同一設(shè)備的可編程數(shù)據(jù)平面隔離。
(3) 使用P4語言編寫部分密碼算法相關(guān)運算,將其作為密碼算法所需的基本運算單元,通過代碼的可重用將單元組成對應(yīng)密碼算法原語,實現(xiàn)內(nèi)部資源可以動態(tài)的編排組合。
為了支持不同網(wǎng)絡(luò)功能的快速部署,首先需要網(wǎng)絡(luò)設(shè)備能夠適應(yīng)不同的協(xié)議,能夠?qū)Π^進行靈活的解析,曹作偉等人[3]提出協(xié)議無感知轉(zhuǎn)發(fā)交換機,實現(xiàn)協(xié)議無關(guān)性解析。但是上述解析只支持少量數(shù)據(jù)包的解析,無法滿足大量數(shù)據(jù)處理。Chole等人[4]提出了一種彈性包頭解析器,通過存儲包頭指針實現(xiàn)多匹配域解析,但是其只能實現(xiàn)4個匹配域的解析,靈活性欠佳。斯坦福大學(xué)的Bosshart等人[5]為了完全實現(xiàn)網(wǎng)絡(luò)從轉(zhuǎn)發(fā)到匹配字段的全軟件定義,提出了P4(Programming Protocol independent Packet Processor),受到業(yè)界廣泛關(guān)注,稱為OpenFlow 2.0。
在P4虛擬化方面,Hancock等人[6]首次提出了P4虛擬化這一概念,并實現(xiàn)虛擬化可編程平面Hyper4,其在硬件和P4程序之間添加一個類似Hypervisor的管理器實現(xiàn)P4的虛擬化。Hyper4使用了大量的重提交操作,造成效率降低。針對以上問題Zhang等人[7]提出一種全虛擬化的數(shù)據(jù)可編程平面HyperVDP。雖然實現(xiàn)了虛擬化功能,但無法實現(xiàn)功能和代碼的可重用,所以其資源消耗較高。
在功能可重構(gòu)方面,Zhou等人[8]將P4部分項目進行分解,并通過一個模塊化編程管理器ClickP4實現(xiàn)網(wǎng)絡(luò)功能的動態(tài)編排和代碼的可重用。季新生等人[9]將可編程數(shù)據(jù)平面與密碼學(xué)結(jié)合,實現(xiàn)網(wǎng)絡(luò)認(rèn)證轉(zhuǎn)發(fā)。
VCP4的總體架構(gòu)如圖1所示。VCP4作為管理程序在P4編譯器與P4硬件之間,其由密碼算法編譯器、包頭解析器、控制流隊列生成器和動態(tài)映射表4部分組成,能夠動態(tài)地創(chuàng)建虛擬實例,且獨立運行單個P4功能程序。密碼算法編譯器主要對P4程序以及本文構(gòu)造的密碼運算單元生成的原語進行解析。包頭解析器對安全協(xié)議包頭進行快速解析,并且能夠識別用戶自定義匹配字段??刂屏麝犃猩善鲗4中多種控制流進行單一表示,將控制流中任意有向無環(huán)圖(Directed Acyclic Graph, DAG)結(jié)構(gòu)轉(zhuǎn)換成線性DAG結(jié)構(gòu)。動態(tài)映射表將設(shè)備物理資源進行動態(tài)映射,實現(xiàn)可編程平面的虛擬化。接下來對各模塊進行詳細說明。
安全協(xié)議往往需要自定義匹配字段,需要對字段靈活解析,所以包頭解析器是實現(xiàn)網(wǎng)絡(luò)安全協(xié)議自定義匹配字段的關(guān)鍵,其根據(jù)字段偏移量對包頭進行分層解析。通常包頭解析器通過重復(fù)提交實現(xiàn)包頭文件的分層解析,最終得到所有的匹配項。在數(shù)據(jù)包重提交過程中會產(chǎn)生較大延遲,提交次數(shù)越多延遲越大。因此為了實現(xiàn)包頭的快速解析,需要減少提交次數(shù)。
為了降低性能損失,實現(xiàn)快速解析本文在收到的數(shù)據(jù)包頭前封裝了一個4 Byte的密碼協(xié)議描述頭。它包含虛擬id(8 bit)、總長度(16 bit)和填充位(8 bit)。解析器可以通過一次提交獲取真實包頭的長度,該方法中原包頭作為一個整體,不需要進行分層解析,來獲取自定義字段長度。
本文通過解析+匹配表的方式為每個數(shù)據(jù)包添加描述頭。首先需要為每個虛擬數(shù)據(jù)平面配置虛擬id和其接收數(shù)據(jù)流的源MAC地址。當(dāng)接受到數(shù)據(jù)流后,通過Parser中current offset指針獲取包頭長度和源MAC地址,根據(jù)MAC地址分配虛擬id。通過流表匹配在包頭處添加描述頭,隨后將添加過描述頭的包頭提交給P4包頭解析器。由于數(shù)據(jù)緩存的存在,一個數(shù)據(jù)包會多次觸發(fā)同一原語,造成緩存鎖死,其他數(shù)據(jù)包無法進入緩存進行處理,因此需要進行數(shù)據(jù)流隔離保證數(shù)據(jù)平面的可執(zhí)行性。為此本文在緩存前添加一個流量閥,當(dāng)某一虛擬id流量過大時,屏蔽該虛擬id的流量進入緩存,將流量降至閾值以下,因此進入包頭解析器前過程將在3.1節(jié)中敘述。
P4的控制流由一組階段(stage)和部分布爾函數(shù)組成。Stage可以根據(jù)布爾表達式的結(jié)果跳轉(zhuǎn)到另一個stage。stage間的跳轉(zhuǎn)實質(zhì)上是一個有向無環(huán)圖(DAG), stage表示每個點,stage分支表示點與點之間的邊,其值為布爾函數(shù)。為了實現(xiàn)控制流的虛擬化,本文需要將控制流進行標(biāo)準(zhǔn)化,即對match-action進行解耦??刂屏髦饕嬖趕tage跳轉(zhuǎn)、匹配和動作執(zhí)行3個狀態(tài),因此本文使用3個流處理過程來描述控制流,其分別為跳轉(zhuǎn)處理過程、匹配處理過程和動作執(zhí)行處理過程,如圖2所示。
跳轉(zhuǎn)處理過程主要用于模擬決定stage跳轉(zhuǎn)的布爾條件,其通過4個流表實現(xiàn),其流表匹配結(jié)果分別為進入匹配處理過程,進入動作執(zhí)行過程,跳過后續(xù)處理和跳入下一個stage。匹配處理過程主要用于字段匹配和動作執(zhí)行映射。在字段匹配方面,本文將P4中標(biāo)準(zhǔn)match-action表的匹配字段劃分為3個類型:包頭、標(biāo)準(zhǔn)元數(shù)據(jù)和用戶自定義元數(shù)據(jù)。動作執(zhí)行處理過程主要包含所有需要執(zhí)行的動作,并按匹配處理階段的動作執(zhí)行映射順序執(zhí)行所有動作。動作執(zhí)行處理過程中除了P4定義基本動作,本文還根據(jù)密碼算法添加部分運算作為元動作,如循環(huán)移位、歐拉函數(shù)計算等。
通過對match-action進行解耦,本文將控制流生成標(biāo)準(zhǔn)化格式,利用文獻[10]的方法將這些任意結(jié)構(gòu)的DAG圖生成線性結(jié)構(gòu)DAG。首先為每個stage分配一個固定id用于節(jié)點編號。
圖2 Match-action解耦
流隊列生成器將任意狀態(tài)控制流生成有序的線性序列。然而P4中的控制流可以包含任意數(shù)量的stage,無法對其數(shù)量進行預(yù)測,但是硬件資源有限,當(dāng)多個控制流映射到同一設(shè)備上時,容易產(chǎn)生狀態(tài)溢出。為了解決資源不足這一問題,本文借鑒了虛擬機映射緩存機制[11]和HyperVDP[7]中stage映射方法。因此本文為VCP4引入動態(tài)映射表,通過動態(tài)映射實現(xiàn)設(shè)備的邏輯擴展,使其能夠支持不同數(shù)量的stage。其結(jié)構(gòu)如圖3所示。
首先,由于控制流隊列生成器通過對matchaction解耦使stage能夠獨立,因此本文根據(jù)設(shè)備構(gòu)造一組連續(xù)的stage動態(tài)映射表,將解耦后的stage映射到動態(tài)映射表中,其類似虛擬內(nèi)存和物理內(nèi)存的關(guān)系。其次,由于每個stage都擁有一個固定id,因此本文對id和映射表總數(shù)進行取模運算來確定stage對應(yīng)的動態(tài)映射表的位置。但是由于P4為了防止內(nèi)部循環(huán),其stage只能向后產(chǎn)生分支,此外由于不同if-else分支上的stage的綁定條件不相關(guān),所以可以在同一個動態(tài)映射表中存在多個stage。當(dāng)一個控制流擁有的stage多于動態(tài)映射表的總數(shù)時,VCP4通過重提交來恢復(fù)處理。
基于P4的密碼算法的原語編程主要通過密碼算法編譯器實現(xiàn)的,其功能由兩部分組成:(1)對虛擬可編程平面進行配置;(2)擴展P4編譯器,使其不僅支持P4原語還有能夠支持P4后端編譯的密碼算法原語。
圖3 動態(tài)映射表
密碼算法編譯器獲取一個P4程序或者P4+密碼運算原語程序后,編譯程序并為這個程序分配stage動態(tài)映射表。隨后對虛擬可編程平面進行實例化,其中包括程序id,stage id,填充表項等。每個數(shù)據(jù)包在描述頭位置都會分配一個虛擬id,表示其對應(yīng)的虛擬可編程平面。當(dāng)數(shù)據(jù)包被對應(yīng)的虛擬可編程平面處理時,通過密碼算法編譯器為數(shù)據(jù)包動態(tài)地分配程序id和stage id。在動態(tài)映射表匹配處理過程中,流表通過與數(shù)據(jù)包分配的程序id和stage id實現(xiàn)動作執(zhí)行和階段跳轉(zhuǎn)。由于使用id對數(shù)據(jù)包進行劃分,以此實現(xiàn)了虛擬可編程的平面的隔離。
VCP4處理控制流過程分為3部分,如圖4。首先對數(shù)據(jù)包頭進行快速解析,當(dāng)數(shù)據(jù)包進入包頭解析時首先添加描述頭,并在描述頭位置都會分配一個虛擬id。隨后將數(shù)據(jù)包送入緩存,在緩存處通過流量閥檢查同一虛擬id數(shù)據(jù)包流量是否超過閾值,如果小于閾值則通過包頭快速解析器提取包頭信息。隨后解耦match-action過程,通過動態(tài)映射表將每個控制流的stage分配到對應(yīng)的stage容器中。該過程的開頭和結(jié)尾分別有2個配置表,第1個為數(shù)據(jù)包匹配的起始地址,第2個是將匹配域超出容器數(shù)量的數(shù)據(jù)包進行重新提交。
密碼算法編譯器為程序員提供靈活的程序管理方法,首先可以對stage容器進行動態(tài)的組合實現(xiàn)復(fù)雜的網(wǎng)絡(luò)功能。其次由于虛擬可編程平面間的隔離性,每個虛擬可編程平面可以表示為一個功能路由,可以通過虛擬平面進行組合完成復(fù)雜的網(wǎng)絡(luò)任務(wù)和網(wǎng)絡(luò)安全協(xié)議。
圖4 VCP4中程序處理過程
本文在P4編譯器的基礎(chǔ)上添加了一個非侵入式的類宏框架,該框架為可編程數(shù)據(jù)平面提供密碼算法的抽象。本文在switch.p4[12]的基礎(chǔ)上添加了12個密碼算法原語,這些算法原語支持P4-14版本。
表1為密碼算法原語列表。表中的密碼算法原語分為兩種:(1)在單個可編程數(shù)據(jù)平面的密碼算法原語;(2)多個可編程數(shù)據(jù)平面的狀態(tài)同步原語。本文將從這兩個方面進行介紹。
在單個可編程數(shù)據(jù)平面密碼原語中包括系統(tǒng)功能型和密碼算法型兩種,系統(tǒng)功能源語主要應(yīng)用于系統(tǒng)狀態(tài)編程,無法直接對數(shù)值進行運算,需要利用指針進行賦值。前者有@VCP4_for, @VCP4_minmax, @VCP4_cmp,后者主要為密碼算法提供運算組合元素,@VCP4_gcd, @VCP4_power,@VCP4_hash, @VCP4_ROL, @VCP4_byte,@VCP4_S, @VCP4_GF。由于篇幅有限,本文在每種密碼算法原語中挑選1種進行舉例。
表1 密碼算法原語列表
首先本文先介紹系統(tǒng)功能型原語@VCP4_for,當(dāng)使用不同索引值重復(fù)同一原語時可以使用該原語表示。例如構(gòu)造表頭,初始化參數(shù),構(gòu)造多個相同的流表或者執(zhí)行相同action。
式(1)表示對索引變量進行循環(huán)賦值。
接下來本文對密碼算法型原語@VCP4_ROL進行詳細分析。用于實現(xiàn)循環(huán)移位,屬于DES的基礎(chǔ)運算。
將字節(jié)長度為8的自定義字段進行循環(huán)左移2位。
如果安全協(xié)議需要多個可編程數(shù)據(jù)平面共同完成,這些數(shù)據(jù)平面間需要進行頻繁的通信和狀態(tài)同步。因此,本文設(shè)想兩種多可編程數(shù)據(jù)平面間的通信方式:同步多播,在虛擬化可編程平面中的同步多播與傳統(tǒng)意義上的多播不同,其為一個實體交換機上的虛擬可編程平面向另一個實體交換機上的虛擬可編程數(shù)據(jù)平面集合發(fā)送狀態(tài)或請求;同步單播,即在同一個虛擬可編程平面集合中不同虛擬可編程平面通信。
同步多播:本文使用VCP4自動生成一組P4代碼實現(xiàn)狀態(tài)變量同步。
當(dāng)pkt.time低于特定閾值時,觸發(fā)時間同步。此時VCP4的密碼算法原語會自動生成一個開發(fā)人員編寫的時間同步操作action。目前默認(rèn)操作為克隆一個狀態(tài)同步的數(shù)據(jù)包。該段action動作在包頭指定字段作為同步消息,并且修改目的地址為可編程數(shù)據(jù)平面集合所在網(wǎng)段。
同步單播:該原語的原理與同步多播類似,唯一不同的是狀態(tài)信息只發(fā)送給單個目的交換機。本文還是以SSH為例,當(dāng)一個數(shù)據(jù)平面將狀態(tài)變量作為請求響應(yīng)發(fā)送給另一個數(shù)據(jù)平面,這一過程與同步多播類似,唯一不同的是通過在runtime中添加一個返回命令使其只返回給源數(shù)據(jù)平面。
本節(jié)實驗分從4個方面對VCP4進行評估:(1)包頭解析性能,與P4, Hyper4等可編程數(shù)據(jù)平面的解析器進行比較;(2)在資源利用率方面,將VCP4與現(xiàn)有的虛擬化平面Hyper4及P4進行比較;(3)在虛擬化性能方面,本文將VCP4 DPDK-target與P4 DPDK-target和Openvswitch虛擬化交換機進行對比;(4)安全協(xié)議性能方面,本文分別在P4和VCP4 BMv2-target上實現(xiàn)3個安全協(xié)議用例來進行比較說明。
可編程數(shù)據(jù)平面的主要資源為流表和metadata元數(shù)據(jù),因此本文從VCP4中流表數(shù)量和虛擬可編程數(shù)據(jù)平面runtime中流表數(shù)量2個方面來評估VCP4的資源利用率。
(1) 由于硬件資源的限制,為了將更多的資源用于虛擬可編程平面的運行,因此VCP4的運行管理應(yīng)當(dāng)用盡可能少的流表數(shù)量,提高管理效率。因此本文分別在不同數(shù)量原語和stage的條件下,將VCP4與Hyper4、P4進行流表數(shù)量對比。本文對VCP4與Hyper4下發(fā)相同stage的控制流,且VCP4設(shè)置4個動態(tài)映射表,在此條件下觀察實現(xiàn)不同數(shù)量原語需要的流表數(shù)量,試驗重復(fù)10次并求平均值。
從圖5(a)可知,隨著原語數(shù)量增加,Hyper4和P4的流表數(shù)量快速增加,而VCP4幾乎不變。這是由于Hyper4和P4對原語處理主要依靠線性流表處理管道,每條原語都會產(chǎn)生對應(yīng)的管道,因此Hyper4和P4的原語處理與流表數(shù)量呈線性正相關(guān),由于P4不需要進行虛擬化配置所以流表數(shù)量低于Hyper4,而VCP4由于利用動態(tài)映射表循環(huán)處理,沒有原語流表處理管道,其主要與動態(tài)映射表的數(shù)量和配置流表數(shù)量有關(guān)。
(2) 虛擬可編程數(shù)據(jù)平面runtime中流表數(shù)量表示虛擬可編程數(shù)據(jù)平面實現(xiàn)功能時產(chǎn)生的流表,越多的流表表示其處理管道越長,帶來的處理延遲越大。本文分別通過VCP4, Hyper4和P4分別實現(xiàn)防火墻[13]、交換機[14]、ARP代理[15]和IPsec認(rèn)證(AH頭中使用字段匹配替代密碼算法),結(jié)果如圖5(b)所示。
在試驗中,P4通過2個流表實現(xiàn)交換機功能,分別為源MAC地址匹配表和目的MAC地址匹配表。在VCP4中,需要5個表,1個虛擬可編程數(shù)據(jù)平面配置表,2個匹配流表,2個動作流表。Hyper4則需要18個流表實現(xiàn)這一功能。在L2層實現(xiàn)防火墻,VCP4只需要2個動態(tài)映射表,每個動態(tài)映射表包含2個匹配表和動作表,而Hyper4需要多個表對數(shù)據(jù)包進行解析,再需要至少4個match-action表用于不同數(shù)據(jù)包的匹配。在實現(xiàn)ARP代理和IPsec時三者的流表數(shù)量增加較多,其主要是因為需要進行TTL檢查、TTL修改和TTL計算等操作。一般來說Hyper4使用的流表數(shù)量至少是VCP4的2倍。
由于VCP4是在DPDK-target基礎(chǔ)上實現(xiàn)虛擬化功能,所以本文將VCP4與同樣使用DPDK-target的P4和Openvswitch進行對比。分別通過以上3種數(shù)據(jù)平面轉(zhuǎn)發(fā)40 Gbps數(shù)據(jù)量,通過測量其吞吐量、時延和CPU利用率對其虛擬化能力進行評估。本文分別在3種結(jié)構(gòu)上實現(xiàn)L2層轉(zhuǎn)發(fā)。
(1) 吞吐量測試。結(jié)果如圖6(a)所示。從圖中可知對于短數(shù)據(jù)包,由于VCP4和Openvswitch引入了虛擬化功能,所以吞吐率略低于P4,但當(dāng)發(fā)送的數(shù)據(jù)包為長數(shù)據(jù)包時,三者吞吐率一樣。VCP4相對于P4吞吐率總體損失約9%。
(2) 時延是衡量網(wǎng)絡(luò)質(zhì)量和可用性的一項重要指標(biāo)。本文分別測量了VCP4, P4和Openvswitch平均轉(zhuǎn)發(fā)時延,結(jié)果如圖6(b)。時延隨著數(shù)據(jù)包的長度增加而增加,VCP4時延高于P4和Openvswitch,增加了約17%。因為P4和Openvswitch使用流水線匹配方式,而VCP4由于虛擬化和可編程的需求,使用隊列的方式模擬流水線方式,對收到的數(shù)據(jù)包進行match-action解耦,所以處理時延高于P4和Openvswitch。
圖5 可編程數(shù)據(jù)平面資源利用率對比
安全協(xié)議性能主要指實現(xiàn)安全協(xié)議功能的可編程數(shù)據(jù)平面的性能和實現(xiàn)安全協(xié)議代碼量。本文實現(xiàn)6個網(wǎng)絡(luò)功能,并根據(jù)網(wǎng)絡(luò)功能組合實現(xiàn)CHAP,IPsec(利用Hash驗證完整性)和IPsec(利用RSA認(rèn)證)3個協(xié)議。
(1) 由于P4和Hyper4沒有密碼算法原語,所以本文將接收到的密碼信息通過6653端口導(dǎo)入主機操作系統(tǒng)中,利用對應(yīng)的密碼算法庫對信息進行驗證,將驗證結(jié)果返回到可編程數(shù)據(jù)平面中進行處理。本文分別用BMv2-target的吞吐量和時延評估可編程數(shù)據(jù)平面實現(xiàn)安全協(xié)議的性能,結(jié)果如圖7所示。
從圖7(a)和圖7(b)可知,Hyper4的吞吐量遠小于P4,虛擬化帶來的吞吐量的降低約83%。VCP4吞吐量降低范圍是33%~45.6%,其情況遠好于Hyper4。這是由BMv2-target處理管道數(shù)量和長度決定的,Hyper4需要為每個數(shù)據(jù)流動作分配一個處理管道,且在解析的過程中需要分層解析,因此其需要多個處理管道,其吞吐率較低。由于VCP4包含密碼算法原語,可以直接對包中認(rèn)證信息進行處理,而P4和Hyper4需要將認(rèn)證信息導(dǎo)出處理,所以VCP4的時延低于P4和Hyper4。
(2) 從代碼量方面分析,本文將VCP4中實現(xiàn)的安全協(xié)議代碼轉(zhuǎn)化為P4的BMv2-target[16]代碼,由于P4沒有密碼原語,所以本文將P4外部的密碼算法庫代碼量統(tǒng)計在內(nèi),結(jié)果如圖7(c)。從圖中可知,由于密碼原語簡化了密碼算法的實現(xiàn),且部分循環(huán),異步功能實現(xiàn)也進行了簡化,大大降低了安全協(xié)議實現(xiàn)的代碼量,降低至少50%以上。在IPsec框架下,隨著密碼算法的復(fù)雜度增加,P4中密碼算法代碼增加,但VCP4由于使用密碼原語,其代碼量變化較小。
通過在P4的基礎(chǔ)上實現(xiàn)虛擬化可編程數(shù)據(jù)平面VCP4,滿足網(wǎng)絡(luò)安全協(xié)議中可自定義字段和數(shù)據(jù)流的隔離性,其具有以下創(chuàng)新點,首先在P4的基礎(chǔ)上引入快速包頭解析器、控制流隊列生成器和動態(tài)映射表技術(shù),在BMv2-target和DPDK-target上構(gòu)造Hypervisor,以此實現(xiàn)可編程數(shù)據(jù)平面的虛擬化,通過可編程平面的虛擬化保證網(wǎng)絡(luò)安全協(xié)議的隔離性。其次為了便于網(wǎng)絡(luò)安全協(xié)議的編程,本文在P4語言的基礎(chǔ)上添加了密碼算法原語,對常用的密碼運算進行了封裝,這樣能夠有效降低代碼量。
根據(jù)VCP4的結(jié)構(gòu),本文分別從資源利用率、虛擬化性能和安全協(xié)議性能3方面對VCP4進行評估。結(jié)果顯示在DPDK-target方面,VCP4相較于P4吞吐率減少9%時延增加了17%,其在可接受范圍內(nèi)。在BMv2-target方面,VCP4由于密碼原語的使用,其時延優(yōu)于P4,且代碼量降低了50%。雖然VCP4實現(xiàn)虛擬化且降低了安全協(xié)議部署的代碼量,且?guī)淼男阅軗p耗是可接受的,但是其服務(wù)仍是按隊列進行的,無法根據(jù)網(wǎng)絡(luò)需求進行動態(tài)的分配,無法適應(yīng)部分時延敏感型業(yè)務(wù)。
圖6 可編程數(shù)據(jù)平面虛擬化性能對比
圖7 可編程數(shù)據(jù)平面安全協(xié)議性能對比