楊榮寬,張奇支,趙淦森,鄭偉平
1(華南師范大學(xué) 計算機學(xué)院,廣州 510631)
2(廣州市云計算安全與測評技術(shù)重點實驗室,廣州 510631)
SDN(Software-Defined Networking)是一種將網(wǎng)絡(luò)控制平面和數(shù)據(jù)平面分離、具備可編程性的新型網(wǎng)絡(luò)架構(gòu)[1].基于OpenFlow協(xié)議的SDN架構(gòu)將底層基礎(chǔ)設(shè)施抽象出來,使用戶能夠通過編程來集中控制網(wǎng)絡(luò)轉(zhuǎn)發(fā)行為.當網(wǎng)絡(luò)狀態(tài)發(fā)生變化時,SDN控制器可通過下發(fā)新的轉(zhuǎn)發(fā)規(guī)則更新交換機流表項,從而管理整個網(wǎng)絡(luò)狀態(tài).盡管SDN實現(xiàn)了網(wǎng)絡(luò)的集中控制,但數(shù)據(jù)平面設(shè)備的分布式特性也帶來了許多問題,如交換機自身安裝流表項的速度、交換機間的傳輸延遲等.這使得流表項生效時間難以一致,進而導(dǎo)致更新不一致,增加了集中管理的難度[2].
目前,我們正在參與一項國家重點研發(fā)計劃子課題的項目研究.該項目的一個主要研究目標是在政務(wù)通信網(wǎng)絡(luò)中提出一種能保證數(shù)據(jù)轉(zhuǎn)發(fā)高可靠性、提供細粒度QoS保障的機制.而數(shù)據(jù)轉(zhuǎn)發(fā)的可靠性和細粒度QoS直接依賴于SDN轉(zhuǎn)發(fā)策略的更新一致性.因此,保證SDN流表更新一致,對保證項目中的數(shù)據(jù)轉(zhuǎn)發(fā)高可靠性和細粒度QoS具有重大意義.本文在此基礎(chǔ)上,研究能保證SDN流表更新一致、數(shù)據(jù)可靠轉(zhuǎn)發(fā)、更新性能好的更新方案.
在SDN網(wǎng)絡(luò)中,當交換機收到一個數(shù)據(jù)報后,它首先查找轉(zhuǎn)發(fā)流表.若有匹配的流表項,則執(zhí)行相應(yīng)的動作.否則交換機會向控制器發(fā)送packetin消息,將報文上報至控制器進行處理.控制器處理后,會向交換機下發(fā)新的轉(zhuǎn)發(fā)流表項指導(dǎo)后續(xù)轉(zhuǎn)發(fā).此外,當網(wǎng)絡(luò)狀態(tài)發(fā)生變化時,控制器會主動或被動向交換發(fā)送新的轉(zhuǎn)發(fā)流表項,以形成新的轉(zhuǎn)發(fā)路徑[3].
由于數(shù)據(jù)平面的交換機呈分布式排列,控制器向每臺交換機下發(fā)新流表的時延會有不同,交換機內(nèi)部的更新速度也有差異,這會導(dǎo)致新規(guī)則的所有流表項無法同時生效,使數(shù)據(jù)包出現(xiàn)錯誤的轉(zhuǎn)發(fā)處理,引發(fā)數(shù)據(jù)轉(zhuǎn)發(fā)中斷、環(huán)路等問題,影響網(wǎng)絡(luò)流量傳輸?shù)目煽啃院图毩6萉oS的保證.
因此,在新舊規(guī)則的更新過程中,必須要保持流表的一致性更新.即控制器在更新交換機中的流表項時,那些正在傳輸?shù)臄?shù)據(jù)包在每個交換機上要么匹配舊規(guī)則流表項,要么匹配新規(guī)則流表項,不能出現(xiàn)在交換機A上匹配舊規(guī)則,而在交換機B上又匹配新規(guī)則的情況.為了更好地說明SDN流表更新不一致性引起的問題,下面以圖1進行舉例說明.其中節(jié)點Ni(1≤i≤8)代表交換機,實線代表舊轉(zhuǎn)發(fā)路徑,虛線代表新轉(zhuǎn)發(fā)路徑.
圖1 路由更新實例
假設(shè)某時刻SDN控制器同時向各個交換機下發(fā)更新命令:將轉(zhuǎn)發(fā)規(guī)則更新至新路徑.由于控制器和不同交換機的傳輸時延差異,交換機無法同時完成更新.當N1完成更新而N8尚未更新時,即N8沒有匹配數(shù)據(jù)流的轉(zhuǎn)發(fā)規(guī)則,則轉(zhuǎn)發(fā)到N8的數(shù)據(jù)流將不知作何處理.如果默認動作是丟棄報文,則會引起流中斷.此外,如果交換機N6更新了而N5尚未更新,就會形成環(huán)路N6→N5→N6.這會長時間占用鏈路直至報文的TTL超時,從而降低鏈路利用率和轉(zhuǎn)發(fā)性能.
通常來說,SDN流表更新出現(xiàn)不一致時,可能會導(dǎo)致網(wǎng)絡(luò)中斷、環(huán)路、安全漏洞等問題.為確保從舊規(guī)則過渡到新規(guī)則期間,網(wǎng)絡(luò)能正確轉(zhuǎn)發(fā)報文,則必須要考慮所有可能出現(xiàn)的中間狀態(tài)及其屬性[4].很明顯,流表的一致性更新,關(guān)系到網(wǎng)絡(luò)配置能否正確實現(xiàn).
目前,針對SDN流表更新一致性問題,研究者已經(jīng)提出了多種更新方案,如兩階段更新[5]、反向更新[6]、基于分類時序更新[7]、時間觸發(fā)更新[8]、分段更新[9]等.
為了確保更新無黑洞和無循環(huán)的一致性屬性,Reitblatt等首先提出每流/每包一致性的定義[5],并基于此定義提出了兩階段更新方案進行策略轉(zhuǎn)發(fā)更新.
周曄等[10]、齊嬋等[7]在兩階段更新的基礎(chǔ)上分別提出了基于分類和基于分類時序的流表更新一致性方案,核心均在于根據(jù)更新操作類別對交換機進行分類,并按照一定的順序更新規(guī)則.不同的是,分類時序更新增加了對流表項的細分操作.分類時序更新雖算法簡單,但其根據(jù)嚴格設(shè)定的順序來更新新舊轉(zhuǎn)發(fā)路徑上的節(jié)點,忽略了同時是新舊路徑上的交換機的情況,存在應(yīng)用場景局限性.此外,不管更新拓撲復(fù)雜與否,都需要等待一定的端到端最長時延才能進行下一階段,方案更新輪次固定,更新時延過長.
基于節(jié)點依賴關(guān)系,Diogo等[6]提出了反向更新方案.該方案雖算法簡單,但其節(jié)點依賴復(fù)雜,也沒有考慮節(jié)點規(guī)則無須更新的情況,嚴格依據(jù)新規(guī)則轉(zhuǎn)發(fā)路徑從目的節(jié)點遞歸向前更新以避免環(huán)路.因此,更新輪次多,致使更新時延長.另外,Fu等[11]提出雙向更新方案.通過尋找滿足當前更新狀態(tài)下其子節(jié)點都已更新至新規(guī)則,或者在最終狀態(tài)下其所有父節(jié)點都已經(jīng)更新至新規(guī)則這兩個條件的節(jié)點依次更新.但每次最多更新2個節(jié)點,更新輪數(shù)依然過多.針對依賴問題,Mahajan等[12]提出了最優(yōu)化更新.方案設(shè)定每個節(jié)點都具有3個狀態(tài),在保證無環(huán)的情況下,讓盡可能多的節(jié)點并行更新,從而最大程度減少更新輪次.但此方案每一輪都要全局遍歷以更新節(jié)點狀態(tài),節(jié)點搜索復(fù)雜度高.
針對分類時序更新應(yīng)用場景適用性差和更新時延長、最優(yōu)化更新計算復(fù)雜度高等問題,本文在兩者基礎(chǔ)上,提出基于分類搜索的無環(huán)更新一致性方案(Categorical Search based loop-free Consistent Update scheme,CSCU).在CSCU方案中,我們設(shè)計了一種交換機分類模型和一種環(huán)路搜索優(yōu)化模型,其中優(yōu)化模型包括環(huán)路檢測模塊和搜索模塊.兩種模型結(jié)合的更新流程可概括為:分類模型先分析所有節(jié)點的更新前后狀態(tài)并初始化; 再調(diào)用環(huán)路搜索優(yōu)化模型的環(huán)路檢測模塊獲取對應(yīng)節(jié)點集的可更新節(jié)點進行更新.最后,在未更新節(jié)點集中循環(huán)調(diào)用優(yōu)化模型的搜索模塊查找滿足條件的可更新節(jié)點,直至更新完成.
本文的主要貢獻在于:
(1)改進分類時序更新算法中的分類方式,構(gòu)建了一種新的交換機分類模型,它可以增大應(yīng)用場景的適用性和減少更新等待時延.
(2)在分類和節(jié)點依賴的基礎(chǔ)上,通過分析更新前后轉(zhuǎn)發(fā)規(guī)則的差異,構(gòu)建相應(yīng)的環(huán)路搜索優(yōu)化模型,優(yōu)化了更新的搜索計算復(fù)雜度和更新效率.
(3)在分類模型和環(huán)路搜索優(yōu)化模型的基礎(chǔ)上,提出一種基于分類搜索的更新方案,它具有更新時延短,更新效率高的優(yōu)點.
在本節(jié)中,我們通過構(gòu)建網(wǎng)絡(luò)模型和更新模型對整個SDN網(wǎng)絡(luò)的更新過程進行分析.
我們將網(wǎng)絡(luò)建模抽象為一個圖G=(N,L),其中,N是網(wǎng)絡(luò)的節(jié)點集,L是節(jié)點間的鏈路集.為了簡化,本節(jié)假設(shè)網(wǎng)絡(luò)模型為單一控制器C0和多OpenFlow交換機S={s1,…,sn-1}的模式,圖2展示了本節(jié)所述的網(wǎng)絡(luò)模型.其中,實線是交換機間轉(zhuǎn)發(fā)數(shù)據(jù)包的數(shù)據(jù)鏈路,虛線是控制器和OpenFlow交換機間的控制鏈路(也稱OpenFlow通道).
圖2 SDN網(wǎng)絡(luò)示意圖
在SDN網(wǎng)絡(luò)中,節(jié)點集N可用數(shù)學(xué)表示為:N=C∪S,其中,C是控制器集,S是交換機集.鏈路集L可定義為 L=Lcc∪Lcs∪Lss,其中,Lcc指代控制器與控制器之間的鏈路集,Lcs指代控制器和交換機間的控制鏈路集,Lss指代交換機和交換機間的傳輸鏈路.由于模型簡化為單控制器模式,因此集合Lcc為空,集合Lcs的元素個數(shù)為|S|=n-1.
交換機流表規(guī)則Ri可定義為一個三元組
網(wǎng)絡(luò)更新是對網(wǎng)絡(luò)配置的更新操作:SDN控制器生成更新消息并將其轉(zhuǎn)發(fā)給交換機,然后交換機根據(jù)此消息改變它的規(guī)則表.很明顯,更新前后涉及交換機狀態(tài)的變化.因此可將t時刻的交換機狀態(tài)定義為[2]:
其中,Ri(t)指在t時刻的交換機Si的規(guī)則集,Lcsi(t)代表t時刻與Si相關(guān)的控制鏈路集,Lssi(t)代表t時刻與Si相關(guān)的數(shù)據(jù)傳輸鏈路集.
網(wǎng)絡(luò)配置,即網(wǎng)絡(luò)中所有交換機的狀態(tài)并集,則t時刻的網(wǎng)絡(luò)配置可定義為:
網(wǎng)絡(luò)更新是對網(wǎng)絡(luò)配置的更新操作,即不同時刻的網(wǎng)絡(luò)配置的遷移.因此,網(wǎng)絡(luò)更新可定義為:
其中,Esrc(ti)代表更新前的網(wǎng)絡(luò)配置,Edst(tj)代表更新后的網(wǎng)絡(luò)配置,U指代網(wǎng)絡(luò)配置遷移過程的更新操作集.
基于OpenFlow協(xié)議中流表的組成部分,可以將數(shù)據(jù)包在交換機中的處理定義為布爾函數(shù):
其中,s代表交換機,p代表數(shù)據(jù)包; X代表匹配域,Y代表處理結(jié)果(包含動作:將數(shù)據(jù)包轉(zhuǎn)發(fā)到其他交換機或?qū)?shù)據(jù)包上傳至控制器).
數(shù)據(jù)包從進入網(wǎng)絡(luò)到離開網(wǎng)絡(luò),是數(shù)據(jù)包在交換機間的相互轉(zhuǎn)發(fā)過程.由式(4)可知,數(shù)據(jù)包在網(wǎng)絡(luò)轉(zhuǎn)發(fā)是個迭代處理過程,因此,可將數(shù)據(jù)包在網(wǎng)絡(luò)中的操作以布爾函數(shù)的形式定義為網(wǎng)絡(luò)轉(zhuǎn)發(fā)函數(shù)F(p):
其中,p指代數(shù)據(jù)包,i,j,k指代交換機編號(假設(shè)數(shù)據(jù)包在網(wǎng)絡(luò)中的傳輸路徑為i→j→k,即數(shù)據(jù)包p先在交換機Si被處理,然后根據(jù)定義(4)得到的結(jié)果,將數(shù)據(jù)包轉(zhuǎn)發(fā)到交換機Sj中進行處理,以此類推,直至轉(zhuǎn)發(fā)完成).
使用πold表示舊數(shù)據(jù)包,則舊數(shù)據(jù)包可定義為:如果一個數(shù)據(jù)包p被尚未更新的交換機處理,那么它就被標記為πold.同理,使用πnew表示新數(shù)據(jù)包,則可定義為:如果一個數(shù)據(jù)包被已更新了的交換機處理,它將被標記為πnew.因此可將網(wǎng)絡(luò)轉(zhuǎn)發(fā)函數(shù)拓展為:
其中,Fnew(p)和Fold(p)代表πnew和πold由新/舊規(guī)則集處理.
包一致性.由網(wǎng)絡(luò)轉(zhuǎn)發(fā)函數(shù)定義可得:每個數(shù)據(jù)包的傳輸函數(shù)應(yīng)該只涉及一個規(guī)則集:F(p)=Fnew(p)或F(p)=Fold(p),而不能是兩者的混合.
更新持續(xù)時間(Ud).Ud指控制器發(fā)送第一個更新消息和最后一個交換機更新完成之間的時間間隔.
更新輪次(Uround).本節(jié)假設(shè)在單個交換機上安裝的規(guī)則之間沒有沖突或者依賴關(guān)系,從而可以在單輪消息傳遞中更新交換機而不影響網(wǎng)絡(luò)一致屬性.Uround指更新過程所需的階段更新次數(shù),在一定條件下,Uround直接影響Ud,兩者成正相關(guān).每輪中,控制器更新一個交換機子集,并保證以任何順序更新該子集的交換機都能確保無環(huán)路產(chǎn)生.控制器在確認前一輪中選擇的交換機都已經(jīng)在內(nèi)存中安裝了新的規(guī)則后,再開始新一輪的更新.
節(jié)點操作復(fù)雜度(Ncp).指更新過程對交換機流表操作的復(fù)雜程度.流表規(guī)則更新操作類型和操作次數(shù)是Ncp的關(guān)鍵影響因素,會直接影響Ud和更新性能.
本節(jié)模型構(gòu)建主要為了優(yōu)化更新調(diào)度算法,提升更新性能.因此,我們可將本模型的優(yōu)化目標和約束問題描述為:
其中,式(7)為優(yōu)化目標,即通過最大程度的減少更新輪次Uround和降低節(jié)點操作復(fù)雜度Ncp來減少更新持續(xù)時間Ud.式(8)和式(9)為約束問題,其中,式(8)代表更新過程需保證不會引起轉(zhuǎn)發(fā)環(huán)路、式(9)代表更新過程需保持包級一致性.
本模型的難點在于如何設(shè)計更新調(diào)度算法,在保證更新過程無環(huán)路產(chǎn)生、數(shù)據(jù)包轉(zhuǎn)發(fā)保證一致性的前提下,盡可能的減少更新所需時間,提升更新性能.由于單輪更新不會影響網(wǎng)絡(luò)的一致屬性,因此,SDN控制器可協(xié)調(diào)交換機間的規(guī)則更新,通過設(shè)計更新算法,使更新輪次最小化,減少完成更新的所需時間.已經(jīng)證明,最小化更新輪數(shù)是NP完全問題[13].
定義Pold和Pnew分別代表Esrc(ti)下的數(shù)據(jù)原始傳輸路徑和Edst(tj)下的數(shù)據(jù)最終傳輸路徑,nexthop(s,Pold/Pnew)代表節(jié)點s在路徑Pold或Pnew的下一跳.更新過程中,配置是否更新成功受設(shè)備之間的實時交互時延、設(shè)備的實時更新操作所影響,可能會因為上述因素導(dǎo)致網(wǎng)絡(luò)中出現(xiàn)環(huán)路等問題.基于以上定義,可將方案的問題描述為:已知Esrc(ti)和Edst(tj),通過分析Pold和Pnew上的節(jié)點,在滿足式(8)和式(9)的前提下,設(shè)計更新算法,尋找更新輪數(shù)較少、更新性能較優(yōu)的操作集U,求得式(7)的最優(yōu)解.
3.2.1 CSCU方案的節(jié)點集合定義
在構(gòu)建模型過程中,本方案基于分類和節(jié)點依賴搜索思想,需要創(chuàng)建和更新以下相關(guān)集合,如表1.其中,Pnew[length-1]指代最終傳輸路徑上的最后一個節(jié)點、Ssubi代表每一輪更新后剩余的待更新節(jié)點集、rmax代表完成整個更新過程所需要的最大更新輪數(shù)、check_loop(s,Pold,Pnew)用于判斷更新節(jié)點s是否引入環(huán)路、judge_allfather(s,Pold,Pnew)用于判斷節(jié)點s的父節(jié)點是否都已經(jīng)更新至新規(guī)則.
表1 相關(guān)節(jié)點集
3.2.2 CSCU方案的流程
先給出節(jié)點依賴關(guān)系的定義:當節(jié)點Na必須在節(jié)點Nb更新完成之后才能更新,則節(jié)點Na依賴于節(jié)點Nb.另外,由于目的節(jié)點不涉及規(guī)則更新,定義為不需要更新節(jié)點.CSCU方案的更新流程如圖3所示.
圖3 CSCU更新流程
首先,CSCU方案利用節(jié)點分類模型對Esrc(ti)和Edst(tj)進行分析,通過對比Pold和Pnew節(jié)點狀態(tài),初始化表1中的節(jié)點集.
分類模型初始化后,執(zhí)行環(huán)路搜索優(yōu)化模型中的第一個模塊.調(diào)用基于拓撲排序算法的環(huán)路檢測模塊逐一檢測Snode中的全部節(jié)點—直接給節(jié)點增添新的轉(zhuǎn)發(fā)規(guī)則.如果check_loop(Ni,Pold,Pnew)=True,即不會引入環(huán)路,則將Ni添加到節(jié)點集Ti中(此時i=1).檢測完畢后,并行更新節(jié)點集Ti和Sdel_old中的節(jié)點.其中,對Ti中的節(jié)點實施以下操作:下發(fā)新規(guī)則替換舊規(guī)則,同時將節(jié)點轉(zhuǎn)移至節(jié)點集Supdated中.對于Sdel_old中的節(jié)點,直接刪除對應(yīng)的舊規(guī)則后,移除該節(jié)點.舊規(guī)則是否刪除,同樣是判斷一個節(jié)點是否已經(jīng)更新的依據(jù).Sdel_old存儲只需刪除舊規(guī)則的節(jié)點,由于節(jié)點規(guī)則失效時間不確定,如果沒有及時刪除Sdel_old中節(jié)點的舊規(guī)則,會影響方案接下來根據(jù)依賴關(guān)系搜索可更新節(jié)點的算法.當以上節(jié)點集更新完成,算法繼續(xù).
接著,調(diào)用環(huán)路搜索優(yōu)化模型中的第二個模塊.對Ni∈Snode?Supdated依次搜索可更新節(jié)點,將滿足條件Find_father(Ni)=null或judge_allfather(Ni,Pold,Pnew)=True的節(jié)點Ni加入Ti中,前面兩個條件表示當前狀態(tài)下的節(jié)點Ni無父節(jié)點或者父節(jié)點都已更新.搜索完后,并行更新Ti的節(jié)點,同時將Ti的節(jié)點轉(zhuǎn)移至Supdated中.如果Snode?Supdated≠null,則循環(huán)執(zhí)行搜索.直至Snode?Supdated=null,方案結(jié)束.
后文我們將證明,結(jié)合分類模型和環(huán)路搜索優(yōu)化模型雙模型,CSCU方案能有效提高更新效率,且具有更低的計算復(fù)雜度.
3.2.3 CSCU方案的更新示例
現(xiàn)以圖4所示拓撲為例,將網(wǎng)絡(luò)抽象為一個點對點有向圖來演示CSCU方案的更新過程.其中,實線代表網(wǎng)絡(luò)配置更新前數(shù)據(jù)轉(zhuǎn)發(fā)路徑,虛線代表更新后數(shù)據(jù)轉(zhuǎn)發(fā)路徑.更新步驟如圖4所示.
圖4 更新例子
(1)執(zhí)行節(jié)點分類模型初始化集合得:Snode={N1,N2,N3,N4,N6,N7,N9,N11},Sdel_old={N5},Sun={N8,N10},Supdated=null,Ti=null.
(2)調(diào)用環(huán)路搜索優(yōu)化模型的環(huán)路檢測模塊檢測得:T1={N1,N2,N4,N6,N11}.并行更新節(jié)點集Sdel_old和T1中的節(jié)點,對s∈T1執(zhí)行新舊規(guī)則替換并將s轉(zhuǎn)移至Supdated中.對s∈Sdel_old執(zhí)行刪除舊規(guī)則操作,并移除節(jié)點s.此時得到Supdated={N1,N2,N4,N6,N11},Sdel_old=null.
(3)然后,調(diào)用搜索模塊從Snode-Supdated依次搜索符合條件的節(jié)點得T2={N3,N7},執(zhí)行更新后,此時得到Supdated={N1,N2,N3,N4,N6,N7,N11}.
(4)循環(huán)搜索得T3={N9},執(zhí)行更新后得Snode={N1,N2,N3,N4,N6,N7,N9,N11}.很明顯,此時Snode-Supdated=null且Sdel_old=null,更新完畢.
3.2.4 與其他方案對比
以圖4為例將CSCU方案與其他方案做比較:
(1)基于分類時序更新[7]:① 控制器將交換機初始化,分成4類:入口交換機、新路徑交換機、舊路徑交換機、出口交換機.② 更新出口交換機{N10}和新路徑交換機Snew={N1,N3,N2,N4,N11,N8,N9,N7,N6},執(zhí)行插入待新增流表項操作.③ 等待一個最長端到端時延后,更新入口交換機{N1},執(zhí)行修改流表項操作.④ 等待最長端到端時延,更新舊路徑交換機Sold={N1,N2,N3,N4,N5,N6,N7,N8,N9}和出口交換機{N10},執(zhí)行刪除流表項操作,全部更新完畢.顯然,在新舊規(guī)則所涉及的交換機存在復(fù)雜關(guān)聯(lián)時,方案需要在不同階段對大量共同交換機、不需更新的交換機進行不同的流表操作,增加了交換機更新操作次數(shù),這會增加更新的等待時延.
(2)反向更新[6]:該方案所有的節(jié)點嚴格依據(jù)新規(guī)則從目的節(jié)點遞歸向前更新.由于默認目的節(jié)點不需更新,因此,所需的更新輪次=新規(guī)則涉及的節(jié)點數(shù)-1.由圖4示例可知,新規(guī)則轉(zhuǎn)發(fā)路徑涉及的節(jié)點數(shù)為10,即需要9輪才能完成更新.
(3)雙向更新[11]:依據(jù)兩個搜索條件得到{(N1,N6)→(N2,N7)→(N3,N9)→(N4,N8)→(N5,N11)},共需要5輪才能完成更新.
(4)最優(yōu)化更新[12]:依次加入新規(guī)則對所有節(jié)點進行無環(huán)檢測,找到的依賴森林根節(jié)點有{N1,N2,N4,N5,N6,N11},分別刪除其舊規(guī)則,再通過無環(huán)檢測尋找其子節(jié)點,得到依賴樹有:N2→N3,N6→N7→N9,故整個依賴森林為{N1,N2→N3,N4,N5,N6→N7→N9,N11}.其中,依賴森林中依賴樹的最大高度為所需更新輪次,即完成更新共需要3輪.
本文提出的CSCU方案:執(zhí)行分類模型后,通過執(zhí)行環(huán)路搜索優(yōu)化模型的無環(huán)檢測模塊,得到的T1={N1,N2,N4,N6,N11},再循環(huán)執(zhí)行搜索模塊獲得T2={N3,N7},T3={N9}.所以,經(jīng)過3輪即可完成更新.
無環(huán)性是方案的主要研究點,證明如下:
(1)首先,環(huán)路搜索優(yōu)化模型中的無環(huán)檢測模塊不會引入環(huán)路.事實上,在更新過程中,基于拓撲排序的無環(huán)檢測模塊對節(jié)點集Snode中的節(jié)點進行檢測,是根據(jù)直接增加新規(guī)則是否會產(chǎn)生環(huán)路來決定.若產(chǎn)生環(huán)路則保持狀態(tài)不變,否則就將它逐一添加進節(jié)點集Ti中.然后并行更新Ti和Sdel_old中的節(jié)點:對s∈T1執(zhí)行新舊規(guī)則替換并加入Supdated中,對s∈Sdel_old執(zhí)行舊規(guī)則刪除.因為節(jié)點只有通過無環(huán)檢測才確定是否更新,并行更新Ti中的節(jié)點的過程顯然不會引入環(huán)路.另外,對s∈Sdel_old執(zhí)行刪除舊規(guī)則的操作,只是釋放相應(yīng)的交換機內(nèi)存空間,不會引起無環(huán).所以,無環(huán)檢測更新過程不會引入環(huán)路.
(2)其次,環(huán)路搜索優(yōu)化模型中的循環(huán)搜索模塊也不會引入環(huán)路.事實上,按默認方法更新至最終狀態(tài)的路徑是不存在環(huán)路的.現(xiàn)假設(shè)當前狀態(tài)下有局部鏈路N1→N2→Ncur,Ncur尚未更新,其父節(jié)點N1,N2都已更新.更新Ncur,形成環(huán)路Ncur→N1→N2→Ncur,而根據(jù)假設(shè),其父節(jié)點都已更新,即整個環(huán)路鏈路涉及的節(jié)點都已更新至新規(guī)則.該環(huán)路是整個更新至最終狀態(tài)的一個局部鏈路,則與最終狀態(tài)下的新規(guī)則中無環(huán)路的矛盾,所以更新Ncur不會引入環(huán)路.循環(huán)搜索更新,直至Snode-Supdated=null時更新完畢,整個更新過程都不會出現(xiàn)環(huán)路.
本節(jié)將從適用性、更新持續(xù)時間Ud、更新節(jié)點操作復(fù)雜度Ncp、更新算法計算復(fù)雜度4個方面進行比較.適用性,指方案場景適用范圍.Ud為整個更新過程每個階段所用時間總和,集中體現(xiàn)于更新過程的所需輪次Uround,更新所需輪次越多,等待更新的時間越長,Ud越大.Ncp指更新過程對節(jié)點操作的復(fù)雜程度,集中體現(xiàn)于:需在不同更新階段執(zhí)行不同更新操作的節(jié)點越多、對同一節(jié)點更新操作的次數(shù)越多,更新等待時延就越長,Ud越大.更新算法計算復(fù)雜度,指切換更新規(guī)則過程中相應(yīng)邏輯功能計算的復(fù)雜性.
本節(jié)將本文方案與第2節(jié)的相關(guān)研究進行比較,結(jié)果如表2所示.
表2 本文與相關(guān)方案比較
(1)適用性.不管網(wǎng)絡(luò)拓撲復(fù)雜與否,分類時序更新都依據(jù)新舊轉(zhuǎn)發(fā)路徑上的節(jié)點嚴格設(shè)定階段進行更新.若網(wǎng)絡(luò)配置簡單,使用該方案反而降低更新效率.若配置更新存在大量的共同交換機,則需要分別在不同的更新階段,對同一交換機進行不同的流表操作,更新操作量增加.因此,分類時序存在一定的應(yīng)用場景局限性,適用性較差.本方案在分類初始化基礎(chǔ)上,設(shè)計能減少更新輪數(shù)的環(huán)路搜索優(yōu)化模型,無論拓撲結(jié)構(gòu)復(fù)雜與否,本方案更新效率都有保證.
(2)更新持續(xù)時間Ud.分類時序更新設(shè)定固定階段更新,下一個階段的節(jié)點更新必須等待上一個階段的節(jié)點更新完畢才能進行,更新輪次固定.若更新配置復(fù)雜,還會因為等待舊包流出網(wǎng)絡(luò)等待端到端的最長時延,增加更新時間.反向更新和雙向更新節(jié)點依賴復(fù)雜,導(dǎo)致更新輪次多,更新時延高.本方案結(jié)合分類模型和環(huán)路搜索優(yōu)化模型,平均更新輪次接近最優(yōu)化更新,更新持續(xù)時間短.
(3)更新節(jié)點操作復(fù)雜度Ncp.如3.2.4節(jié)所述,更新配置復(fù)雜時,分類時序更新需在不同階段對大量節(jié)點進行不同的流表更新操作,大量節(jié)點更新操作次數(shù)多.因此,方案的更新節(jié)點操作復(fù)雜程度高,更新等待的時延長.雖說細化流表項操作在更新某一階段能使新舊數(shù)據(jù)包并行傳輸,一定程度上降低控制器負載.但與其產(chǎn)生的等待時延相比,時間開銷更為重要.本方案只需針對相應(yīng)節(jié)點集執(zhí)行相應(yīng)規(guī)則操作,操作復(fù)雜度低,等待時延少,能進一步減少Ud.
(4)算法計算復(fù)雜度.假設(shè)使用鄰接矩陣存儲節(jié)點信息.最優(yōu)化更新中,初始化所有節(jié)點狀態(tài)、加入新規(guī)則檢測是否引入環(huán)路都為O(n),在狀態(tài)轉(zhuǎn)換過程中,更新節(jié)點狀態(tài)和下一輪節(jié)點的判環(huán)操作也都為O(n).因此,最優(yōu)化更新的時間復(fù)雜度為O(n4).CSCU方案中,分類初始化和對待更新的節(jié)點判環(huán)操作的總時間復(fù)雜度為O(n2),搜索可更新的節(jié)點為O(n),因此總的時間復(fù)雜度為O(n3).而基于分類時序更新只需遍歷矩陣進行分類,然后在不同節(jié)點進行更新,時間復(fù)雜度為O(n2).
為了分析比較相關(guān)方案在不同情況下更新的效果,本文基于自主搭建的SDN仿真平臺進行模擬實驗.平臺所用設(shè)備為Ubuntu 16.04操作系統(tǒng),RYU開源控制器和mininet網(wǎng)絡(luò)仿真器.仿真實驗設(shè)定實驗拓撲節(jié)點數(shù),設(shè)定源點和目的節(jié)點.每次實驗通過隨機更改相鄰節(jié)點的邊權(quán)值來模擬網(wǎng)絡(luò)拓撲結(jié)構(gòu)的變化,相鄰節(jié)點的邊權(quán)值服從(1-1000)的均勻分布.權(quán)值確定后,再通過OSPF算法獲取源節(jié)點到目的節(jié)點的路徑.
① 關(guān)于更新輪次和更新持續(xù)時間Ud的關(guān)系,在上一節(jié)已經(jīng)有詳細解釋.在此,通過300次仿真實驗測試,對相關(guān)研究方案每一次實驗的更新輪次進行分析對比,結(jié)果如圖5所示.
圖5 不同方案下的更新輪次情況
實驗結(jié)果顯示,反向更新的所需的更新輪次普遍多于其它方案,這是因為反向更新只與新的轉(zhuǎn)發(fā)規(guī)則相關(guān),更新輪次=新規(guī)則轉(zhuǎn)發(fā)相關(guān)節(jié)點-1.由于分類時序更新嚴格設(shè)計更新階段,因此更新輪次固定.本方案的更新輪次接近最優(yōu)化更新,比其他方案都少.
② 配置更新交叉程度.指配置更新過程中,同時在新、舊路徑上的交換機占與更新相關(guān)的交換機總數(shù)的比例.配置更新交叉程度的大小影響CSCU方案的更新性能.更新過程中,在新路徑上而不在舊路徑上的交換機數(shù)越多,涉及舊規(guī)則的交換機就越少,就越難形成回路.因此,更新輪次就越少,更新性能越好.相反則需要更多的輪數(shù)來完成更新.
至此,就配置更新交叉程度對本方案更新輪次的影響進行實驗分析.由于交叉程度低的時候形成環(huán)路的可能性低,所以交叉程度為0和25%的結(jié)果參考價值不大.因此本實驗只對交叉程度為50%、75%、100%的情況進行實驗,結(jié)果如圖6所示.
圖6 CSCU方案在不同配置交叉程度下的更新輪次情況
為了更好的與分類時序更新對比分析,綜合CSCU方案在不同交叉程度更新情況的實驗結(jié)果,求得配置更新不同交叉程度下的平均更新輪次.實驗結(jié)果表明,本方案在配置更新交叉程度為0、50%、75%、100%下的平均更新輪次都比分類時序更新少,結(jié)果如圖7所示,其中,0、50%、75%、100%分別代表CSCU方案的配置更新交叉程度,timing代表分類時序更新.
圖7 不同交叉程度下與分類時序更新的比較
③ 更新過程的節(jié)點操作復(fù)雜度直接體現(xiàn)于對同一交換機的流表項操作次數(shù)大于1的交換機數(shù).用num_large_1表示對同一交換機的流表項操作次數(shù)大于1的交換機數(shù).顯然num_large_1越大,更新的節(jié)點總操作次數(shù)越多,更新過程的節(jié)點操作復(fù)雜度就越高.針對節(jié)點操作復(fù)雜度,本節(jié)設(shè)計多次實驗,假設(shè)實驗的節(jié)點數(shù)固定為20、新舊路徑跳數(shù)相同.對分類時序更新進行測試分析,得出num_large_1的平均值隨路徑跳數(shù)變化的情況,實驗結(jié)果如圖8所示.實驗設(shè)定新舊路徑源、目的節(jié)點,所以num_large_1≥2.
圖8 不同路徑跳數(shù)的更新節(jié)點操作復(fù)雜度
分析實驗可得,網(wǎng)絡(luò)節(jié)點數(shù)一定的情況下,num_large_1隨著路徑跳數(shù)的增大而增大.即隨著路徑跳數(shù)的增多,同是新舊路徑上的節(jié)點的節(jié)點數(shù)就越多,對所有節(jié)點的總操作次數(shù)就越多.因此,更新過程的節(jié)點操作復(fù)雜度就越高.而本方案經(jīng)分類初始化后,與更新配置復(fù)雜度無關(guān),更新節(jié)點操作復(fù)雜度低.
綜上所述,相較于分類時序更新,基于分類搜索的無環(huán)更新一致性方案有更好的場景適用性、更低的節(jié)點操作復(fù)雜度Ncp和更少的更新輪次Uround,能夠在滿足模型約束條件(8)和(9)的前提下有效減少更新持續(xù)時間Ud、提升更新效率,實現(xiàn)模型的優(yōu)化目標.另外,在更新輪次方面,本方案相對于其他相關(guān)研究方案都有著不同方面的性能提升.
本文根據(jù)在研項目的研究目標,對SDN流表更新一致性的相關(guān)研究成果進行了詳細的研究.并針對基于分類時序更新方案存在應(yīng)用場景適用性差、更新時延長和節(jié)點更新復(fù)雜程度高等問題,提出了一種基于分類搜索的無環(huán)更新方案.隨后,本文通過更新示例的展示,在適用性、更新時間等性能方面對該方案和相關(guān)研究方案進行了對比分析.此外,本文對該方案的無環(huán)一致性更新進行了理論分析,證明了方案的可行性.最后,通過搭建SDN仿真平臺進行了仿真實驗.仿真實驗針對更新輪次對該方案與相關(guān)研究方案進行了分析對比,也針對不同配置更新交叉程度和節(jié)點操作復(fù)雜度單獨跟分類時序方案進行了對比.仿真結(jié)果表明,CSCU方案具備應(yīng)用場景適用性高、節(jié)點更新操作復(fù)雜度低的優(yōu)點,是一種能夠有效的減少更新所需輪次、更新時延和降低計算時間復(fù)雜度的高效率更新方案.