林為偉 張 棟 葉福玲
1.福州大學(xué)數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院 福建福州 350108
2.福州大學(xué)網(wǎng)絡(luò)信息安全與計(jì)算機(jī)技術(shù)實(shí)驗(yàn)教學(xué)中心 福建福州 350108
3.福州大學(xué)至誠(chéng)學(xué)院 福建福州 350002
網(wǎng)絡(luò)實(shí)驗(yàn)教學(xué)是計(jì)算機(jī)專業(yè)網(wǎng)絡(luò)課程的重要組成部分。現(xiàn)有網(wǎng)絡(luò)實(shí)驗(yàn)課程主要集中在設(shè)備操作與協(xié)議驗(yàn)證,對(duì)網(wǎng)絡(luò)底層,如路由器或交換機(jī)的體系結(jié)構(gòu)、工作機(jī)制及工作原理等涉及較少[1,2]。教師受限于固化的硬件,難以編程設(shè)計(jì)或優(yōu)化底層設(shè)備,實(shí)驗(yàn)教學(xué)主要圍繞步驟化的驗(yàn)證性實(shí)驗(yàn)展開(kāi)。隨著軟件定義網(wǎng)絡(luò)(Software Defined Networking,SDN)技術(shù)的發(fā)展,上述困境逐步得到緩解。SDN作為新型網(wǎng)絡(luò)架構(gòu),將控制平面與數(shù)據(jù)平面分離,控制平面通過(guò)OpenFlow協(xié)議制訂和下發(fā)轉(zhuǎn)發(fā)策略,數(shù)據(jù)平面按策略轉(zhuǎn)發(fā)[3]。然而OpenFlow不具有協(xié)議不相關(guān)性,使數(shù)據(jù)轉(zhuǎn)發(fā)只能依據(jù)現(xiàn)有的協(xié)議[4]。而P4(Programming Protocol-Independent Packet Processors)的問(wèn)世,克服了OpenFlow的上述缺陷。
作為SDN領(lǐng)域的編程語(yǔ)言,P4為數(shù)據(jù)平面提供了一套編程抽象,開(kāi)發(fā)者可以使用P4描述網(wǎng)絡(luò)數(shù)據(jù)平面協(xié)議和數(shù)據(jù)包處理行為,而無(wú)須關(guān)心底層硬件的實(shí)現(xiàn)細(xì)節(jié),并可編程更改數(shù)據(jù)包解析與轉(zhuǎn)發(fā)流程,解決了傳統(tǒng)網(wǎng)絡(luò)硬件設(shè)備可編程能力低的問(wèn)題[5,6]。已有越來(lái)越多高校將SDN引入計(jì)算機(jī)網(wǎng)絡(luò)教學(xué),并探索將P4作為SDN的重要組成部分引入課堂,解決當(dāng)前網(wǎng)絡(luò)實(shí)驗(yàn)教學(xué)無(wú)法涉及底層設(shè)備架構(gòu)與可編程的問(wèn)題[7,8]。但是,現(xiàn)有的P4從開(kāi)發(fā)到部署運(yùn)行,配套的集成運(yùn)行環(huán)境較為缺乏,嚴(yán)重依賴于控制平面的復(fù)雜配置,難以滿足初學(xué)者的仿真實(shí)驗(yàn)學(xué)習(xí)要求。因此,如何簡(jiǎn)化控制平面的復(fù)雜配置,設(shè)計(jì)簡(jiǎn)便的P4集成仿真實(shí)驗(yàn)環(huán)境,將教與學(xué)的精力集中于數(shù)據(jù)平面可編程,成為保障P4實(shí)驗(yàn)教學(xué)順利實(shí)施的重要課題。
作為數(shù)據(jù)平面的編程語(yǔ)言,P4的開(kāi)發(fā)、部署和運(yùn)行,都依賴控制平面的配置。首先,P4程序的運(yùn)行,需要控制平面下發(fā)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的具體配置;其次,P4程序只定義對(duì)數(shù)據(jù)平面匹配動(dòng)作的一系列高級(jí)描述,但匹配動(dòng)作何時(shí)被執(zhí)行,還需要控制平面配置下發(fā)流表,來(lái)驗(yàn)證匹配動(dòng)作執(zhí)行的正確性。控制平面的配置操作煩瑣,影響P4教學(xué)實(shí)驗(yàn)的順利實(shí)施與推廣。針對(duì)該問(wèn)題,構(gòu)建P4虛擬仿真實(shí)驗(yàn)教學(xué)平臺(tái),為P4程序提供配套的集成運(yùn)行環(huán)境,將教與學(xué)的精力集中于P4編程上。
P4虛擬仿真實(shí)驗(yàn)教學(xué)平臺(tái)包含五個(gè)模塊,分別是Web前端、初始化模塊、網(wǎng)絡(luò)拓?fù)渑渲媚K、流表配置模塊和P4源代碼模塊,各模塊間的關(guān)系如圖1所示。各模塊功能如下。
(1)Web前端:?jiǎn)?dòng)Web圖形化界面,提交網(wǎng)絡(luò)拓?fù)渖傻奈募团渲孟掳l(fā)流表。
(2)初始化模塊:存放網(wǎng)絡(luò)拓?fù)湮募颓岸藛?dòng)腳本,通過(guò)運(yùn)行啟動(dòng)腳本可以啟動(dòng)網(wǎng)絡(luò)環(huán)境的虛擬仿真。
(3)網(wǎng)絡(luò)拓?fù)渑渲媚K:服務(wù)后端,存放網(wǎng)絡(luò)拓?fù)渑渲梦募幚砬岸瞬僮魃傻木W(wǎng)絡(luò)拓?fù)湮募?,?shí)際配置網(wǎng)絡(luò)拓?fù)洹?/p>
(4)流表配置模塊:服務(wù)后端,存放流表配置文件,處理前端操作提交的流表配置命令。
(5)P4源代碼模塊:存放用戶編寫的P4代碼及代碼所依賴的頭文件和解析文件,根據(jù)前端建立網(wǎng)絡(luò)拓?fù)浜吞峤坏牧鞅砼渲猛瓿上鄳?yīng)的動(dòng)作匹配。
圖1 P4虛擬仿真實(shí)驗(yàn)平臺(tái)模塊結(jié)構(gòu)圖
平臺(tái)為P4程序的開(kāi)發(fā)部署提供了兩項(xiàng)控制平面配置服務(wù)功能,一是提供圖形化操作建立并展示網(wǎng)絡(luò)拓?fù)?;二是提供圖形化操作查看和修改交換機(jī)的流表項(xiàng)。
平臺(tái)采用輕量級(jí)仿真工具M(jìn)ininet提供底層網(wǎng)絡(luò)拓?fù)渖桑ㄟ^(guò)初始化模塊啟動(dòng)Mininet,并基于控制器Ryu應(yīng)用gui_topology進(jìn)行二次開(kāi)發(fā),提供Web前端的圖形化展示[9,10]。Mininet 基于 Linux Container 架構(gòu),是斯坦福大學(xué)Nick McKeown 教授領(lǐng)導(dǎo)的研究小組開(kāi)發(fā)的網(wǎng)絡(luò)虛擬仿真工具,可以在計(jì)算機(jī)上模擬完整的網(wǎng)絡(luò)主機(jī)、鏈路和交換機(jī),同時(shí)還具有很強(qiáng)的擴(kuò)展性[11]。Ryu是SDN的一種開(kāi)源控制器,可以將Mininet平臺(tái)連接到Ryu控制器上,通過(guò)Ryu提供的可視化界面展示SDN對(duì)網(wǎng)絡(luò)的集中式控制。P4虛擬仿真實(shí)驗(yàn)教學(xué)平臺(tái)可以讓學(xué)生通過(guò)可視化的Web界面創(chuàng)建網(wǎng)絡(luò)拓?fù)?,同時(shí)動(dòng)態(tài)查看和修改數(shù)據(jù)平面交換機(jī)的流表項(xiàng)。
通過(guò)建立拓?fù)浜托薷牧鞅韺?shí)驗(yàn)對(duì)提出的P4虛擬仿真實(shí)驗(yàn)教學(xué)方案進(jìn)行展示。實(shí)驗(yàn)需要驗(yàn)證P4代碼switch.p4在網(wǎng)絡(luò)拓?fù)渲袑?duì)數(shù)據(jù)包的轉(zhuǎn)發(fā),程序關(guān)鍵代碼展示如下。
首先,利用P4虛擬仿真實(shí)驗(yàn)教學(xué)平臺(tái)提供的圖形化界面,建立并驗(yàn)證網(wǎng)絡(luò)拓?fù)涞恼_性;其次,在建立網(wǎng)絡(luò)拓?fù)浠A(chǔ)上,選擇特定的交換機(jī),由平臺(tái)完成流表下發(fā),驗(yàn)證所寫P4程序數(shù)據(jù)包轉(zhuǎn)發(fā)的功能。通過(guò)上述實(shí)驗(yàn),能讓學(xué)生感受到平臺(tái)的圖形化界面為控制平面配置工作所提供的便捷,將師生從原本復(fù)雜的控制平面配置中解脫出來(lái),專注于數(shù)據(jù)平面的P4編程。
本實(shí)驗(yàn)將要建立的網(wǎng)絡(luò)拓?fù)淙鐖D2所示,其中s1,s2,s3是三臺(tái)形成環(huán)路的交換機(jī),每臺(tái)交換機(jī)分別連接一臺(tái)主機(jī)和相鄰兩臺(tái)交換機(jī)。在沒(méi)有平臺(tái)的輔助下,學(xué)生若需要建立該拓?fù)?,要按照特定的格式,以文本文件的形式將所需網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)編寫保存,再由Mininet加載生成虛擬網(wǎng)絡(luò)環(huán)境。建立拓?fù)浜托薷牧鞅韺?shí)驗(yàn)將展示由平臺(tái)提供的Web圖形化界面,幫助快速便捷地建立網(wǎng)絡(luò)拓?fù)?。網(wǎng)絡(luò)搭建完成后,還將進(jìn)行修改流表的操作。若缺少平臺(tái)輔助,學(xué)生需逐臺(tái)登錄交換機(jī),再通過(guò)命令行的方式,逐條下發(fā)流表規(guī)則,學(xué)生需要記憶復(fù)雜的流表下發(fā)命令格式。建立拓?fù)浜托薷牧鞅韺?shí)驗(yàn)將展示由平臺(tái)提供的Web圖形化界面,便捷地配置下發(fā)流表。
圖2 實(shí)驗(yàn)網(wǎng)絡(luò)拓?fù)鋱D
(1)創(chuàng)建網(wǎng)絡(luò)拓?fù)洌菏紫?,使用Ryu開(kāi)源控制器的ryu-manager命令,運(yùn)行Web前端當(dāng)中的python代碼p4web.py,啟動(dòng)Web前端。其次,在瀏覽器中打開(kāi)Web圖形化界面。在Web界面左側(cè)輸入交換機(jī)和主機(jī)的數(shù)量,輸入鏈路信息,點(diǎn)擊提交,即可在Web界面的右側(cè)展示出所創(chuàng)建的網(wǎng)絡(luò)拓?fù)?,如圖3所示,同時(shí)程序后臺(tái)將生成網(wǎng)絡(luò)拓?fù)湮募?,以供后續(xù)啟動(dòng)Mininet時(shí)加載。
圖3 P4虛擬仿真實(shí)驗(yàn)平臺(tái)的前端界面
(2)驗(yàn)證網(wǎng)絡(luò)拓?fù)洌和ㄟ^(guò)Web前臺(tái)展示的網(wǎng)絡(luò)拓?fù)鋱D可以初步驗(yàn)證網(wǎng)絡(luò)拓?fù)涞恼_性。啟動(dòng)Mininet,啟動(dòng)過(guò)程將加載步驟(1)創(chuàng)建的網(wǎng)絡(luò)拓?fù)湮募琈ininet完成交換機(jī)和主機(jī)的虛擬仿真,完成網(wǎng)絡(luò)拓?fù)涞呐渲?。在Mininet上使用net命令查看網(wǎng)絡(luò)拓?fù)?,?yàn)證發(fā)現(xiàn)由虛擬仿真平臺(tái)生成的網(wǎng)絡(luò)拓?fù)渑c要建立網(wǎng)絡(luò)拓?fù)涫且恢碌?,如圖4所示。
圖4 在Mininet上驗(yàn)證網(wǎng)絡(luò)拓?fù)?/p>
通過(guò)步驟(1)、步驟(2)發(fā)現(xiàn),平臺(tái)能夠幫助學(xué)生快速建立網(wǎng)絡(luò)拓?fù)?。此外,平臺(tái)具有配置交換機(jī)流表的能力,配置入口如圖3右下方所展示。實(shí)驗(yàn)將展示學(xué)生在完成P4程序switch.p4后,利用平臺(tái)在控制平面上對(duì)網(wǎng)絡(luò)拓?fù)鋬?nèi)的交換機(jī)配置轉(zhuǎn)發(fā)規(guī)則,以實(shí)現(xiàn)主機(jī)間的網(wǎng)絡(luò)互通。
(3)配置下發(fā)流表:實(shí)驗(yàn)前交換機(jī)流表并沒(méi)有配置任何規(guī)則,因此網(wǎng)絡(luò)拓?fù)鋬?nèi)的3臺(tái)主機(jī)相互間是不通的,如圖5a所示。實(shí)驗(yàn)要求通過(guò)修改流表實(shí)現(xiàn)h1和h3,h2和h3之間互通,需分別配置下發(fā)3臺(tái)交換機(jī)的流表規(guī)則。通過(guò)平臺(tái)提供的Web圖形化界面,學(xué)生可以方便快速地完成交換機(jī)流表規(guī)則的下發(fā),而不再需要上述煩瑣的過(guò)程。以s1為例,點(diǎn)擊Web前臺(tái)右下角的交換機(jī)流表信息,進(jìn)入下發(fā)流表頁(yè)面,點(diǎn)擊下發(fā)流表按鈕,進(jìn)行流表下發(fā),下發(fā)流表后,平臺(tái)將展示在s1上下發(fā)的所有流表規(guī)則,如圖6所示。之后再以同樣的操作,分別在s2和s3上完成下發(fā)流表的操作。
(4)驗(yàn)證流表規(guī)則:在s1,s2,s3完成下發(fā)流表的操作后,再次驗(yàn)證h1,h2,h3互相之間的網(wǎng)絡(luò)通信,發(fā)現(xiàn)h1和h3,h2和h3互相間網(wǎng)絡(luò)已經(jīng)連通,如圖5b所示,說(shuō)明此前下發(fā)的流表規(guī)則已經(jīng)生效,交換機(jī)內(nèi)的數(shù)據(jù)包成功被轉(zhuǎn)發(fā)。此外,P4虛擬仿真實(shí)驗(yàn)教學(xué)平臺(tái)還可對(duì)已經(jīng)下發(fā)的流表執(zhí)行刪除操作,只需點(diǎn)擊交換機(jī)流表規(guī)則右邊的刪除按鈕即可完成。
圖5 主機(jī)之間的相互通信結(jié)果
圖6 s1下發(fā)流表
通過(guò)建立拓?fù)浜托薷牧鞅韺?shí)驗(yàn),展示了學(xué)生在P4程序的開(kāi)發(fā)過(guò)程中,使用P4虛擬仿真實(shí)驗(yàn)教學(xué)平臺(tái)提供的圖形化界面,建立并驗(yàn)證網(wǎng)絡(luò)拓?fù)涞恼_性,不需要預(yù)先按照特定格式編輯網(wǎng)絡(luò)拓?fù)湮募?,并可在網(wǎng)絡(luò)拓?fù)鋬?nèi)選擇特定的交換機(jī),利用圖形化界面完成配置下發(fā)流表的操作,從而驗(yàn)證所寫P4程序的數(shù)據(jù)包轉(zhuǎn)發(fā)功能,無(wú)須手工輸入命令。傳統(tǒng)方法和通過(guò)平臺(tái)輔助的對(duì)比見(jiàn)表1。實(shí)驗(yàn)表明,學(xué)生在P4編程學(xué)習(xí)過(guò)程中,可以借助P4虛擬仿真實(shí)驗(yàn)教學(xué)平臺(tái)快速便捷地完成控制平面的配置,克服因控制平面的復(fù)雜配置給P4開(kāi)發(fā)部署帶來(lái)的不便,有利于P4實(shí)驗(yàn)教學(xué)的進(jìn)一步推廣。
表1 傳統(tǒng)方法和P4虛擬仿真平臺(tái)的功能對(duì)比
面對(duì)網(wǎng)絡(luò)新技術(shù)的發(fā)展,傳統(tǒng)計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)教學(xué)課程相對(duì)滯后,師生難以對(duì)網(wǎng)絡(luò)底層設(shè)備的設(shè)計(jì)與優(yōu)化實(shí)現(xiàn)編程控制。P4推動(dòng)了SDN數(shù)據(jù)平面可編程,成為高校SDN課程教學(xué)中的重要一環(huán)。雖然P4提供了數(shù)據(jù)平面可編程能力,但在開(kāi)發(fā)、部署和運(yùn)行的過(guò)程中,依賴于控制平面的復(fù)雜配置。本文提出了面向數(shù)據(jù)平面P4編程的虛擬仿真實(shí)驗(yàn)教學(xué)平臺(tái),并以建立拓?fù)浜托薷牧鞅韺?shí)驗(yàn)為例,展示了平臺(tái)為P4程序運(yùn)行提供圖形化的網(wǎng)絡(luò)拓?fù)浜蛣?dòng)態(tài)的可視化流表管理。平臺(tái)有助于提升SDN課程的教學(xué)質(zhì)量,促進(jìn)了P4實(shí)驗(yàn)教學(xué)的推廣。