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