向雄,袁志
(廣州大學(xué)華軟軟件學(xué)院,廣州 510990)
在SDN 中,網(wǎng)絡(luò)智能全部集中到了控制器上,可以以編程方式進(jìn)行網(wǎng)絡(luò)動(dòng)態(tài)管理和運(yùn)營。一般來說,在SDN 中實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)模塊只需用高級(jí)語言(通常是Java 或Python)編寫一個(gè)實(shí)現(xiàn)它的模塊嵌入到控制器中,嵌入方式可以是靜態(tài)的(如RYU),也可以是動(dòng)態(tài)的(如OpenDayLight 等),非常方便靈活。需要?jiǎng)討B(tài)編排的網(wǎng)絡(luò)模塊涵蓋了流量轉(zhuǎn)發(fā)、容錯(cuò)、資源預(yù)留、狀態(tài)中間件、服務(wù)鏈等各種獨(dú)立開發(fā)的控制模塊。然而由于模塊之間存在沖突、依賴和屏蔽等關(guān)系,組合這些模塊來進(jìn)行來實(shí)現(xiàn)預(yù)定的目標(biāo)仍然是一件很有挑戰(zhàn)性的工作,運(yùn)營者必須人工解決模塊之間的相互作用問題,有時(shí)甚至不得不通過最原始的抓包方式來了解其中細(xì)節(jié)。
SDN 為云計(jì)算、SFC、NFV 等提供了很好的支持。NFV 的目標(biāo)就是將網(wǎng)絡(luò)功能中間件如防火墻、負(fù)載均衡器等傳統(tǒng)專用硬件中的軟件執(zhí)行環(huán)境轉(zhuǎn)換成基于通用硬件VM 的專用虛擬化環(huán)境,VM 通常運(yùn)行于云平臺(tái)上以便管理。不同的網(wǎng)絡(luò)功能被虛擬化成單個(gè)的VNF,以服務(wù)鏈的方式組合起來形成SFC 讓數(shù)據(jù)包依次通過。在高級(jí)NFV 架構(gòu)里,宏觀的VNF 還被拆分為微服務(wù)或更細(xì)粒度的單功能VNF 的組合,更好地實(shí)現(xiàn)復(fù)用,增加了靈活性。然而,不管是微服務(wù),還是不同粒度的VNF,編排組合時(shí)都會(huì)遇到與SDN 控制器中的網(wǎng)絡(luò)模塊一樣的沖突依賴問題。
目前關(guān)于SDN 的SFC 相關(guān)研究[1-4]都是針對(duì)負(fù)載均衡、故障恢復(fù)、故障防護(hù)及節(jié)能和擴(kuò)展性方面的,很少有人對(duì)SFC 內(nèi)部的SF 模塊之間的相關(guān)性進(jìn)行分析和處理,解決這個(gè)問題對(duì)于保障SFC 的正常工作是非常有意義的。
我們首先通過一個(gè)如圖1 所示的傳統(tǒng)網(wǎng)絡(luò)中的服務(wù)器集群場(chǎng)景來詳細(xì)分析下模塊間的相關(guān)性問題。
圖1 Web服務(wù)集群場(chǎng)景
RS1 和RS2 為服務(wù)器集群中的兩臺(tái)真實(shí)主機(jī),來自H1 或H2 的訪問請(qǐng)求首先通過防火墻FW 過濾,DR將客戶端對(duì)虛擬IP(VIP,Virtual IP)的請(qǐng)求路由到LB,LB 根據(jù)具體的負(fù)載均衡算法(例如輪轉(zhuǎn)調(diào)度算法RR)將VIP 映射到RS1 或RS2 的真實(shí)IP(RIP,Real IP)。雖然在一些不帶負(fù)載均衡的應(yīng)用場(chǎng)景中,從VIP 到RIP 的映射是直接在DR 中完成的,這里就不分開討論了。在SDN 網(wǎng)絡(luò)中,進(jìn)行網(wǎng)絡(luò)功能虛擬化后,其網(wǎng)絡(luò)連接圖可大大簡(jiǎn)化為如圖2 所示。
圖2 SDN簡(jiǎn)化網(wǎng)絡(luò)
SW 則是一個(gè)根據(jù)流表規(guī)則執(zhí)行轉(zhuǎn)發(fā)的純Open?Flow 交換機(jī),F(xiàn)W、DR 和LB 功能模塊既可以嵌入在控制器中運(yùn)行,也可以以SFC 的形式在專門的虛擬服務(wù)器中運(yùn)行,不管哪一種形式,它們都是以彼此獨(dú)立的方式生成各自的流安裝到SW 上來實(shí)現(xiàn)自身功能。
假設(shè)FW 需要過濾掉H1 對(duì)VIP 的訪問,則上述功能需要在SW 上安裝的流如表1 所示。
表1 簡(jiǎn)化的數(shù)據(jù)中心網(wǎng)絡(luò)的操作列表
在上述處理流水線中,操作c 只是執(zhí)行流表跳轉(zhuǎn)功能,將處理流水線引導(dǎo)至實(shí)施負(fù)載均衡功能的流表,不會(huì)更改流的行為,所以這里并不對(duì)它進(jìn)行討論。d 操作省略了控制器執(zhí)行調(diào)度算法的rip 決策過程,并不影響下面的討論。
問題一:
由于a 操作要根據(jù)VIP 進(jìn)行過濾,而d 操作修改了VIP,很明顯如果優(yōu)先級(jí)a 問題二: 在現(xiàn)有的解決方案,例如LVS 中,RS1 和RS2 都會(huì)在主機(jī)上配置一個(gè)地址vip,回復(fù)的數(shù)據(jù)包的源IP會(huì)直接填上VIP,這就使得e 操作成為多余,浪費(fèi)了寶貴的流表資源。 上述例子說明了實(shí)際應(yīng)用中模塊間由規(guī)則沖突引起的功能異常問題的必然性和普遍性。為解決這個(gè)問題,我們首先來分析一下流規(guī)則的特點(diǎn)。根據(jù)Open?Flow 協(xié)議,一條流規(guī)則r 我們可以從四個(gè)方面進(jìn)行描述: ●r.match:r 的匹配字段集合,可進(jìn)一步細(xì)分成r.match.src 和r.match.dst 等具體字段,每個(gè)字段也對(duì)應(yīng)一個(gè)匹配集合,例如r.match.src=192.168.2.*就是192.168.2.0 網(wǎng)段所有IP 地址組成的集合。 ●r.action:r 要執(zhí)行的group、forwarding、drop 或meter 動(dòng)作。 ●r.mod:r 要修改的字段集合 ●r.priority:r 的優(yōu)先級(jí),創(chuàng)建時(shí)就被賦值 其中,r.action 只列出了四種動(dòng)作類型,并未包含OpenFlow 協(xié)議規(guī)定的全部動(dòng)作類型,這是因?yàn)槠渌愋偷膭?dòng)作如PUSH POP 等與隧道機(jī)制相關(guān)的動(dòng)作不改變數(shù)據(jù)包的處理流程,不會(huì)引起沖突問題,所以不用考慮。兩個(gè)動(dòng)作只有在動(dòng)作類型相同參數(shù)也相同的情況下才是相同的,否則就會(huì)沖突。 下面分析任意二條規(guī)則r1 和r2 的匹配域關(guān)系,它們之間存在四種關(guān)系: ●相交:如果存在兩個(gè)字段x 和y,使得r1.match.x?r2.match.x 且r2.match.y ?r1.match.y,則r1 和r2 相交。例如:r1.match.src=192.168.0.1, r2.match.src=192.168.0.*, r1.match.dst=192.168.2.*, r2.match.dst=192.168.2.1。 ●等價(jià):r1 和r2 包含的字段相同,且對(duì)于任意字段x 都有:r1.match.x = r2.match.x,兩條規(guī)則的匹配域完全一致。 ●包含:對(duì)于r1 中的任一字段x,都有r1.match.x ?r2.match.x,但r1 與r2 不等價(jià),則r1 包含于r2。例如如果 r1.match.src=192.168.0.1,r2.match.src=192.168.0.*,那么r1 包含于r2。 ●不相關(guān):至少存在一個(gè)字段x,使得r1.match.x?r2.match.x=Φ,則r1 和r2 不相關(guān)。 基于以上關(guān)系,規(guī)則的執(zhí)行順序不同,其產(chǎn)生的效果也不一樣,如果不處理的話,可能產(chǎn)生以下四種異常[5]: ●依賴:如果r1.mod ?r2.match≠Φ,也就是說r1修改了r2 的匹配字段,這就有可能導(dǎo)致r2 的匹配條件得不到滿足從而引起r2 失效,此時(shí)我們說r2 依賴于r1,記作r2→r1。 ●冗余:當(dāng)r1 等價(jià)于r2 或r1 包含r2 時(shí),如果動(dòng)作相同,則r2 是冗余的,記作r1>r2,此情形浪費(fèi)流表資源但不影響模塊功能。 ●遮蔽:當(dāng)r1 與r2 等價(jià)或r1 包含r2 且動(dòng)作沖突時(shí),凡匹配r2 的流必然匹配r1,這就可能引起r2 失效,也就是說r2 被r1 遮蔽,記作r1 ≯r2。例如傳統(tǒng)的最長前綴路由匹配算法需要遍歷整張路由表來尋找最具體的路由,在SDN 中實(shí)現(xiàn)時(shí),OpenFlow 只會(huì)根據(jù)優(yōu)先級(jí)匹配和首次匹配[6],就有可能導(dǎo)致具體路由被大類路由遮蔽。 ●相交沖突:當(dāng)r1 與r2 相交時(shí),如果動(dòng)作沖突,那么當(dāng)匹配發(fā)生在交集部分時(shí),有可能導(dǎo)致r1 失效,也有可能導(dǎo)致r2 失效。 SFC 中的功能模塊及數(shù)據(jù)中心的NFV 編排是要按照特定順序來執(zhí)行的,例如圖2 中FW 功能就要先于LB 功能執(zhí)行,這個(gè)順序特點(diǎn)降低了沖突問題的復(fù)雜性,一些有沖突的規(guī)則按順序執(zhí)行后,前面的就會(huì)屏蔽后面的,這是符合網(wǎng)絡(luò)管理要求的。為此,我們按以下思路來解決問題: (1)把每個(gè)網(wǎng)絡(luò)功能看作一個(gè)事務(wù) 通常要實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)功能得使用多條流表規(guī)則,這些規(guī)則要么全部生效,要么一條也不生效,以保證網(wǎng)絡(luò)功能的原子性。一個(gè)事務(wù)就是這樣的多條流規(guī)則的集合。 (2)不同事務(wù)對(duì)應(yīng)不同的優(yōu)先級(jí) 不同事務(wù)的優(yōu)先級(jí)由網(wǎng)絡(luò)管理員統(tǒng)一分配,SFC鏈中越往前的網(wǎng)絡(luò)功能事務(wù)優(yōu)先級(jí)越高。 (3)高優(yōu)先級(jí)的事務(wù)所對(duì)應(yīng)的流規(guī)則先于低優(yōu)先級(jí)的執(zhí)行 事務(wù)的優(yōu)先級(jí)與流規(guī)則的優(yōu)先級(jí)是兩個(gè)不同的概念,流規(guī)則優(yōu)先級(jí)通過priority 字段來實(shí)現(xiàn),而事務(wù)優(yōu)先級(jí)與網(wǎng)絡(luò)功能的執(zhí)行順序一致,有兩種實(shí)現(xiàn)方式:①同一交換機(jī)內(nèi)高優(yōu)先級(jí)事務(wù)對(duì)應(yīng)的流規(guī)則安裝在編號(hào)較小的流表上,不同的事務(wù)的流規(guī)則安裝在不同的流表中;②不同優(yōu)先級(jí)的事務(wù)對(duì)應(yīng)的流規(guī)則安裝在不同的交換機(jī)上,使用output 動(dòng)作引導(dǎo)數(shù)據(jù)包流通過不同的事務(wù)。 為了跟蹤和發(fā)現(xiàn)規(guī)則的異常,需要在控制器中運(yùn)行一個(gè)沖突檢測(cè)模塊監(jiān)視網(wǎng)絡(luò)功能的加入和退出,檢測(cè)并管理其準(zhǔn)備添加或移除的規(guī)則,其主要過程如圖3所示。 圖3 規(guī)則沖突檢測(cè)機(jī)制 沖突檢測(cè)模塊對(duì)于在模塊加入時(shí)的流程如圖4 所示,主要過程如下: (1)對(duì)于依賴異常,如果r1 依賴于r2,也就是說r1的匹配域用到了r2 的修改域,如果它們屬于同一模塊,我們可以認(rèn)為它們是相關(guān)的,是符合設(shè)計(jì)者意圖的,為節(jié)省流表資源,將它們合并為一條規(guī)則;否則它們就是獨(dú)立的,不應(yīng)該互相影響,如果r1 所在事務(wù)優(yōu)先級(jí)較高,則r2 的修改不會(huì)影響r1 的功能,可以不用處理,如果r1 優(yōu)先級(jí)低,則將其放入異常規(guī)則集合。 (2)對(duì)于冗余異常,只需將冗余的規(guī)則去掉,將規(guī)則的模塊引用數(shù)增加1 (3)對(duì)于遮蔽異常,如果它們來自于同一模塊,就提升被遮蔽規(guī)則的優(yōu)先級(jí),讓它優(yōu)先執(zhí)行,以便于實(shí)現(xiàn)類似于最長前綴路由匹配算法之類功能;如果來自于不同模塊,由于模塊是相互獨(dú)立的,所以這種沖突是不正確的,于是被遮蔽規(guī)則被放入異常規(guī)則集合。 (4)對(duì)于相交沖突,可以將兩條規(guī)則的匹配域進(jìn)行分解,匹配域的公共部分按遮蔽異常處理,非公共部分按各自的動(dòng)作處理。 (5)循環(huán)結(jié)束以后,沖突檢測(cè)模塊查看abnormal 集合中是否為空,如果不空,就向異常規(guī)則所對(duì)應(yīng)模塊反饋安裝異常信息,提示安裝失敗。只有abnormal 集合為空時(shí),result 集合中的規(guī)則才會(huì)正常安裝。 沖突檢測(cè)模塊在模塊退出時(shí)要做的事情主要是將待刪除的規(guī)則的模塊引用數(shù)減一,如果為0 則從交換機(jī)中刪除。 圖4 沖突檢測(cè)算法 本文通過詳細(xì)分析了SDN 環(huán)境下網(wǎng)絡(luò)模塊間由流表規(guī)則引發(fā)的沖突問題,特別是對(duì)于數(shù)據(jù)中心里的負(fù)載均衡模塊導(dǎo)致流量繞行防火墻的情況進(jìn)行了深入研究,總結(jié)了流表規(guī)則匹配域中的四種關(guān)系,深入分析由這四種關(guān)系對(duì)應(yīng)的動(dòng)作沖突而導(dǎo)致的四種異常的產(chǎn)生原理及解決辦法,提出了基于事務(wù)機(jī)制的模塊沖突解決方案。從理論上論證了方案的可行性與合理性。2 解決方案
3 結(jié)語