本發明涉及通信技術領域,更具體地,涉及一種基于最小堆的軟件定義網絡擴展方法。
背景技術:
軟件定義網絡(Software Defined Network,SDN),是由Emulex提出的一種新型網絡創新架構,其核心技術OpenFlow通過將網絡設備控制面與數據面分離開來,從而實現了網絡流量的靈活控制,為核心網絡及應用的創新提供了良好的平臺。
由于傳統的網絡設備(交換機、路由器)的固件是由設備制造商鎖定和控制,所以SDN希望將網絡控制與物理網絡拓撲分離,從而擺脫硬件對網絡架構的限制。這樣企業便可以像升級、安裝軟件一樣對網絡架構進行修改,滿足企業對整個網站架構進行調整、擴容或升級。而底層的交換機、路由器等硬件則無需替換,節省大量的成本的同時,網絡架構迭代周期將大大縮短。
軟件定義網絡是最近幾年網絡研究領域的熱點,它分離了網絡的控制平面和數據平面,而控制平面是軟件定義網絡的大腦,其能力極大地影響著軟件定義網絡網絡的可拓展性。目前針對軟件定義網絡可拓展性的研究已經非常火熱,對應的解決方案也已經有不少。根據控制器數目的不同,解決方案可以分為如下兩類:單控制器節點的性能拓展以及部署多控制器系統。根據控制器系統中控制器的種類異同可以將方案分為分布式控制器和東西向接口協議兩種解決方案。但是并沒有解決方案結合路由算法來優化存儲結構,從而擴展網絡。
技術實現要素:
本發明提供一種克服上述問題或者至少部分地解決上述問題的基于最小堆的軟件定義網絡擴展方法,在網絡擴展中采用最小堆,利用最小堆的特點可靈活的向網絡中添加節點或多個節點形成的堆,并且基于最小堆優化的路由算法明顯降低了時間復雜度。
根據本發明的一個方面,提供一種軟件定義網絡擴展方法,包括以下步驟:
S1、獲取網絡拓撲結構,并將全網構造成一個或多個最小堆;
S2、將新加入的網絡與最小堆合并至一個堆,實現網絡的擴展。
作為優選的,所述步驟S1具體包括:
S11、將軟件定義網絡中的Floodlight作為控制器,Mininet作為網絡模擬器構造網絡;
S12、Floodlight與Mininet建立連接從得到網絡的拓撲結構;
S13、建立一個空的最小堆,將拓撲結構的每個節點插入堆,構成初始的最小堆。
作為優選的,所述步驟S13中,每一個最小堆包括最小鍵指針,每一個節點包含父指針、左孩子指針和右孩子指針。
作為優選的,所述步驟S2具體包括:
利用最小堆的插入算法將新加入的網絡節點與原有堆合并至一個堆,實現網絡的擴展;
利用最小堆的合并算法將新加入的堆與原有堆合并至一個堆,實現網絡的擴展。
作為優選的,所述步驟S2中,插入網絡節點方法具體包括,將待插入的節點x的所有指針都初始為空,將x插入堆的根鏈表中,若堆的根節點為空或根節點的值大于x的值,則調整堆的結構,將插入節點作為堆的節點。
作為優選的,所述步驟S2中,合并新加入的堆的方法包括:利用最小堆的堆合并算法,將需合并的兩個堆的兩根表串聯,并確定一個新的最小結點。
作為優選的,合并新加入的堆的方法具體包括:建立一個空的最小堆H,將待合并堆H1的根節點賦給H的根節點,連接H和待合并堆H2的根列表;若H1的根節點為空,H2的根節點不為空并且H2的根節點的值不小于H1的根節點的值,則將H的根節點調整為H2的根節點,合并完的堆為H。
與現有技術相比,本發明的有益效果在于:本發明利用軟件定義網絡中控制器能獲取網絡拓撲結構的特點,將全網構造成一個或多個最小堆;利用最小堆的插入算法可將新加入的網絡節點與原有堆合并至一個堆,從而實現網絡的擴展;通過優化軟件定義網絡的數據結構,在網絡擴展中采用最小堆,利用最小堆的特點可靈活的向網絡中添加節點或多個節點形成的堆,并且基于最小堆優化的路由算法明顯降低了時間復雜度,可將新加入的堆與原有堆合并至一個堆,從而實現網絡的擴展。
附圖說明
圖1為本發明實施例的方法流程框圖;
圖2為本發明實施例的最小堆示意圖;
圖3是本發明實施例的網絡擴展方法示意圖;
圖4是本發明實施例中網絡密度為0.3時,本發明的網絡擴展方法與傳統方法運行時間對比示意圖;
圖5是本發明實施例中網絡密度為0.6時,本發明的網絡擴展方法與傳統方法運行時間對比示意圖;
圖6是本發明實施例中網絡密度為0.6時,本發明的網絡擴展方法與傳統方法運行時間對比示意圖。
具體實施方式
下面結合附圖和實施例,對本發明的具體實施方式作進一步詳細描述。以下實施例用于說明本發明,但不用來限制本發明的范圍。
圖1示出了一種基于最小堆的軟件定義網絡擴展方法,包括以下步驟:
S1、獲取網絡拓撲結構的特點并將全網構造成一個或多個最小堆;通過軟件定義網絡中控制器能獲取網絡拓撲結構的特點,將全網構成一個或多個最小堆;
S2、將新加入的網絡與原有堆合并至一個堆,實現網絡的擴展。
所述步驟S1具體包括:
S11、將軟件定義網絡中的Floodlight作為控制器,Mininet作為網絡模擬器構造網絡;
S12、Floodlight與Mininet建立連接從得到網絡的拓撲結構;
S13、建立一個空的最小堆,將拓撲結構的每個節點插入堆,構成初始的最小堆。
如圖2所示,最小堆H.min由一組最小堆有序樹構成。每個節點x包含一個指向其雙親的指針和一個指向其中一個孩子的指針。x的所有孩子連接成一個雙循環鏈表,稱為x-children表。表中的每一個孩子有兩個指針,分別指向其左兄弟和右兄弟。所有的樹根節點與其左右指針連接成一個雙循環鏈表,稱為堆的根表H。在斐波那契堆中應用雙循環鏈表有兩點優勢:第一,從雙循環鏈表中刪除一個節點僅需要時間0(1);第二,對給定的兩個鏈表,它們可以在時間0(1)內連接成一個雙循環鏈表。
在本實施例中,所述步驟S2包括:
利用最小堆的插入算法將新加入的網絡節點與原有堆合并至一個堆,實現網絡的擴展;利用最小堆的插入算法,將待插入節點的各域初始化并賦值,構造自身的環形雙向鏈表,將該節點加入到堆的根表中;
利用最小堆的合并算法將新加入的堆與原有堆合并至一個堆,實現網絡的擴展。
插入網絡節點程序如下列所示:
首先將待插入的節點x的所有指針都初始為空,將x插入堆的根鏈表中,如果堆的根節點為空或是根節點的值大于x的值,則調整堆結構,將插入節點作為堆的根節點。
如圖3所示,合并新加入的堆的方法包括:利用最小堆的堆合并算法,將需合并的兩個堆的兩根表串聯,并確定一個新的最小結點。
建立一個空的最小堆H,將待合并堆H1的根節點賦給H的根節點,連接H和待合并堆H2的根列表;若H1的根節點為空,H2的根節點不為空并且H2的根節點的值不小于H1的根節點的值,則將H的根節點調整為H2的根節點,合并完的堆為H。
圖4、5、6分別是當網絡密度分別為0.3、0.6、0.9時,基于最小堆優化的迪杰斯特拉算法與傳統的迪杰斯特拉算法運行時間的對比。為了實現基于最小堆的迪杰斯特拉算法,需要構造一個堆用來存在示蹤端點。初始化需要一個“構造堆”操作和一個“插入”操作,且每一次掃描需要一個“刪除最小元素”操作。插入一個節點需要時間O(1),提取最小節點操作需要時間lg|V|,V代表端點,且每一個節點可以被提取一次,因此,時間復雜度為V*lg|V|。一個“刪除關鍵元素”操作需要時間O(1),且每條邊至多更新一次,因此時間復雜度為|E|*O(1),E代表邊。所以,如果應用最小堆,堆操作的全部時間為O(|V|*lg|V|+|E|),而其他任務的時間為O(|V|+|E|),因此,基于最小堆的迪杰斯特拉算法的運行時間為O(|V|*lg|V|+|E|)。
在傳統迪杰斯特拉算法中,鄰接矩陣被用來作為最基本的數據存儲結構。當掃描端點數組來尋找最小端點時,整個算法需要花費O(|V|2)的時間。每一個最早到達路徑集合D(X)更新消耗一個時間常數,所以,整個運行時間為O(|V|2+|E|)。
最后,本申請的方法僅為較佳的實施方案,并非用于限定本發明的保護范圍。凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。