本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,尤其涉及一種Openflow消息執(zhí)行方法及裝置。
背景技術(shù):
SDN(Software Defined Networks,軟件定義網(wǎng)絡(luò))是一種新型的網(wǎng)絡(luò)創(chuàng)新架構(gòu),通過控制平面和數(shù)據(jù)平面分離,實現(xiàn)網(wǎng)絡(luò)流量的靈活控制。在SDN網(wǎng)絡(luò)中,控制器通過Openflow消息控制交換設(shè)備進行業(yè)務(wù)處理。
當(dāng)控制器利用Bundle機制觸發(fā)交換設(shè)備批量執(zhí)行Openflow消息時,Openflow消息的執(zhí)行順序由Openflow消息添加到Bundle緩存中的先后順序決定,這使得一些重要業(yè)務(wù)的Openflow消息可能晚于普通業(yè)務(wù)的Openflow消息被執(zhí)行,業(yè)務(wù)處理不夠優(yōu)化,甚至可能會影響到已有業(yè)務(wù)的穩(wěn)定性。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種Openflow消息執(zhí)行方法及裝置,用以按照優(yōu)先級執(zhí)行Bundle緩存中的Openflow消息。
為實現(xiàn)上述發(fā)明目的,本發(fā)明提供了如下技術(shù)方案:
本發(fā)明提供一種Openflow消息執(zhí)行方法,應(yīng)用于交換設(shè)備,所述方法包括:
在接收到控制器發(fā)送的攜帶Openflow消息和Openflow消息的優(yōu)先級的Bundle添加消息時,將所述Bundle添加消息攜帶的Openflow消息添加到所述Bundle添加消息對應(yīng)的Bundle緩存中,并標記該添加的Openflow消息的優(yōu)先級;
在接收到所述控制器發(fā)送的針對所述Bundle緩存的Bundle執(zhí)行消息時,對所述Bundle緩存中標記了優(yōu)先級的Openflow消息按照優(yōu)先級進行排序;
按照排序后從高到低的優(yōu)先級順序執(zhí)行所述Bundle緩存中標記了優(yōu)先級的Openflow消息。
本發(fā)明還提供一種Openflow消息執(zhí)行裝置,應(yīng)用于交換設(shè)備,所述裝置包括:
標記單元,用于在接收到控制器發(fā)送的攜帶Openflow消息和Openflow消息的優(yōu)先級的Bundle添加消息時,將所述Bundle添加消息攜帶的Openflow消息添加到所述Bundle添加消息對應(yīng)的Bundle緩存中,并標記該添加的Openflow消息的優(yōu)先級;
排序單元,用于在接收到所述控制器發(fā)送的針對所述Bundle緩存的Bundle執(zhí)行消息時,對所述Bundle緩存中標記了優(yōu)先級的Openflow消息按照優(yōu)先級進行排序;
執(zhí)行單元,用于按照排序后從高到低的優(yōu)先級順序執(zhí)行所述Bundle緩存中標記了優(yōu)先級的Openflow消息。
由以上描述可以看出,本發(fā)明對Bundle緩存中的Openflow消息設(shè)置了優(yōu)先級,并基于Openflow消息的優(yōu)先級順序執(zhí)行Bundle緩存中的Openflow消息,以確保重要業(yè)務(wù)的Openflow消息優(yōu)先執(zhí)行,達到業(yè)務(wù)處理的最優(yōu)化。
附圖說明
圖1是本發(fā)明實施例示出的一種Openflow消息執(zhí)行方法流程圖;
圖2是本發(fā)明實施例示出的一種SDN網(wǎng)絡(luò)示意圖;
圖3是本發(fā)明實施例示出的交換設(shè)備的結(jié)構(gòu)示意圖;
圖4是本發(fā)明實施例示出的一種Openflow消息執(zhí)行裝置的結(jié)構(gòu)示意圖。
具體實施方式
這里將詳細地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本發(fā)明相一致的所有實施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本發(fā)明的一些方面相一致的裝置和方法的例子。
在本發(fā)明使用的術(shù)語是僅僅出于描述特定實施例的目的,而非旨在限制本發(fā)明。在本發(fā)明和所附權(quán)利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語“和/或”是指并包含一個或多個相關(guān)聯(lián)的列出項目的任何或所有可能組合。
應(yīng)當(dāng)理解,盡管在本發(fā)明可能采用術(shù)語第一、第二、第三等來描述各種信息,但這些信息不應(yīng)限于這些術(shù)語。這些術(shù)語僅用來將同一類型的信息彼此區(qū)分開。例如,在不脫離本發(fā)明范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當(dāng)……時”或“響應(yīng)于確定”。
本發(fā)明實施例提出一種Openflow消息執(zhí)行方法,該方法通過設(shè)置Openflow消息的優(yōu)先級,對Bundle緩存中的Openflow消息按照優(yōu)先級順序執(zhí)行,以確保重要業(yè)務(wù)優(yōu)先處理。
參見圖1,為本發(fā)明Openflow消息執(zhí)行方法的一個實施例流程圖,該實施例對Openflow消息執(zhí)行過程進行描述。
步驟101,在接收到控制器發(fā)送的攜帶Openflow消息和Openflow消息的優(yōu)先級的Bundle添加消息時,將所述Bundle添加消息攜帶的Openflow消息添加到所述Bundle添加消息對應(yīng)的Bundle緩存中,并標記該添加的Openflow消息的優(yōu)先級。
在SDN網(wǎng)絡(luò)中,控制器通過Openflow消息配置管理交換設(shè)備,例如,通過Openflow消息向交換設(shè)備下發(fā)流表項,以使交換設(shè)備基于流表項對業(yè)務(wù)流量進行轉(zhuǎn)發(fā)。
本發(fā)明利用Bundle機制處理Openflow消息,具體為,控制器向交換設(shè)備發(fā)送Bundle創(chuàng)建消息(消息類型為OFPBCT_OPEN_REQUEST的OFPT_BUNDLE_CONTROL消息),交換設(shè)備根據(jù)Bundle創(chuàng)建消息本地創(chuàng)建對應(yīng)Bundle緩存,當(dāng)交換設(shè)備接收的Bundle創(chuàng)建消息中攜帶有優(yōu)先級執(zhí)行標記時,標記該創(chuàng)建的Bundle緩存支持優(yōu)先級執(zhí)行;反之,當(dāng)交換設(shè)備接收的Bundle創(chuàng)建消息中未攜帶優(yōu)先級執(zhí)行標記時,表明該創(chuàng)建的Bundle緩存不支持優(yōu)先級執(zhí)行。
在完成Bundle緩存創(chuàng)建后,交換設(shè)備接收控制器發(fā)送的攜帶Openflow消息的Bundle添加消息(OFPT_BUNDLE_ADD_MESSAGE),將Bundle添加消息攜帶的Openflow消息添加到Bundle添加消息對應(yīng)的Bundle緩存中。當(dāng)接收的Bundle添加消息中還攜帶Openflow消息的優(yōu)先級時,本地標記該添加到Bundle緩存中的Openflow消息的優(yōu)先級。例如,控制器可根據(jù)業(yè)務(wù)的重要程度,為不同業(yè)務(wù)的Openflow消息設(shè)置不同的優(yōu)先級,從而使交換設(shè)備為添加到Bundle緩存中的Openflow消息標記不同的優(yōu)先級。
步驟102,在接收到所述控制器發(fā)送的針對所述Bundle緩存的Bundle執(zhí)行消息時,對所述Bundle緩存中標記了優(yōu)先級的Openflow消息按照優(yōu)先級進行排序。
具體地,當(dāng)交換設(shè)備接收到控制器發(fā)送的Bundle執(zhí)行消息(消息類型為OFPBCT_COMMIT_REQUEST的OFPT_BUNDLE_CONTROL消息)時,首先判斷該Bundle執(zhí)行消息對應(yīng)的Bundle緩存是否支持優(yōu)先級執(zhí)行,當(dāng)Bundle執(zhí)行消息對應(yīng)的Bundle緩存不支持優(yōu)先級執(zhí)行時,可采用現(xiàn)有執(zhí)行方式進行處理,在此不再贅述;當(dāng)Bundle執(zhí)行消息對應(yīng)的Bundle緩存支持優(yōu)先級執(zhí)行時,對Bundle緩存中標記了優(yōu)先級的Openflow消息按照優(yōu)先級進行排序。
可見,本發(fā)明通過設(shè)置Bundle緩存的優(yōu)先級執(zhí)行標記,僅對支持優(yōu)先級執(zhí)行的Bundle緩存中的Openflow消息進行排序,提高了Openflow消息的執(zhí)行效率。
步驟103,按照排序后從高到低的優(yōu)先級順序執(zhí)行所述Bundle緩存中標記了優(yōu)先級的Openflow消息。
本步驟中,交換設(shè)備優(yōu)先執(zhí)行高優(yōu)先級的Openflow消息,再執(zhí)行低優(yōu)先級的Openflow消息,對優(yōu)先級相同的Openflow消息按照添加到Bundle緩存中的先后順序執(zhí)行。
在執(zhí)行完標記了優(yōu)先級的Openflow消息后,若Bundle緩存中還存在未標記優(yōu)先級的Openflow消息時,則對未標記優(yōu)先級的Openflow消息按照添加到Bundle緩存中的先后順序執(zhí)行。
可見,本發(fā)明通過對支持優(yōu)先級執(zhí)行的Bundle緩存中的Openflow消息按照優(yōu)先級順序執(zhí)行,以使重要業(yè)務(wù)得以優(yōu)先處理。
此外,本發(fā)明還增加了Bundle刪除消息(記為OFPT_BUNDLE_DELETE_MESSAGE)。當(dāng)控制器要刪除已添加到Bundle緩存中的Openflow消息時,可發(fā)送攜帶要刪除的Openflow消息的標識的Bundle刪除消息給交換設(shè)備,交換設(shè)備根據(jù)該Openflow消息的標識,查找Bundle緩存中具有相同標識的Openflow消息進行刪除,使Bundle緩存中保留的是真正需要執(zhí)行的Openflow消息,以降低交換設(shè)備反復(fù)執(zhí)行增刪操作的次數(shù)。
舉例說明,比如控制器已向交換設(shè)備的Bundle緩存中添加了一個用于增加流表項的Openflow消息(記為Openflow流表添加消息),此時,網(wǎng)絡(luò)中發(fā)生鏈路變化,控制器根據(jù)該鏈路變化確定需要取消已添加到Bundle緩存中的Openflow流表添加消息,現(xiàn)有技術(shù)中沒有刪除Bundle緩存中消息的機制,只能再向Bundle緩存中添加了一個刪除流表項的Openflow消息(記為Openflow流表刪除消息)。Bundle緩存被觸發(fā)執(zhí)行后,交換設(shè)備首先執(zhí)行Openflow流表添加消息,向硬件資源中增加一個流表項,再執(zhí)行Openflow流表刪除消息,刪除已添加的流表項。當(dāng)網(wǎng)絡(luò)中鏈路不穩(wěn)定時,會導(dǎo)致交換設(shè)備的硬件轉(zhuǎn)發(fā)層面出現(xiàn)大量流表項的增刪。而本發(fā)明通過增加Bundle刪除消息,可直接將Bundle緩存中的Openflow流表添加消息刪除,該Openflow流表添加消息攜帶的流表項還未真正下發(fā)到硬件轉(zhuǎn)發(fā)層面,因此,可避免對硬件轉(zhuǎn)發(fā)層面流表項的頻繁增刪。
現(xiàn)以圖2所示SDN網(wǎng)絡(luò)為例,詳細介紹Openflow消息執(zhí)行過程。
圖2所示SDN網(wǎng)絡(luò)包括控制器Controller和交換設(shè)備SW1~SW6,控制器與交換設(shè)備之間通過Openflow協(xié)議進行信息交互。SW1下掛虛擬機VM1~VM100,SW6下掛虛擬機VM101~VM200。該SDN網(wǎng)絡(luò)中部署了三種業(yè)務(wù),按照重要程度劃分依次為服務(wù)端業(yè)務(wù)、普通業(yè)務(wù)、其它業(yè)務(wù),并預(yù)設(shè)服務(wù)端業(yè)務(wù)的Openflow消息的優(yōu)先級為3;普通業(yè)務(wù)的Openflow消息的優(yōu)先級為2;其它業(yè)務(wù)的Openflow消息的優(yōu)先級為1。
假設(shè),VM1~VM30、VM101~VM130部署普通業(yè)務(wù);VM31~VM70、VM131~VM170部署服務(wù)端業(yè)務(wù);剩余虛擬機部署其它業(yè)務(wù)。現(xiàn)以控制器通過Openflow消息向交換設(shè)備下發(fā)流表項為例,當(dāng)前SDN網(wǎng)絡(luò)處于穩(wěn)定運行狀態(tài),各交換設(shè)備的硬件轉(zhuǎn)發(fā)層面已存在指導(dǎo)數(shù)據(jù)轉(zhuǎn)發(fā)的流表項。
實施例一:
在某一時刻SW1的端口S2down掉,導(dǎo)致SW1上虛擬機VM1~VM100的流表項都需要更新。
Controller針對此次端口down事件向SW1發(fā)送Bundle創(chuàng)建消息,在Bundle創(chuàng)建消息中(例如,flags字段)攜帶優(yōu)先級執(zhí)行標識。SW1根據(jù)該Bundle創(chuàng)建消息創(chuàng)建Bundle,記為Bundle1,并標記Bundle1支持優(yōu)先級執(zhí)行。
以Controller下發(fā)VM1的流表項為例,Controller向SW1發(fā)送針對Bundle1的Bundle添加消息,在Bundle添加消息中攜帶用于添加VM1的流表項的Openflow消息(記為Flow-Mod1),并在Bundle添加消息中攜帶Flow-Mod1的優(yōu)先級,如前所述,VM1上部署的是普通業(yè)務(wù),因此,F(xiàn)low-Mod1的優(yōu)先級為2。SW1接收Bundle添加消息后,將Bundle添加消息攜帶的Flow-Mod1添加到已創(chuàng)建的Bundle1中,并標記Flow-Mod1的優(yōu)先級為2。同理,Controller針對每一個虛擬機的流表項發(fā)送Bundle添加消息,完成對應(yīng)Flow-Mod消息的添加,記為Flow-Mod2~Flow-Mod100,并標記對應(yīng)Flow-Mod消息的優(yōu)先級。
Controller發(fā)送針對Bundle1的Bundle執(zhí)行消息,SW1確認Bundle1支持優(yōu)先級執(zhí)行后,對Bundle1中標記了優(yōu)先級的Flow-Mod消息按照Flow-Mod消息的優(yōu)先級進行排序,優(yōu)先執(zhí)行高優(yōu)先級的Flow-Mod消息。如前所述,VM31~VM70部署了服務(wù)端業(yè)務(wù),對應(yīng)Flow-Mod31~Flow-Mod70的優(yōu)先級為3;VM1~VM30部署了普通業(yè)務(wù),對應(yīng)Flow-Mod1~Flow-Mod30的優(yōu)先級為2;VM71~VM100部署了其它業(yè)務(wù),對應(yīng)Flow-Mod71~Flow-Mod100的優(yōu)先級為1。因此,優(yōu)先執(zhí)行Flow-Mod31~Flow-Mod70,再執(zhí)行Flow-Mod1~Flow-Mod30,最后執(zhí)行Flow-Mod71~Flow-Mod100,即優(yōu)先保證服務(wù)端業(yè)務(wù)對應(yīng)流表項優(yōu)先下發(fā)。
而現(xiàn)有技術(shù)中的Bundle機制按照Openflow消息添加到Bundle緩存中的先后順序執(zhí)行,若低優(yōu)先級流表項的Openflow消息先添加到Bundle緩存中,則該低優(yōu)先級流表項的Openflow消息先執(zhí)行,該低優(yōu)先級的流表項先下發(fā)到交換設(shè)備的硬件資源中,指導(dǎo)低優(yōu)先級業(yè)務(wù)轉(zhuǎn)發(fā)。若交換設(shè)備的硬件資源空間不足,后添加到Bundle緩存中的高優(yōu)先級流表項的Openflow消息,在下發(fā)到硬件資源中時會覆蓋已下發(fā)的低優(yōu)先級流表項,造成已生效的低優(yōu)先級業(yè)務(wù)中斷。
而本發(fā)明的Bundle機制由于采用按照優(yōu)先級從高到低的順序執(zhí)行Bundle緩存中的Openflow消息,因此,無論Openflow消息添加到Bundle緩存中的順序如何,都優(yōu)先執(zhí)行高優(yōu)先級的Openflow消息(本發(fā)明對攜帶高優(yōu)先級流表項的Openflow消息設(shè)置高優(yōu)先級),該高優(yōu)先級流表項優(yōu)先下發(fā)到交換設(shè)備的硬件資源中,指導(dǎo)高優(yōu)先級業(yè)務(wù)轉(zhuǎn)發(fā)。當(dāng)交換設(shè)備的硬件資源空間不足時,后執(zhí)行的低優(yōu)先級的Openflow消息攜帶的是低優(yōu)先級流表項,該低優(yōu)先級流表項無法覆蓋已下發(fā)的高優(yōu)先級流表項,因此,不會中斷當(dāng)前正在運行的高優(yōu)先級業(yè)務(wù),提升了網(wǎng)絡(luò)中業(yè)務(wù)的穩(wěn)定性。
實施例二:
在某一時刻,SW1的端口S1從down變?yōu)閡p,Controller向SW1發(fā)送Bundle創(chuàng)建消息,SW1根據(jù)該Bundle創(chuàng)建消息創(chuàng)建Bundle1;Controller向SW1發(fā)送針對Bundle1的Bundle添加消息,在Bundle添加消息中攜帶用于下發(fā)虛擬機流表項的Flow-Mod消息,SW1將Flow-Mod消息添加到Bundle1中,具體描述可參見實例一,這里不再贅述。假設(shè),Controller已通過Bundle添加消息在Bundle1中添加了Flow-Mod1~Flow-Mod60(對應(yīng)VM1~VM60的流表項),此時,端口S1又從up變?yōu)閐own,則Controller針對已添加到Bundle1中的每一個Flow-Mod消息發(fā)送Bundle刪除消息,在Bundle刪除消息中攜帶已添加到Bundle1中的Flow-Mod消息的標識,例如,在Bundle刪除消息中攜帶Flow-Mod1的標識,則SW1根據(jù)該標識刪除Bundle1中的Flow-Mod1,同理,刪除Bundle1中已添加的Flow-Mod2~Flow-Mod60。也就是說,在Controller向SW1發(fā)送Bundle執(zhí)行消息之前,基于端口S1的變化,Controller可反復(fù)添加或刪除Bundle1中的Flow-Mod消息。由于Bundle1中的Flow-Mod消息未真正執(zhí)行,對應(yīng)流表項未下發(fā)到硬件轉(zhuǎn)發(fā)層面,因此,不會造成硬件轉(zhuǎn)發(fā)層面流表項的頻繁增刪,更不會出現(xiàn)由于硬件流表項的刪除導(dǎo)致大量Packet-in報文沖擊控制器,在一定程度上,起到抑制鏈路震蕩的作用。
與前述Openflow消息執(zhí)行方法的實施例相對應(yīng),本發(fā)明還提供了Openflow消息執(zhí)行裝置的實施例。
本發(fā)明Openflow消息執(zhí)行裝置的實施例可以應(yīng)用在交換設(shè)備上。裝置實施例可以通過軟件實現(xiàn),也可以通過硬件或者軟硬件結(jié)合的方式實現(xiàn)。以軟件實現(xiàn)為例,作為一個邏輯意義上的裝置,是通過其所在設(shè)備的處理器運行存儲器中對應(yīng)的計算機程序指令形成的。從硬件層面而言,如圖3所示,為本發(fā)明Openflow消息執(zhí)行裝置所在設(shè)備的一種硬件結(jié)構(gòu)圖,除了圖3所示的處理器以及非易失性存儲器之外,實施例中裝置所在的設(shè)備通常根據(jù)該設(shè)備的實際功能,還可以包括其他硬件,對此不再贅述。
請參考圖4,為本發(fā)明一個實施例中的Openflow消息執(zhí)行裝置的結(jié)構(gòu)示意圖。該Openflow消息執(zhí)行裝置包括標記單元401、排序單元402以及執(zhí)行單元403,其中:
標記單元401,用于在接收到控制器發(fā)送的攜帶Openflow消息和Openflow消息的優(yōu)先級的捆綁Bundle添加消息時,將所述Bundle添加消息攜帶的Openflow消息添加到所述Bundle添加消息對應(yīng)的Bundle緩存中,并標記該添加的Openflow消息的優(yōu)先級;
排序單元402,用于在接收到所述控制器發(fā)送的針對所述Bundle緩存的Bundle執(zhí)行消息時,對所述Bundle緩存中標記了優(yōu)先級的Openflow消息按照優(yōu)先級進行排序;
執(zhí)行單元403,用于按照排序后從高到低的優(yōu)先級順序執(zhí)行所述Bundle緩存中標記了優(yōu)先級的Openflow消息。
進一步地,
所述標記單元401在接收到控制器發(fā)送的攜帶Openflow消息和Openflow消息的優(yōu)先級的Bundle添加消息之前,還用于當(dāng)接收到所述控制器發(fā)送的攜帶優(yōu)先級執(zhí)行標記的Bundle創(chuàng)建消息時,本地創(chuàng)建Bundle緩存,并標記創(chuàng)建的Bundle緩存支持優(yōu)先級執(zhí)行;
所述排序單元402,具體用于若所述Bundle緩存支持優(yōu)先級執(zhí)行,則對所述Bundle緩存中標記了優(yōu)先級的Openflow消息按照優(yōu)先級進行排序。
進一步地,
所述執(zhí)行單元403在按照排序后從高到低的優(yōu)先級順序執(zhí)行所述Bundle緩存中標記了優(yōu)先級的Openflow消息之后,還用于當(dāng)所述Bundle緩存中還存在未標記優(yōu)先級的Openflow消息時,對所述未標記優(yōu)先級的Openflow消息按照添加到所述Bundle緩存中的先后順序執(zhí)行。
進一步地,所述裝置還包括:
刪除單元,用于接收所述控制器發(fā)送的對應(yīng)所述Bundle緩存的Bundle刪除消息,所述Bundle刪除消息中攜帶要刪除的Openflow消息的標識;根據(jù)所述Bundle刪除消息攜帶的Openflow消息的標識,查詢所述Bundle緩存中具有相同標識的Openflow消息進行刪除。
上述裝置中各個單元的功能和作用的實現(xiàn)過程具體詳見上述方法中對應(yīng)步驟的實現(xiàn)過程,在此不再贅述。
對于裝置實施例而言,由于其基本對應(yīng)于方法實施例,所以相關(guān)之處參見方法實施例的部分說明即可。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上。可以根據(jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本發(fā)明方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明保護的范圍之內(nèi)。