本發(fā)明涉及軟件定義網(wǎng)絡(luò),更具體地,涉及一種軟件定義網(wǎng)絡(luò)中控制轉(zhuǎn)發(fā)設(shè)備集群的方法及相應(yīng)的控制器。
背景技術(shù):
軟件定義網(wǎng)絡(luò)(softwaredefinednetworking,sdn)是一種新型網(wǎng)絡(luò)創(chuàng)新架構(gòu),其核心思想是將網(wǎng)絡(luò)的控制和轉(zhuǎn)發(fā)平面分離,增加網(wǎng)絡(luò)管理的靈活性和可擴展性。sdn中的控制層由原有的交換機、路由器等網(wǎng)絡(luò)設(shè)備中的控制功能抽取出來,采用獨立的控制軟件來實現(xiàn)。原有的交換機、路由器中的控制功能都從基礎(chǔ)設(shè)施層剝離,由控制面統(tǒng)一實施轉(zhuǎn)發(fā)管理。openflow是sdn網(wǎng)絡(luò)中運行在控制器與轉(zhuǎn)發(fā)設(shè)備間的一種協(xié)議,控制器通過openflow協(xié)議向交換機寫入流表和組表等轉(zhuǎn)發(fā)表項,完成對整個網(wǎng)絡(luò)的控制。
類似于傳統(tǒng)網(wǎng)絡(luò),在sdn網(wǎng)絡(luò)中,為實現(xiàn)負(fù)載均衡和高可靠性,也需要在網(wǎng)絡(luò)的特定位置部署多臺轉(zhuǎn)發(fā)設(shè)備組成集群,以主備或負(fù)載分擔(dān)方式運行。為滿足此要求,可以部署采用傳統(tǒng)集群技術(shù)的設(shè)備,轉(zhuǎn)發(fā)設(shè)備集群自行實現(xiàn)負(fù)載均衡轉(zhuǎn)發(fā)或故障時的主備倒換,對sdn控制器呈現(xiàn)為單一的設(shè)備。
但是,采用傳統(tǒng)集群技術(shù)的轉(zhuǎn)發(fā)設(shè)備集群,集群的成員設(shè)備之間需要運行私有協(xié)議,無法實現(xiàn)異廠家互通。呈現(xiàn)為整體的多個集群設(shè)備成員與sdn控制器維護單一鏈接的機制也較復(fù)雜。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明提供了以下技術(shù)方案。
一種軟件定義網(wǎng)絡(luò)中控制轉(zhuǎn)發(fā)設(shè)備集群的方法,包括:
軟件定義網(wǎng)絡(luò)sdn控制器將轉(zhuǎn)發(fā)設(shè)備集群視為單一的虛擬轉(zhuǎn)發(fā)設(shè)備進 行路徑?jīng)Q策,其中,所述轉(zhuǎn)發(fā)設(shè)備集群包括多臺獨立運行的成員設(shè)備;
所述sdn控制器根據(jù)路徑?jīng)Q策的結(jié)果得到所述成員設(shè)備的流表并下發(fā)給所述成員設(shè)備,通過流表控制所述成員設(shè)備之間及所述成員設(shè)備向外的流量轉(zhuǎn)發(fā)。
一種軟件定義網(wǎng)絡(luò)中的控制器,其特征在于,包括集群控制裝置,所述集群控制裝置包括:
路徑?jīng)Q策模塊,用于將轉(zhuǎn)發(fā)設(shè)備集群視為單一的虛擬轉(zhuǎn)發(fā)設(shè)備進行路徑?jīng)Q策,其中,所述轉(zhuǎn)發(fā)設(shè)備集群包括多臺獨立運行的成員設(shè)備;
流表生成模塊,用于根據(jù)路徑?jīng)Q策的結(jié)果得到所述成員設(shè)備的流表,通過流表控制所述成員設(shè)備之間及所述成員設(shè)備向外的流量轉(zhuǎn)發(fā);
流表下發(fā)模塊,用于將所述成員設(shè)備的流表下發(fā)給所述成員設(shè)備。
上述方案明充分利用軟件定義網(wǎng)絡(luò)對網(wǎng)絡(luò)設(shè)備進行集中控制的特點,將獨立運行的多臺轉(zhuǎn)發(fā)設(shè)備作為集群,通過流表控制集群成員設(shè)備之間及成員設(shè)備向外的流量轉(zhuǎn)發(fā)。成員設(shè)備之間無需運行私有協(xié)議,可以實現(xiàn)異廠家互通,且成員設(shè)備與控制器的鏈路維護無需特別處理,比較簡單。
附圖說明
圖1是本發(fā)明實施例一控制方法的流程圖;
圖2是本發(fā)明實施例一sdn控制器的模塊圖;
圖3是本發(fā)明示例一轉(zhuǎn)發(fā)設(shè)備集群的示意圖。
具體實施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,下文中將結(jié)合附圖對本發(fā)明的實施例進行詳細(xì)說明。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互任意組合。
實施例一
本實施例提出一種軟件定義網(wǎng)絡(luò)中控制轉(zhuǎn)發(fā)設(shè)備集群的方法,根據(jù)管理員的配置,sdn控制器通過openflow協(xié)議(或其他流控制協(xié)議)對獨立運行的轉(zhuǎn)發(fā)設(shè)備進行控制,組成轉(zhuǎn)發(fā)設(shè)備集群,對外呈現(xiàn)為單一的虛擬轉(zhuǎn)發(fā)設(shè)備。
本實施例軟件定義網(wǎng)絡(luò)中控制轉(zhuǎn)發(fā)設(shè)備集群的方法如圖1所示,包括:
步驟110,sdn控制器將轉(zhuǎn)發(fā)設(shè)備集群視為單一的虛擬轉(zhuǎn)發(fā)設(shè)備進行路徑?jīng)Q策,其中,所述轉(zhuǎn)發(fā)設(shè)備集群包括多臺獨立運行的成員設(shè)備;
本步驟中,所述路徑?jīng)Q策包括:確定所述虛擬轉(zhuǎn)發(fā)設(shè)備向外轉(zhuǎn)發(fā)流量(也即轉(zhuǎn)發(fā)報文)的作為出端口的虛擬端口,所述虛擬端口可以分為兩類:非捆綁端口和/或捆綁端口,其中:每一非捆綁端口對應(yīng)于一個成員設(shè)備上對外的一實體端口;每一捆綁端口對應(yīng)于一個或多個成員設(shè)備上對外的多個實體端口。
步驟120,所述sdn控制器根據(jù)路徑?jīng)Q策的結(jié)果得到所述成員設(shè)備的流表并下發(fā)給所述成員設(shè)備,通過流表控制所述成員設(shè)備之間及所述成員設(shè)備向外的流量轉(zhuǎn)發(fā)。
文中,成員設(shè)備向外的流量轉(zhuǎn)發(fā)是指向轉(zhuǎn)發(fā)設(shè)備集群外的流量轉(zhuǎn)發(fā)。
所述流量轉(zhuǎn)發(fā)為單播流量轉(zhuǎn)發(fā)時,所述sdn控制器通過流表控制所述成員設(shè)備之間及所述成員設(shè)備向外的流量轉(zhuǎn)發(fā),包括:
通過流表控制第一成員設(shè)備將流量從本設(shè)備直接向外轉(zhuǎn)發(fā),控制第二成員設(shè)備將流量從本設(shè)備向至少一個所述第一成員設(shè)備轉(zhuǎn)發(fā);其中,所述第一成員設(shè)備指具有與所述虛擬端口對應(yīng)的實體端口的成員設(shè)備,所述第二成員設(shè)備指不具有與所述虛擬端口對應(yīng)的實體端口的成員設(shè)備。
為了實現(xiàn)上述單播流量轉(zhuǎn)發(fā)的控制,所述sdn控制器根據(jù)路徑?jīng)Q策的結(jié)果得到所述成員設(shè)備的流表,可以采用以下方式:根據(jù)路徑?jīng)Q策的結(jié)果生成所述虛擬轉(zhuǎn)發(fā)設(shè)備的單播流表,所述單播流表包含作為出端口的所述虛擬端口;再針對每一所述成員設(shè)備,對所述單播流表進行修改,得到該成員設(shè)備的流表;其中,針對每一所述第一成員設(shè)備,所述修改包括:將出端口替換為該第一成員設(shè)備上與所述虛擬端口對應(yīng)的實體端口;針對每一所述第二成 員設(shè)備,所述修改包括:將出端口替換為該第二成員設(shè)備上用于第一迂回鏈路的實體端口,所述第一迂回鏈路是該第二成員設(shè)備到所述第一成員設(shè)備的鏈路。
在單播流量轉(zhuǎn)發(fā)時,所述成員設(shè)備在下發(fā)的流表中包括一個作為出端口的實體端口時,從該實體端口轉(zhuǎn)發(fā)流量;而在下發(fā)的流表中包括多個作為出端口的實體端口時,可以從所述多個實體端口中選擇一個實體端口轉(zhuǎn)發(fā)流量。具體選擇可以根據(jù)以下一種或多種(兩種以上,任意組合)策略進行:負(fù)載均衡策略;優(yōu)先級策略;及隨機選擇策略??刂破鹘o成員設(shè)備下發(fā)的端口列表中,還可以為各端口設(shè)置權(quán)重,供成員設(shè)備選擇出端口時使用。
所述流量轉(zhuǎn)發(fā)為廣播或組播流量轉(zhuǎn)發(fā)時,所述sdn控制器通過流表控制所述成員設(shè)備之間及所述成員設(shè)備向外的流量轉(zhuǎn)發(fā),包括:
對每一個第一成員設(shè)備,通過流表控制該第一成員設(shè)備將流量從該第一成員設(shè)備直接向外轉(zhuǎn)發(fā),且對于來自所述轉(zhuǎn)發(fā)設(shè)備集群外部的流量,還控制該第一成員設(shè)備將流量從該第一成員設(shè)備向滿足以下條件的其他第一成員設(shè)備轉(zhuǎn)發(fā):實體端口對應(yīng)的虛擬端口中至少有一個不同于該第一成員設(shè)備上實體端口對應(yīng)的虛擬端口;
對每一個第二成員設(shè)備,通過流表控制該第二成員設(shè)備將流量從該第二成員設(shè)備向所述轉(zhuǎn)發(fā)設(shè)備集群中的第一成員設(shè)備轉(zhuǎn)發(fā),以將流量迂回到每一個所述虛擬端口再向外轉(zhuǎn)發(fā);
其中,所述第一成員設(shè)備指具有與所述虛擬端口對應(yīng)的實體端口的成員設(shè)備,所述第二成員設(shè)備指不具有與所述虛擬端口對應(yīng)的實體端口的成員設(shè)備。
為了實現(xiàn)上述廣播或組播流量轉(zhuǎn)發(fā)的控制,所述sdn控制器根據(jù)路徑?jīng)Q策的結(jié)果得到所述成員設(shè)備的流表時,可以采用以下方式:
根據(jù)路徑?jīng)Q策的結(jié)果生成所述虛擬轉(zhuǎn)發(fā)設(shè)備的廣播或組播流表,所述廣播或組播流表包含作為出端口的所述虛擬端口;
針對每一所述第一成員設(shè)備,對所述廣播或組播流表進行第一修改和第 二修改,分別得到該第一成員設(shè)備的第一流表和第二流表;
針對每一個所述第二成員設(shè)備,對所述廣播或組播流表進行第三修改,得到該第二成員設(shè)備的流表;
其中,所述第一修改包括:將表示報文來自集群內(nèi)部的標(biāo)志作為新增的匹配項,將出端口替換為該成員設(shè)備上與所述虛擬端口對應(yīng)的實體端口;所述第二修改包括:將出端口替換為該成員設(shè)備上與所述虛擬端口對應(yīng)的實體端口及用于第二迂回鏈路的實體端口,所述第二迂回鏈路是該第一成員設(shè)備到所述其他第一成員設(shè)備的鏈路;所述第三修改包括:將出端口替換為該第二成員設(shè)備上用于第三迂回鏈路的實體端口,及增加命令或動作以在報文中打上表示報文來自集群內(nèi)部的標(biāo)志;所述第三迂回鏈路是該第二成員設(shè)備到所述第一成員設(shè)備的鏈路。
特別地,所述第三迂回鏈路可以包括除接收流量的鏈路之外的,該第二成員設(shè)備到滿足以下條件一和條件二的第一成員設(shè)備的鏈路,以及按以下方式一選擇的第一成員設(shè)備的鏈路:
條件一,該成員設(shè)備上實體端口對應(yīng)的虛擬端口包括非捆綁端口;
條件二,該成員設(shè)備上實體端口對應(yīng)的虛擬端口包括第一捆綁端口,所述第一捆綁端口指對應(yīng)于一個成員設(shè)備上多個實體端口的捆綁端口;
方式一,從實體端口對應(yīng)的虛擬端口均為第二捆綁端口且對應(yīng)的所述第二捆綁端口相同的多個第一成員設(shè)備中,選擇一個第一成員設(shè)備,其中,所述第二捆綁端口指對應(yīng)于多個成員設(shè)備上多個實體端口的捆綁端口,所述選擇依據(jù)以下一種或多種策略進行:負(fù)載均衡策略;優(yōu)先級策略;及隨機選擇策略。
本實施例針對轉(zhuǎn)發(fā)設(shè)備集群可能出現(xiàn)的離線、故障、加入新設(shè)備等情況,還提出了相應(yīng)的流表控制方法,如下:
針對離線的情況:
所述sdn控制器確定所述轉(zhuǎn)發(fā)設(shè)備集群中的一成員設(shè)備離線后,將該離線成員設(shè)備及其端口從所述轉(zhuǎn)發(fā)設(shè)備集群存活的成員設(shè)備中刪除;對所述轉(zhuǎn) 發(fā)設(shè)備集群存活的每一成員設(shè)備,如果該成員設(shè)備的流表有出端口連接到該離線成員設(shè)備,將該成員設(shè)備的流表中連接到該離線成員設(shè)備的出端口刪除,將更新后的該流表重新下發(fā)給該成員設(shè)備。
針對端口失效的情況:
所述sdn控制器確定作為出端口的一虛擬端口的狀態(tài)變?yōu)榉腔顒?即失效)后,將該虛擬端口對應(yīng)的實體端口從相應(yīng)流表的出端口中刪除;對刪除后有出端口的每一流表,將更新后的該流表重新下發(fā)給對應(yīng)的成員設(shè)備;對刪除后無出端口的每一流表,將該流表對應(yīng)的成員設(shè)備上連接到所述第一成員設(shè)備的實體端口新增為該流表的出端口,將更新后的該流表重新下發(fā)給對應(yīng)的成員設(shè)備。其中,對于一個非捆綁端口,其對應(yīng)的一個實體端口變?yōu)榉腔顒雍?,則確定該非捆綁端口變?yōu)榉腔顒?。對于一個捆綁端口,在其對應(yīng)的多個實體端口均變?yōu)榉腔顒雍?,再確定該捆綁端口變?yōu)榉腔顒印?/p>
針對成員設(shè)備間通信故障的情況:
所述sdn控制器確定一成員設(shè)備連接到一所述第一成員設(shè)備的實體端口或所述實體端口對應(yīng)的鏈路失效后,將該成員設(shè)備的流表中作為出端口的所述實體端口更新為連接到另一所述第一成員設(shè)備的實體端口,將更新后的該流表重新下發(fā)給該成員設(shè)備。
針對集群分裂的情況:
所述sdn控制器確定所述轉(zhuǎn)發(fā)設(shè)備集群處于分裂狀態(tài)(即集群變?yōu)榛ゲ幌嗤ǖ膬蓚€或更多部分)后,記錄處于非活動狀態(tài)的虛擬端口和所述成員設(shè)備之間的互聯(lián)端口,以及失效的所述成員設(shè)備之間的鏈路,并禁用所述成員設(shè)備上的聯(lián)動端口;及對所述虛擬轉(zhuǎn)發(fā)設(shè)備重新進行路徑?jīng)Q策,根據(jù)路徑?jīng)Q策的結(jié)果得到所述成員設(shè)備的流表并下發(fā)給所述成員設(shè)備。
針對加入新成員設(shè)備的情況:
所述sdn控制器確定有一成員設(shè)備加入所述轉(zhuǎn)發(fā)設(shè)備集群后,根據(jù)所述路徑?jīng)Q策的結(jié)果得到該成員設(shè)備的流表并下發(fā)給該成員設(shè)備,并在該成員設(shè)備具有與所述虛擬端口對應(yīng)的實體端口(如新加入的成員設(shè)備有實體端口加入現(xiàn)有的捆綁端口)時,按照所述轉(zhuǎn)發(fā)設(shè)備集群新的拓?fù)鋵υ谐蓡T設(shè)備的 流表進行更新并下發(fā)給相應(yīng)的成員設(shè)備。
本實施例還提供了一種軟件定義網(wǎng)絡(luò)中的控制器,包括集群控制裝置,如圖2所示,所述集群控制裝置包括:
路徑?jīng)Q策模塊10,用于將轉(zhuǎn)發(fā)設(shè)備集群視為單一的虛擬轉(zhuǎn)發(fā)設(shè)備進行路徑?jīng)Q策,其中,所述轉(zhuǎn)發(fā)設(shè)備集群包括多臺獨立運行的成員設(shè)備;
流表生成模塊20,用于根據(jù)路徑?jīng)Q策的結(jié)果得到所述成員設(shè)備的流表,通過流表控制所述成員設(shè)備之間及所述成員設(shè)備向外的流量轉(zhuǎn)發(fā);
流表下發(fā)模塊30,用于將所述成員設(shè)備的流表下發(fā)給所述成員設(shè)備。
可選地,
所述路徑?jīng)Q策模塊進行路徑?jīng)Q策,包括:確定所述虛擬轉(zhuǎn)發(fā)設(shè)備向外轉(zhuǎn)發(fā)流量的作為出端口的虛擬端口,所述虛擬端口包括非捆綁端口和/或捆綁端口,其中:每一非捆綁端口對應(yīng)于一個成員設(shè)備上對外的一實體端口;每一捆綁端口對應(yīng)于一個或多個成員設(shè)備上對外的多個實體端口。
可選地,
所述流表生成模塊通過流表控制所述成員設(shè)備之間及所述成員設(shè)備向外的流量轉(zhuǎn)發(fā),包括:所述流量轉(zhuǎn)發(fā)為單播流量轉(zhuǎn)發(fā)時,通過流表控制第一成員設(shè)備將流量從本設(shè)備直接向外轉(zhuǎn)發(fā),控制第二成員設(shè)備將流量從本設(shè)備向至少一個所述第一成員設(shè)備轉(zhuǎn)發(fā);其中,所述第一成員設(shè)備指具有與所述虛擬端口對應(yīng)的實體端口的成員設(shè)備,所述第二成員設(shè)備指不具有與所述虛擬端口對應(yīng)的實體端口的成員設(shè)備。
可選地,
所述流表生成模塊根據(jù)路徑?jīng)Q策的結(jié)果得到所述成員設(shè)備的流表,包括:所述流量轉(zhuǎn)發(fā)為單播流量轉(zhuǎn)發(fā)時,根據(jù)路徑?jīng)Q策的結(jié)果生成所述虛擬轉(zhuǎn)發(fā)設(shè)備的單播流表,所述單播流表包含作為出端口的所述虛擬端口;再針對每一所述成員設(shè)備,對所述單播流表進行修改,得到該成員設(shè)備的流表;
其中,針對每一所述第一成員設(shè)備,所述修改包括:將出端口替換為該第一成員設(shè)備上與所述虛擬端口對應(yīng)的實體端口;針對每一所述第二成員設(shè) 備,所述修改包括:將出端口替換為該第二成員設(shè)備上用于第一迂回鏈路的實體端口,所述第一迂回鏈路是該第二成員設(shè)備到所述第一成員設(shè)備的鏈路。
可選地,
所述流表生成模塊通過流表控制所述成員設(shè)備之間及所述成員設(shè)備向外的流量轉(zhuǎn)發(fā),包括:所述流量轉(zhuǎn)發(fā)為廣播或組播流量轉(zhuǎn)發(fā)時,對每一個第一成員設(shè)備,通過流表控制該第一成員設(shè)備將流量從該第一成員設(shè)備直接向外轉(zhuǎn)發(fā),且對于來自所述轉(zhuǎn)發(fā)設(shè)備集群外部的流量,還控制該第一成員設(shè)備將流量從該第一成員設(shè)備向滿足以下條件的其他第一成員設(shè)備轉(zhuǎn)發(fā):實體端口對應(yīng)的虛擬端口中至少有一個不同于該第一成員設(shè)備上實體端口對應(yīng)的虛擬端口;及,對每一個第二成員設(shè)備,通過流表控制該第二成員設(shè)備將流量從該第二成員設(shè)備向所述轉(zhuǎn)發(fā)設(shè)備集群中的第一成員設(shè)備轉(zhuǎn)發(fā),以將流量迂回到每一個所述虛擬端口再向外轉(zhuǎn)發(fā);其中,所述第一成員設(shè)備指具有與所述虛擬端口對應(yīng)的實體端口的成員設(shè)備,所述第二成員設(shè)備指不具有與所述虛擬端口對應(yīng)的實體端口的成員設(shè)備。
可選地,
所述流表生成模塊根據(jù)路徑?jīng)Q策的結(jié)果得到所述成員設(shè)備的流表,包括:所述流量轉(zhuǎn)發(fā)為廣播或組播流量轉(zhuǎn)發(fā)時,根據(jù)路徑?jīng)Q策的結(jié)果生成所述虛擬轉(zhuǎn)發(fā)設(shè)備的廣播或組播流表,所述廣播或組播流表包含作為出端口的所述虛擬端口;針對每一所述第一成員設(shè)備,對所述廣播或組播流表進行第一修改和第二修改,分別得到該第一成員設(shè)備的第一流表和第二流表;
其中,所述第一修改包括:將表示報文來自集群內(nèi)部的標(biāo)志作為新增的匹配項,將出端口替換為該成員設(shè)備上與所述虛擬端口對應(yīng)的實體端口;所述第二修改包括:將出端口替換為該成員設(shè)備上與所述虛擬端口對應(yīng)的實體端口及用于第二迂回鏈路的實體端口,所述第二迂回鏈路是該第一成員設(shè)備到所述其他第一成員設(shè)備的鏈路。
可選地,
所述流表生成模塊根據(jù)路徑?jīng)Q策的結(jié)果得到所述成員設(shè)備的流表,包括:所述流量轉(zhuǎn)發(fā)為廣播或組播流量轉(zhuǎn)發(fā)時,根據(jù)路徑?jīng)Q策的結(jié)果生成所述虛擬 轉(zhuǎn)發(fā)設(shè)備的廣播或組播流表,所述廣播或組播流表包含作為出端口的所述虛擬端口;針對每一個所述第二成員設(shè)備,對所述廣播或組播流表進行第三修改,得到該第二成員設(shè)備的流表;
其中所述第三修改包括:將出端口替換為該第二成員設(shè)備上用于第三迂回鏈路的實體端口,及增加命令或動作以在報文中打上表示報文來自集群內(nèi)部的標(biāo)志;所述第三迂回鏈路是該第二成員設(shè)備到所述第一成員設(shè)備的鏈路。
可選地,
所述第三迂回鏈路包括除接收流量的鏈路之外的,該第二成員設(shè)備到滿足以下條件一和條件二的第一成員設(shè)備的鏈路,以及按以下方式一選擇的第一成員設(shè)備的鏈路:
條件一,該成員設(shè)備上實體端口對應(yīng)的虛擬端口包括非捆綁端口;
條件二,該成員設(shè)備上實體端口對應(yīng)的虛擬端口包括第一捆綁端口,所述第一捆綁端口指對應(yīng)于一個成員設(shè)備上多個實體端口的捆綁端口;
方式一,從實體端口對應(yīng)的虛擬端口均為第二捆綁端口且對應(yīng)的所述第二捆綁端口相同的多個第一成員設(shè)備中,選擇一個第一成員設(shè)備,其中,所述第二捆綁端口指對應(yīng)于多個成員設(shè)備上多個實體端口的捆綁端口;
其中所述選擇依據(jù)以下一種或多種策略進行:負(fù)載均衡策略;優(yōu)先級策略;及隨機選擇策略。
可選地,
所述集群控制裝置還包括以下模塊中的一種或多種:
離線處理模塊,用于在確定所述轉(zhuǎn)發(fā)設(shè)備集群中的一成員設(shè)備離線后,將該離線成員設(shè)備及其端口從所述轉(zhuǎn)發(fā)設(shè)備集群存活的成員設(shè)備中刪除;及對所述轉(zhuǎn)發(fā)設(shè)備集群存活的每一成員設(shè)備,如果該成員設(shè)備的流表有出端口連接到該離線成員設(shè)備,將該成員設(shè)備的流表中連接到該離線成員設(shè)備的出端口刪除,將更新后的該流表重新下發(fā)給該成員設(shè)備;
端口失效處理模塊,用于在確定作為出端口的一虛擬端口的狀態(tài)變?yōu)榉腔顒雍螅瑢⒃撎摂M端口對應(yīng)的實體端口從相應(yīng)流表的出端口中刪除;及,對刪除后有出端口的每一流表,將更新后的該流表重新下發(fā)給對應(yīng)的成員設(shè)備; 對刪除后無出端口的每一流表,將該流表對應(yīng)的成員設(shè)備上連接到所述第一成員設(shè)備的實體端口新增為該流表的出端口,將更新后的該流表重新下發(fā)給對應(yīng)的成員設(shè)備;
通信故障處理模塊,用于在確定一成員設(shè)備連接到一所述第一成員設(shè)備的實體端口或所述實體端口對應(yīng)的鏈路失效后,將該成員設(shè)備的流表中作為出端口的所述實體端口更新為連接到另一所述第一成員設(shè)備的實體端口,將更新后的該流表重新下發(fā)給該成員設(shè)備;
集群分裂處理模塊,用于在確定所述轉(zhuǎn)發(fā)設(shè)備集群處于分裂狀態(tài)后,記錄處于非活動狀態(tài)的虛擬端口和所述成員設(shè)備之間的互聯(lián)端口,以及失效的所述成員設(shè)備之間的鏈路,并禁用所述成員設(shè)備上的聯(lián)動端口;及,對所述虛擬轉(zhuǎn)發(fā)設(shè)備重新進行路徑?jīng)Q策,根據(jù)路徑?jīng)Q策的結(jié)果得到所述成員設(shè)備的流表并下發(fā)給所述成員設(shè)備;
成員加入處理模塊,所述sdn控制器確定有一成員設(shè)備加入所述轉(zhuǎn)發(fā)設(shè)備集群后,根據(jù)所述路徑?jīng)Q策的結(jié)果得到該成員設(shè)備的流表并下發(fā)給該成員設(shè)備,并在該成員設(shè)備具有與所述虛擬端口對應(yīng)的實體端口時,按照所述轉(zhuǎn)發(fā)設(shè)備集群新的拓?fù)鋵υ谐蓡T設(shè)備的流表進行更新并下發(fā)給相應(yīng)的成員設(shè)備。
下面再用幾個應(yīng)用中的示例進行說明。
示例一
本示例涉及集群的組建和配置。
sdn控制器通過openflow協(xié)議控制多臺獨立運行的轉(zhuǎn)發(fā)設(shè)備,組成轉(zhuǎn)發(fā)設(shè)備集群,對外呈現(xiàn)為一體化的邏輯設(shè)備。如圖3所示,本示例中,集群由2臺openflow轉(zhuǎn)發(fā)設(shè)備組成,標(biāo)識為dpid1和dpid2,2臺轉(zhuǎn)發(fā)設(shè)備分別有編號為1、2、3、4、5、6的端口。
轉(zhuǎn)發(fā)設(shè)備集群的各個成員設(shè)備之間有互聯(lián)的鏈路,即圖1中dpid1的端口3和dpid2的端口3之間、dpid1的端口4和dpid2的端口4之間的鏈路,對集群外不可見。成員設(shè)備之間的鏈路可由管理員配置,不限制是否是 直連的,sdn控制器通過鏈路探測或路徑檢測機制維護內(nèi)部鏈路的狀態(tài)。
如圖所示,轉(zhuǎn)發(fā)設(shè)備集群呈現(xiàn)的虛擬轉(zhuǎn)發(fā)設(shè)備對外暴露6個端口(圖1中①、②、③、④、⑤、⑥),分為兩類:
非捆綁端口(①、②、③、④):一個非捆綁端口直接對應(yīng)組成集群的一個成員設(shè)備上對外(即面向集群外)的一個實體端口,如dpid1上的端口1、2,dpid2上的端口1、2。非捆綁端口通過非捆綁鏈路與鄰居設(shè)備互聯(lián),端口狀態(tài)直接對應(yīng)實體端口的狀態(tài)。
捆綁端口(⑤、⑥):一個捆綁端口對應(yīng)組成集群的一個或多個成員轉(zhuǎn)發(fā)設(shè)備上對外的多個實體端口,如dpid1上的端口5和dpid2上的端口5捆綁組成端口⑤,dpid1上的端口6和dpid2上的端口6捆綁組成端口⑥;當(dāng)其中任一實體端口狀態(tài)為活動時,捆綁端口狀態(tài)即為活動,所有端口狀態(tài)均為非活動時,捆綁端口狀態(tài)為非活動。捆綁端口過捆綁鏈路與鄰居互聯(lián)。鄰居設(shè)備相應(yīng)的端口也需捆綁,可靜態(tài)配置或通過聚合協(xié)議協(xié)商產(chǎn)生。
示例二:
本示例涉及對轉(zhuǎn)發(fā)設(shè)備集群單播流量轉(zhuǎn)發(fā)的控制。
本示例sdn控制器通過openflow協(xié)議下發(fā)轉(zhuǎn)發(fā)表項,控制與轉(zhuǎn)發(fā)設(shè)備集群相關(guān)單播流量轉(zhuǎn)發(fā),包括:
步驟一,sdn控制器將轉(zhuǎn)發(fā)設(shè)備集群視為一個虛擬轉(zhuǎn)發(fā)設(shè)備,根據(jù)網(wǎng)絡(luò)拓?fù)淝闆r進行路徑?jīng)Q策,得到用于控制虛擬轉(zhuǎn)發(fā)設(shè)備轉(zhuǎn)發(fā)單播流量的單播流表;
步驟二,sdn控制器根據(jù)單播流表中作為出端口的虛擬端口對應(yīng)的成員設(shè)備上的實體端口,對單播流表進行修改,得到各成員設(shè)備的流表并下發(fā)給各成員設(shè)備。
具體地,對一成員設(shè)備,可通過流表實現(xiàn)以下流量轉(zhuǎn)發(fā)的控制:
如流量可經(jīng)本設(shè)備直接轉(zhuǎn)發(fā)出去,即本設(shè)備具有與所述虛擬端口對應(yīng)的實體端口(對應(yīng)于上文中的第一成員設(shè)備,本設(shè)備上的實體端口可以對應(yīng)于非捆綁端口,也可以對應(yīng)于捆綁端口,如果一實體端口是一捆綁端口對應(yīng)的 多個實體端口中的一個,即可認(rèn)為該實體端口對應(yīng)于該捆綁端口)時,通過流表控制該成員設(shè)備將流量從本設(shè)備直接轉(zhuǎn)發(fā)出去。
如流量需經(jīng)集群其他成員設(shè)備迂回轉(zhuǎn)發(fā)出去,即本設(shè)備不具有與所述虛擬端口對應(yīng)的實體端口(對應(yīng)于上文中的第二成員設(shè)備)時,通過流表控制該成員設(shè)備將流量先迂回到其它成員設(shè)備再轉(zhuǎn)發(fā)出去。
對于從虛擬轉(zhuǎn)發(fā)設(shè)備的單播流表如何得到各成員設(shè)備的流表,上文中已有詳細(xì)描述,這里不再贅述。成員設(shè)備收到流表后,可以從流表中的出端口組中選擇一個作為實際的轉(zhuǎn)發(fā)端口。
根據(jù)上述規(guī)則,按圖3所示的集群拓?fù)溥M一步舉例:
例1:虛擬出端口為①、⑤。
dpid1和dpid2均可以直接轉(zhuǎn)發(fā)流量,篩選以下端口作為向dpid1和dpid2下發(fā)的流表中的出端口:向dpid1下發(fā)的流表的出端口為1、5,向dpid2下發(fā)的流表的出端口為5。
例2:虛擬出端口為①、②。
dpid1可以直接轉(zhuǎn)發(fā)流量,按例1中方法確定出端口,向dpid1下發(fā)的轉(zhuǎn)發(fā)表的出端口為1、2。
dpid2需要將流量轉(zhuǎn)發(fā)給dpid1迂回,可以本設(shè)備前往有可用出端口的成員設(shè)備的迂回鏈路所對應(yīng)端口作為出端口,向dpid2下發(fā)的流表的出端口為3、4。
示例三
本示例涉及對轉(zhuǎn)發(fā)設(shè)備集群廣播或組播流量轉(zhuǎn)發(fā)的控制。
本示例sdn控制器通過openflow協(xié)議下發(fā)轉(zhuǎn)發(fā)表項,控制與轉(zhuǎn)發(fā)設(shè)備集群相關(guān)流量廣播或組播轉(zhuǎn)發(fā),包括:
步驟一,sdn控制器將轉(zhuǎn)發(fā)設(shè)備集群視為一個虛擬轉(zhuǎn)發(fā)設(shè)備,根據(jù)網(wǎng)絡(luò)拓?fù)淝闆r進行路徑?jīng)Q策,得到用于控制虛擬轉(zhuǎn)發(fā)設(shè)備轉(zhuǎn)發(fā)廣播或組播流量的廣播或組播流表;廣播或組播時,需要從虛擬轉(zhuǎn)發(fā)設(shè)備上的多個端口將報文 轉(zhuǎn)發(fā)出去。
步驟二,sdn控制器根據(jù)廣播或組播流表中作為出端口的虛擬端口對應(yīng)的成員設(shè)備上的實體端口,對廣播或組播流表進行修改,得到各成員設(shè)備的流表并下發(fā)給各成員設(shè)備。
具體地,對一成員設(shè)備,可通過流表實現(xiàn)以下流量轉(zhuǎn)發(fā)的控制:
如流量可經(jīng)本設(shè)備直接轉(zhuǎn)發(fā)出去(即本設(shè)備為第一成員設(shè)備)時,對于從集群成員設(shè)備收到的報文,通過流表控制該成員設(shè)備將流量從本設(shè)備直接轉(zhuǎn)發(fā)出去;對于從集群以外設(shè)備收到的報文,除了通過流表控制該成員設(shè)備將流量從本設(shè)備直接轉(zhuǎn)發(fā)出去外,還通過流表控制該成員設(shè)備從本設(shè)備向其他第一成員設(shè)備轉(zhuǎn)發(fā),此處的其他第一成員設(shè)備上實體端口對應(yīng)的虛擬端口中至少有一個不同于本設(shè)備上實體端口對應(yīng)的虛擬端口。也就是說,如果另一個第一成員設(shè)備具有與本設(shè)備完全相同的捆綁端口,則可以不向該另一個第一成員設(shè)備轉(zhuǎn)發(fā)。為了識別報文是從集群成員設(shè)備收到的,還是從集群以外設(shè)備收到的,可以在第二成員設(shè)備的流表中增加命令或動作,即在其轉(zhuǎn)發(fā)的報文中打上表示報文來自集群內(nèi)部的標(biāo)志。同時給第一成員設(shè)備下發(fā)兩個流表,在一個流表中增加該標(biāo)記作為匹配項,如果匹配成功,即意味著是從成員設(shè)備收到的報文,沒有匹配成功,再按另一個流表進行匹配處理。
如流量需經(jīng)集群其他成員設(shè)備迂回轉(zhuǎn)發(fā)出去(即本設(shè)備為第二成員設(shè)備)時,通過流表控制該成員設(shè)備將流量從本設(shè)備向第一成員設(shè)備轉(zhuǎn)發(fā),以將流量迂回到每一個所述虛擬端口再向外轉(zhuǎn)發(fā)。捆綁端口的成員端口分布在多個轉(zhuǎn)發(fā)設(shè)備的,以及一對設(shè)備間存在多條可用的內(nèi)部鏈路的,控制器需要統(tǒng)一選取將哪些端口加入出端口列表,避免報文迂回后在多個成員端口輸出。迂回時如何具體選擇鏈路見上文的詳細(xì)描述。并且,對于需要迂回的流量,在下發(fā)給第二成員設(shè)備的轉(zhuǎn)發(fā)表中增加命令或動作以在轉(zhuǎn)發(fā)的報文中打上表示報文來自集群內(nèi)部的標(biāo)志,如通過添加vlan標(biāo)簽、隧道標(biāo)識等方式打上標(biāo)志,用于后續(xù)設(shè)備識別,確定后續(xù)的轉(zhuǎn)發(fā)動作。
對于從虛擬轉(zhuǎn)發(fā)設(shè)備的廣播或組播流表如何得到各成員設(shè)備的流表,上文中已有詳細(xì)描述,這里不再贅述。
根據(jù)上述規(guī)則,按圖3中的所示的集群拓?fù)溥M一步舉例:
例:虛擬出端口為①、⑤;
向dpid1下發(fā)2個流表(也可稱為轉(zhuǎn)發(fā)表項),一個流表在原有匹配項的基礎(chǔ)增加用于識別從dpid2收到的報文的匹配項,出端口為1,另一個流表的出端口為1、5。
在dpid2上下發(fā)1個轉(zhuǎn)發(fā)表項,出端口為5,3。但對于從dpid1發(fā)來的報文,直接丟棄,即不將接收報文的鏈路作為迂回鏈路。
示例四
本示例涉及集群成員設(shè)備發(fā)生故障離線時,sdn控制器通過更新存活設(shè)備上的流表,使流量恢復(fù)正常轉(zhuǎn)發(fā)的方法,包括:
步驟一,sdn控制器檢測到轉(zhuǎn)發(fā)設(shè)備集群中的某個成員設(shè)備已離線;
步驟二,sdn控制器維護轉(zhuǎn)發(fā)設(shè)備集群的狀態(tài),將離線設(shè)備及相關(guān)的端口從集群中剔除;
步驟三,集群其他存活成員設(shè)備收到的流量原來經(jīng)該離線設(shè)備迂回轉(zhuǎn)發(fā)的,需要選取其他可用迂回路徑。因此,sdn控制器更新這些設(shè)備的流表,即原有出端口連接所述離線設(shè)備的應(yīng)予以刪除,僅保留前往其他可迂回設(shè)備的出端口。
示例五
本示例涉及集群成員設(shè)備上對外端口的狀態(tài)變更為非活動時,sdn控制器通過更新存活設(shè)備上的表項,使流量恢復(fù)正常轉(zhuǎn)發(fā)的方法,包括:
步驟一,轉(zhuǎn)發(fā)設(shè)備上報,或者sdn控制器檢測到集群成員上某一端口狀態(tài)變更為非活動;
步驟二,sdn控制器將該端口從受影響的流表中刪除,即更新流表:
對于該端口所在成員設(shè)備,將該端口從該成員設(shè)備的流表的出端口中刪除,刪除后無可用端口的成員設(shè)備,流量需經(jīng)其他設(shè)備迂回,則增加本設(shè)備前往可迂回設(shè)備的端口作為出端口;
對于其他成員設(shè)備,原來迂回后經(jīng)該端口轉(zhuǎn)發(fā)的,修改迂回路徑,將該端口從其流表的出端口中剔除,保留前往其他可迂回設(shè)備的出端口。
示例六
本示例涉及集群內(nèi)部鏈路發(fā)生中斷時,sdn控制器通過更新存活設(shè)備上的表項,使流量恢復(fù)正常轉(zhuǎn)發(fā)的方法,包括:
步驟一,轉(zhuǎn)發(fā)設(shè)備上報或者控制器檢測到集群成員上連接其他成員的某端口變更為非活動,或者控制器檢測到集群內(nèi)部路徑失效;
步驟二,對于需要經(jīng)過該端口或鏈路迂回轉(zhuǎn)發(fā)的成員設(shè)備,修改其流表中的出端口,改從其他鏈路迂回。
示例七
本示例涉及集群內(nèi)部鏈路故障和捆綁端口成員狀態(tài)變更為非活動的疊加故障場景,sdn控制器通過執(zhí)行端口聯(lián)動策略,禁用設(shè)備上部分端口,觸發(fā)路徑重計算并恢復(fù)正常轉(zhuǎn)發(fā),包括:
步驟一,sdn控制器判斷集群已處于分裂狀態(tài);
根據(jù)轉(zhuǎn)發(fā)設(shè)備上報或者控制器檢測到捆綁端口成員狀態(tài)變更為非活動;或者捆綁端口成員已處于非活動狀態(tài),轉(zhuǎn)發(fā)設(shè)備上報或者控制器檢測到集群設(shè)備間互聯(lián)端口狀態(tài)變更為非活動等,sdn控制器可以判斷集群是否處于分裂狀態(tài),即變?yōu)榛ゲ幌嗦?lián)的多個部分。
步驟二,sdn控制器根據(jù)聯(lián)動策略禁用設(shè)備上的聯(lián)動端口;聯(lián)動端口如包括在某一端口失效后,也應(yīng)關(guān)閉的端口。
步驟三,sdn控制器根據(jù)當(dāng)前的集群拓?fù)渲匦掠嬎懵窂剑掳l(fā)轉(zhuǎn)發(fā)表,使流量經(jīng)集群其他成員設(shè)備和捆綁端口其他成員端口轉(zhuǎn)發(fā)。
示例八:
本示例涉及集群部分成員已處于正常工作狀態(tài),故障成員恢復(fù)或者新成 員設(shè)備加入,sdn控制器將設(shè)備加入集群,使流量可經(jīng)該設(shè)備轉(zhuǎn)發(fā)的方法,包括:
步驟一,集群成員設(shè)備與控制器建立連接,完成初始化,sdn控制器將設(shè)備加入集群,維護相關(guān)狀態(tài);
步驟二,sdn控制器為新加入設(shè)備生成下發(fā)的表項,并根據(jù)新的集群拓?fù)涓缕渌O(shè)備的流表;
步驟三,下發(fā)流表,可以正常使用該新加入的設(shè)備。
上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到上述實施例方法可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實施方式?;谶@樣的理解,本發(fā)明實施例的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)(如rom/ram、磁碟、光盤)中,包括若干指令用以使得一臺終端設(shè)備(可以是手機,計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述的控制器。
以上僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護范圍內(nèi)。