本發(fā)明涉及軟件定義網(wǎng)絡(luò)技術(shù)領(lǐng)域,更具體地,涉及一種基于堆結(jié)構(gòu)來(lái)擴(kuò)張軟件定義網(wǎng)絡(luò)的方法。
背景技術(shù):
目前,軟件定義網(wǎng)絡(luò)(Software Defined Network,SDN),將控制層和數(shù)據(jù)層分離,給傳統(tǒng)的網(wǎng)絡(luò)結(jié)構(gòu)帶來(lái)了革命性的改變。通過打破傳統(tǒng)的網(wǎng)絡(luò)設(shè)計(jì)模式,軟件定義網(wǎng)絡(luò)簡(jiǎn)化了網(wǎng)絡(luò)的管理并且能夠根據(jù)特定的需求來(lái)定義和構(gòu)建具體的網(wǎng)絡(luò)。一方面,控制層完全的從數(shù)據(jù)層中剝離出來(lái),將整個(gè)網(wǎng)絡(luò)的智能和計(jì)算能力集中到了控制器當(dāng)中,另一方面,軟件定義網(wǎng)絡(luò)提供開放的可編程接口,提升了網(wǎng)絡(luò)的靈活性和可管理性。與此同時(shí),OpenFlow作為網(wǎng)絡(luò)協(xié)議,提供了軟件定義網(wǎng)絡(luò)的接口,并定義了網(wǎng)絡(luò)的架構(gòu)和兩個(gè)層之間的通信機(jī)制。數(shù)據(jù)層不再負(fù)責(zé)繁重的路由計(jì)算工作,而只需要負(fù)責(zé)由控制器指派的數(shù)據(jù)包轉(zhuǎn)發(fā)。
雖然數(shù)控分離給軟件定義網(wǎng)絡(luò)帶來(lái)了很多優(yōu)勢(shì)和好處,但是同時(shí)由于僅有一個(gè)龐大的控制點(diǎn)來(lái)管理整個(gè)網(wǎng)絡(luò)產(chǎn)生了很多問題,其中最顯著的莫過于其給軟件定義網(wǎng)絡(luò)擴(kuò)展時(shí)帶來(lái)的諸多問題。一個(gè)高度中心化的控制器總會(huì)或多或少的受到其自身物理資源的約束,只能與有限個(gè)數(shù)據(jù)層中的交換機(jī)或路由器直接相連,因此,從控制層的角度來(lái)看,軟件定義網(wǎng)絡(luò)很難擴(kuò)展。擴(kuò)展軟件定義網(wǎng)絡(luò)不僅需要考慮形成該分層網(wǎng)絡(luò)時(shí)控制層和數(shù)據(jù)層之間的邏輯連接,還需要考慮擴(kuò)展網(wǎng)絡(luò)所帶來(lái)的額外開銷。因此,控制層的可擴(kuò)展性成為了阻礙軟件定義技術(shù)發(fā)展的主要挑戰(zhàn)之一。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明為克服上述問題或者至少部分地解決上述問題,提供一種基于堆結(jié)構(gòu)擴(kuò)張軟件定義網(wǎng)絡(luò)的方法。
根據(jù)本發(fā)明的一個(gè)方面,提供一種基于堆結(jié)構(gòu)擴(kuò)張軟件定義網(wǎng)絡(luò)的方法,其特征在于,包括:
步驟1,將網(wǎng)絡(luò)系統(tǒng)中的數(shù)據(jù)層抽象為多層次的斐波那契堆結(jié)構(gòu);
步驟2,在所述得到的多層次斐波那契堆中依照自上而下順序,利用雙權(quán)重?cái)U(kuò)展Dijkstra路由算法解析得到最短路由路徑。
本申請(qǐng)?zhí)岢鲆环N基于堆結(jié)構(gòu)擴(kuò)張軟件定義網(wǎng)絡(luò)的方法,有效的化簡(jiǎn)了軟件定義網(wǎng)絡(luò)的擴(kuò)展過程,并結(jié)合堆結(jié)構(gòu)改良了網(wǎng)絡(luò)中的最短路由算法,同時(shí)有效的降低了各節(jié)點(diǎn)運(yùn)算設(shè)備的負(fù)擔(dān)。
附圖說明
圖1為根據(jù)本發(fā)明實(shí)施例一種基于堆結(jié)構(gòu)擴(kuò)張軟件定義網(wǎng)絡(luò)的方法的整體流程示意圖;
圖2為根據(jù)本發(fā)明實(shí)施例一種基于堆結(jié)構(gòu)擴(kuò)張軟件定義網(wǎng)絡(luò)步驟1中的流程示意圖;
圖3為根據(jù)本發(fā)明實(shí)施例一種基于堆結(jié)構(gòu)擴(kuò)張軟件定義網(wǎng)絡(luò)步驟1中經(jīng)典Dijkstra算法、堆優(yōu)化后Dijkstra算法和雙權(quán)重?cái)U(kuò)展Dijkstra路由算法的收斂時(shí)間對(duì)比示意圖;
圖4為根據(jù)本發(fā)明實(shí)施例一種基于堆結(jié)構(gòu)擴(kuò)張軟件定義網(wǎng)絡(luò)步驟1中經(jīng)典Dijkstra算法、堆優(yōu)化后Dijkstra算法和雙權(quán)重?cái)U(kuò)展Dijkstra路由算法的收斂時(shí)間對(duì)比示意圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明的具體實(shí)施方式作進(jìn)一步詳細(xì)描述。以下實(shí)施例用于說明本發(fā)明,但不用來(lái)限制本發(fā)明的范圍。
如圖1,本發(fā)明一個(gè)具體實(shí)施例中,示出一種基于堆結(jié)構(gòu)擴(kuò)張軟件定義網(wǎng)絡(luò)的方法總體流程示意圖。整體來(lái)說,包括:步驟1,將網(wǎng)絡(luò)系統(tǒng)中的數(shù)據(jù)層抽象為多層次的斐波那契堆結(jié)構(gòu);步驟2,在所述得到的多層次斐波那契堆中依照自上而下順序,利用雙權(quán)重?cái)U(kuò)展Dijkstra路由算法解析得到最短路由路徑。
如圖1,本發(fā)明另一個(gè)具體實(shí)施例中,一種基于堆結(jié)構(gòu)擴(kuò)張軟件定義網(wǎng)絡(luò)的方法,所述步驟1還包括:步驟101,基于鄰近原則將網(wǎng)絡(luò)系統(tǒng)中的數(shù)據(jù)層抽象為若干個(gè)集合,即:將與源節(jié)點(diǎn)直接相連的節(jié)點(diǎn)劃分為一個(gè)集合S,與目的節(jié)點(diǎn)直接相連的節(jié)點(diǎn)劃分為另一個(gè)集合D;步驟102,基于所述集合S、集合D,以遞歸方式進(jìn)行繼續(xù)劃分,完成網(wǎng)絡(luò)系統(tǒng)中其余數(shù)據(jù)層的抽象。
本發(fā)明另一個(gè)具體實(shí)施例中,一種基于堆結(jié)構(gòu)擴(kuò)張軟件定義網(wǎng)絡(luò)的方法,所述步驟2中解析得到的路由路徑由物理交換機(jī)和路由器組成。
本發(fā)明另一個(gè)具體實(shí)施例中,一種基于堆結(jié)構(gòu)擴(kuò)張軟件定義網(wǎng)絡(luò)的方法,所述步驟2中利用雙權(quán)重?cái)U(kuò)展Dijkstra路由算法解析得到一條路由路徑還包括:賦予各節(jié)點(diǎn)權(quán)重值,當(dāng)每次計(jì)算下一跳時(shí)將各待加入節(jié)點(diǎn)權(quán)重值與鏈路權(quán)重值一并納入考量,并且在完成一次計(jì)算后被加入路徑的該節(jié)點(diǎn)的權(quán)重值。
本發(fā)明另一個(gè)具體實(shí)施例中,一種基于堆結(jié)構(gòu)擴(kuò)張軟件定義網(wǎng)絡(luò)的方法,所述步驟2中在所述得到的多層次斐波那契堆中依照自上而下順序,利用雙權(quán)重?cái)U(kuò)展Dijkstra路由算法解析得到一條路由路徑還包括:步驟201,從所述得到的多層次斐波那契堆中得到一個(gè)無(wú)向連通圖G=(V,E),其中V為各個(gè)節(jié)點(diǎn)集合,E為節(jié)點(diǎn)間鏈路集合;步驟202,以G=(V,E)形式表示的數(shù)據(jù)層結(jié)構(gòu)、各鏈路權(quán)重值、數(shù)據(jù)層各節(jié)點(diǎn)權(quán)重值和目的節(jié)點(diǎn)作為Dijkstra算法輸入數(shù)據(jù)計(jì)算得到所述最短路由路徑。
本發(fā)明另一個(gè)具體實(shí)施例中,一種基于堆結(jié)構(gòu)擴(kuò)張軟件定義網(wǎng)絡(luò)的方法,所述以計(jì)算從v0到其他各節(jié)點(diǎn)的最短路徑為例。
首先,令S=(V0),T=V-S={其余頂點(diǎn)}。T中頂點(diǎn)之間若存在<vi,vj>即vi到vj的鏈路,則d(vi,vj)為<vi,vj>間鏈路的權(quán)值,若不存在<vi,vj>,d(vi,vj)為∞。
然后,從T中選取一個(gè)其自身節(jié)點(diǎn)權(quán)值與S中頂點(diǎn)有關(guān)聯(lián)邊且兩權(quán)值之和為最小的頂點(diǎn)W,加入到S中。此步驟中提取與前向節(jié)點(diǎn)有關(guān)聯(lián)且鏈路權(quán)重值為最小的操作采用的是斐波那契堆操作中的提取(EXTRACT)操作。
最后,對(duì)其余T中頂點(diǎn)的距離值進(jìn)行修改:若加進(jìn)W作中間頂點(diǎn),從v0到vi的距離值縮短,則修改此距離值。若將vi加入到路徑中,則更新vi節(jié)點(diǎn)的權(quán)值nw(vi)為nw(vi)'。更新的方法是:
nw(vi)'=nw(vi)+const,
其中,const為一個(gè)固定的值,用于權(quán)衡網(wǎng)絡(luò)各節(jié)點(diǎn)的負(fù)載情況。
重復(fù)上述步驟,直到S中包含所有頂點(diǎn),即W=V為止。
本發(fā)明另一個(gè)具體實(shí)施例中,一種基于堆結(jié)構(gòu)擴(kuò)張軟件定義網(wǎng)絡(luò)的方法,所述所述步驟202中各節(jié)點(diǎn)權(quán)重值還包括:
其中v為集合V中的節(jié)點(diǎn),F(xiàn)low(v)為所有經(jīng)過節(jié)點(diǎn)v的數(shù)據(jù)流集合,Capacity(v)為節(jié)點(diǎn)v的資源容量,Bits(f)為流f由節(jié)點(diǎn)v處理的字節(jié)數(shù),nw_penalty_coeff為基于貝葉斯平均風(fēng)險(xiǎn)最小理論的懲罰因子。
本發(fā)明另一個(gè)具體實(shí)施例中,一種基于堆結(jié)構(gòu)擴(kuò)張軟件定義網(wǎng)絡(luò)的方法,所述所述步驟202中邊權(quán)重值還包括:
其中e為幾何E中的鏈路,F(xiàn)low(e)為所有經(jīng)過鏈路e的數(shù)據(jù)流集合,定義Bandwidth(e)為鏈路e的帶寬,Bits(f)表示流f由節(jié)點(diǎn)v處理的字節(jié)數(shù),nw_penalty_coeff為基于貝葉斯平均風(fēng)險(xiǎn)最小理論的懲罰因子。
本發(fā)明另一個(gè)具體實(shí)施例中,一種基于堆結(jié)構(gòu)擴(kuò)張軟件定義網(wǎng)絡(luò)的方法,所述nw_penalty_coeff和ew_penalty_coeff為和為1的正常數(shù),在每次計(jì)算路由路徑時(shí)設(shè)定。
本發(fā)明另一個(gè)具體實(shí)施例中,一種基于堆結(jié)構(gòu)擴(kuò)張軟件定義網(wǎng)絡(luò)的方法,所述nw_penalty_coeff和ew_penalty_coeff設(shè)定規(guī)則為:當(dāng)網(wǎng)絡(luò)中的某個(gè)節(jié)點(diǎn)處于繁忙狀態(tài)而各條鏈路相對(duì)空閑時(shí),應(yīng)當(dāng)設(shè)定nw_penalty_coeff大于ew_penalty_coeff,反之,則應(yīng)當(dāng)設(shè)定nw_penalty_coeff小于ew_penalty_coeff。
本發(fā)明另一個(gè)具體實(shí)施例中,一種基于堆結(jié)構(gòu)擴(kuò)張軟件定義網(wǎng)絡(luò)的方法,所述雙權(quán)重?cái)U(kuò)展Dijkstra路由算法以偽代碼最終表示為:
其中INSERT和EXTRACT均為斐波那契堆中表中的插入和提取操作。
本發(fā)明另一個(gè)具體實(shí)施例中,一種基于堆結(jié)構(gòu)擴(kuò)張軟件定義網(wǎng)絡(luò)的方法,為了對(duì)本發(fā)明效果進(jìn)行說明,下面采用計(jì)算機(jī)仿真的方式對(duì)發(fā)明的基于LEO衛(wèi)星網(wǎng)絡(luò)的低復(fù)雜度負(fù)載均衡路由算法進(jìn)行建模,并通過賦值實(shí)現(xiàn)了對(duì)真實(shí)場(chǎng)景的模擬。具體過程分以下四個(gè)步驟進(jìn)行:
(1)仿真場(chǎng)景模擬
仿真場(chǎng)景首先生成隨機(jī)圖來(lái)模擬一個(gè)軟件定義網(wǎng)絡(luò)的數(shù)據(jù)層拓?fù)?。網(wǎng)絡(luò)中各節(jié)點(diǎn)和邊的權(quán)值為服從區(qū)間[0,100]均勻分布產(chǎn)生的隨機(jī)數(shù)。在產(chǎn)生隨機(jī)拓?fù)鋾r(shí),輸入整數(shù)n位整個(gè)拓?fù)涞墓?jié)點(diǎn)數(shù),輸入d為0到1間的正小數(shù),作為拓?fù)涞拿芏取?/p>
(2)生成一個(gè)n×n的矩陣M。
M的主對(duì)角線元素設(shè)為0,其余各元素的值為從服從區(qū)間[0,100]均勻分布中生成的隨機(jī)數(shù)。
(3)接著,生成一個(gè)n×n的連通矩陣C,其各元素值為0或者1。
在生成連通矩陣C時(shí),為給其元素Ci,j賦值,首先從服從區(qū)間[0,1]的均勻分布中生成一個(gè)隨機(jī)數(shù)t,若t<d,則有Ci,j=0,否則Ci,j=1。
(4)獲得鏈路權(quán)值矩陣W。
將最后得到的矩陣M與連通矩陣C做點(diǎn)乘運(yùn)算,得到鏈路權(quán)值矩陣W。即:wi,j=mi,j×ci,j,其中wi,j為矩陣W第i行第j列的元素,mi,j為矩陣M第i行第j列的元素,ci,j為矩陣C第i行第j列的元素。若有ci,j=0,則將wi,j的值設(shè)為無(wú)窮大inf。鏈路權(quán)值矩陣W中各元素wi,j即表示鏈路<vi,vj>的權(quán)值。
(5)生成各節(jié)點(diǎn)的權(quán)值向量N。
生成一個(gè)1×n的向量N,其中第i個(gè)元素的值為從服從區(qū)間[20,50]的均勻分布生成的隨機(jī)數(shù),作為節(jié)點(diǎn)i的權(quán)值。
(6)若生成的隨機(jī)拓?fù)洳皇且粋€(gè)連通圖,重復(fù)上述步驟,直到生成的是一個(gè)連通圖。
圖3為當(dāng)d設(shè)為0.03,n分別設(shè)為100,200,300,400,500,600,700,800,1000個(gè)節(jié)點(diǎn)時(shí),經(jīng)典Dijkstra算法(Classical Dij algorithm)、堆優(yōu)化后Dijkstra算法(Fibonacci Heap optimized Dij algorithm)和雙權(quán)重?cái)U(kuò)展Dijkstra路由算法(The propsed algorithm)收斂時(shí)間對(duì)比示意圖。
圖4位當(dāng)d設(shè)為0.09,n分別設(shè)為100,200,300,400,500,600,700,800,1000個(gè)節(jié)點(diǎn)時(shí),經(jīng)典Dijkstra算法(Classical Dij algorithm)、堆優(yōu)化后Dijkstra算法(Fibonacci Heap optimized Dij algorithm)和雙權(quán)重?cái)U(kuò)展Dijkstra路由算法(The propsed algorithm)收斂時(shí)間對(duì)比示意圖。
(7)時(shí)間復(fù)雜度比較
與時(shí)間復(fù)雜度為O(n2)的經(jīng)典Dijkstra算法對(duì)比,本發(fā)明中提出動(dòng)態(tài)雙權(quán)值擴(kuò)展Dijkstra路由算法能夠以時(shí)間復(fù)雜度為O(nlg(n))更高效地計(jì)算出兩點(diǎn)間的最佳路徑,減小計(jì)算復(fù)雜度,減輕各節(jié)點(diǎn)運(yùn)算設(shè)備的負(fù)擔(dān)。
最后,本申請(qǐng)的方法僅為較佳的實(shí)施方案,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。