報文轉(zhuǎn)發(fā)方法和設(shè)備的制造方法
【技術(shù)領(lǐng)域】
[0001]本申請涉及網(wǎng)絡(luò)通信技術(shù),特別涉及報文轉(zhuǎn)發(fā)方法和設(shè)備。
【背景技術(shù)】
[0002]在軟件自定義網(wǎng)絡(luò)(SDN:Soft Defined Networks)中,開放虛擬交換機(OVS:Open vSwitch)都設(shè)有兩張流表,一張為內(nèi)核流表,另一張為用戶態(tài)流表。其中,用戶態(tài)流表為多級流表,內(nèi)核流表為單級流表。
[0003]如圖1所示,當(dāng)OVS收到虛擬機(VM -Virtual Machine) A發(fā)送的報文后,解析報文頭中的特征字段,比如源MAC、目的MAC、源IP、目的IP、協(xié)議類型、源端口、目的端口等字段,依據(jù)該特征字段從內(nèi)核流表中查詢匹配的流表項;
[0004]如果在內(nèi)核流表中查詢到特征字段匹配的流表項,依據(jù)匹配的流表項對報文執(zhí)行轉(zhuǎn)發(fā);
[0005]如果在內(nèi)核流表中未查詢到特征字段匹配的流表項,進一步利用該特征字段從用戶態(tài)流表中查詢匹配的流表項;
[0006]如果在用戶態(tài)流表中查詢到特征字段匹配的流表項,依據(jù)該流表項中的動作對報文執(zhí)行轉(zhuǎn)發(fā),并將該流表項下發(fā)至內(nèi)核流表;
[0007]如果在用戶態(tài)流表中未查詢到特征字段匹配的流表項,將報文攜帶在數(shù)據(jù)包接入(Packet In)消息中上送到SDN控制器(controller),以請求SDN控制器下發(fā)報文的特征字段匹配的流表項,依據(jù)請求的流表項對報文執(zhí)行轉(zhuǎn)發(fā),并將該請求的流表項記錄至本OVS的用戶態(tài)流表。
[0008]從上面描述可以看出,OVS在接收到報文后,都需要先從內(nèi)核流表查詢匹配的流表項,如果查詢到則根據(jù)查詢到的流表項對報文執(zhí)行轉(zhuǎn)發(fā)。在應(yīng)用中,同一個VM可能會連續(xù)發(fā)送多個具有相同特征字段的報文,而OVS每次收到報文,都從內(nèi)核流表查詢匹配的流表項會降低OVS轉(zhuǎn)發(fā)報文的效率,且開銷也比較大。
【發(fā)明內(nèi)容】
[0009]本申請?zhí)峁┝藞笪霓D(zhuǎn)發(fā)方法和設(shè)備,以提高報文轉(zhuǎn)發(fā)效率。
[0010]本申請?zhí)峁┑募夹g(shù)方案包括:
[0011]一種報文轉(zhuǎn)發(fā)的方法,該方法應(yīng)用于軟件自定義網(wǎng)絡(luò)SDN中的開放虛擬交換機OVS,包括:
[0012]通過連接虛擬機VM的虛擬機端口接收報文;
[0013]從所述報文中解析出所述報文攜帶的特征字段;
[0014]檢查所述虛擬機端口對應(yīng)的流緩存flow cache表中的流表項是否與所述特征字段匹配,
[0015]如果是,依據(jù)所述flow cache表中所述特征字段匹配的流表項轉(zhuǎn)發(fā)報文;
[0016]如果否,從本OVS的內(nèi)核流表中找到所述特征字段匹配的流表項,依據(jù)從內(nèi)核流表中找到的所述特征字段匹配的流表項轉(zhuǎn)發(fā)報文,并將所述flow cache表中的流表項更新為從所述內(nèi)核流表中找到的所述特征字段匹配的流表項。
[0017]—種報文轉(zhuǎn)發(fā)的設(shè)備,該設(shè)備應(yīng)用于軟件自定義網(wǎng)絡(luò)SDN中的開放虛擬交換機OVS,包括:
[0018]接收單元,用于通過連接虛擬機VM的虛擬機端口接收報文;
[0019]解析單元,用于從所述報文中解析出所述報文攜帶的特征字段;
[0020]檢查單元,用于檢查所述虛擬機端口對應(yīng)的流緩存flow cache表中的流表項是否與所述特征字段匹配,
[0021]處理單元,用于在所述檢查單元的檢查結(jié)果為是時,依據(jù)所述flow cache表中所述特征字段匹配的流表項轉(zhuǎn)發(fā)報文;
[0022]以及,在所述檢查單元的檢查結(jié)果為否時,從本OVS的內(nèi)核流表中找到所述特征字段匹配的流表項,依據(jù)從內(nèi)核流表中找到的所述特征字段匹配的流表項轉(zhuǎn)發(fā)報文,并將所述flow cache表中的流表項更新為從所述內(nèi)核流表中找到的所述特征字段匹配的流表項。
[0023]由以上技術(shù)方案可以看出,本發(fā)明中,當(dāng)OVS通過虛擬機接口接收到報文時,如果該虛擬機接口對應(yīng)的flow cache表中存在與報文攜帶的特征字段匹配的流表項,則可直接通過flow cache表中存在的與特征字段匹配的流表項轉(zhuǎn)發(fā)報文,無需再通過查詢內(nèi)核流表進行報文轉(zhuǎn)發(fā),能夠極大地提高報文轉(zhuǎn)發(fā)效率。
【附圖說明】
[0024]圖1為現(xiàn)有報文轉(zhuǎn)發(fā)示意圖;
[0025]圖2為本發(fā)明提供的方法流程圖。
[0026]圖3為本發(fā)明實施例提供的組網(wǎng)示意圖;
[0027]圖4為本發(fā)明提供的設(shè)備結(jié)構(gòu)圖。
【具體實施方式】
[0028]為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面結(jié)合附圖和具體實施例對本發(fā)明進行詳細描述。
[0029]參見圖2,圖2為本發(fā)明提供的方法流程圖。在該方法中,預(yù)先針對OVS上的虛擬機端口(vport)配置對應(yīng)的流緩存(flow cache)表,在初始時,每一虛擬機端口對應(yīng)的flowcache表為默認值。這里,虛擬機端口為OVS上連接VM的端口,比如圖3所示的OVS連接VMl 的 vport 1、OVS 連接 VM2 的 vport 2、OVS 連接 VM3 的 vport3。
[0030]基于上述配置,則應(yīng)用于0VS,圖2所示的方法流程可包括以下步驟:
[0031]步驟201,通過虛擬機端口接收報文。
[0032]步驟202,從所述報文中解析出所述報文攜帶的特征字段。
[0033]作為本發(fā)明的一個實施例,這里的特征字段可為報文頭中的字段,比如源MAC、目的MAC、源IP、目的IP、協(xié)議類型、源端口、目的端口等字段,本發(fā)明并不具體限定。
[0034]步驟203,檢查所述虛擬機端口對應(yīng)的flow cache表中的流表項是否與所述特征字段匹配,如果是,執(zhí)行步驟204,如果否,執(zhí)行步驟205。
[0035]步驟204,依據(jù)所述flow cache表中所述特征字段匹配的流表項轉(zhuǎn)發(fā)報文。結(jié)束當(dāng)前流程。
[0036]通過步驟204可以看出,當(dāng)flow cache表中存在與特征字段匹配的流表項時,可直接通過flow cache表中與特征字段匹配的流表項轉(zhuǎn)發(fā)報文,無需再通過查詢內(nèi)核流表進行報文轉(zhuǎn)發(fā),這能夠極大地提高報文轉(zhuǎn)發(fā)效率。
[0037]步驟205,從本OVS的內(nèi)核流表中找到所述特征字段匹配的流表項,依據(jù)從內(nèi)核流表中找到的所述特征字段匹配的流表項轉(zhuǎn)發(fā)報文,并將所述flowcache表中的流表項更新為從所述內(nèi)核流表中找到的所述特征字段匹配的流表項。
[0038]作為本發(fā)明的一個實施例,在本步驟205中,如果從內(nèi)核流表中未查找到所述特征字段匹配的流表項,則可進一步執(zhí)行以下步驟:
[0039]檢查本OVS的用戶態(tài)流表中是否存在所述特征字段匹配的流表項,
[0040]如果否,請求本OVS連接的SDN控制器下發(fā)所述特征字段匹配的流表項,依據(jù)所述SDN控制器下發(fā)的所述特征字段匹配的流表項轉(zhuǎn)發(fā)所述報文,并將所述SDN控制器下發(fā)的所述特征字段匹配的流表項記錄至所述用戶態(tài)流表。這里,請求本OVS連接的SDN控制器下發(fā)所述特征字段匹配的流表項的方式可以通過向SDN控制器發(fā)送Packet In消息實現(xiàn)。
[0041]如果是,依據(jù)所述用戶態(tài)流表中所述特征字段匹配的流表項轉(zhuǎn)發(fā)所述報文,并將所述用戶態(tài)流表中所述特征字段匹配的流表項下發(fā)至內(nèi)核流表。之后,OVS再次通過上述虛擬機端口收到攜帶所述特征字段的報文時,就會基于步驟203、步驟205將內(nèi)核流表中與所述特征字段匹配的流表項更新到該虛擬機端口對應(yīng)的flow cache表中,這能夠保證后續(xù)攜帶所述特征字段的報文都直接通過查詢flow cache表進行轉(zhuǎn)發(fā),無需再通過查詢內(nèi)核流表進行報文轉(zhuǎn)發(fā),能夠極大地提高報文轉(zhuǎn)發(fā)效率。
[0042]至此,完成圖2所示的流程。
[0043]通過圖2所示的流程可以看出,當(dāng)flow cache表中存在與報文攜帶的特征字段匹配的流表項時,可直接通過flow cache表中存在的與特征字段匹配的流表項轉(zhuǎn)發(fā)報文,無需再通過查詢內(nèi)核流表進行報文轉(zhuǎn)發(fā),能夠極大地提高報文轉(zhuǎn)發(fā)效率。該報文轉(zhuǎn)發(fā)效率的提高幅度可通過以下舉例體現(xiàn):
[0044]比如,假設(shè)一個VM每秒處理20個并發(fā)會話請求,并針對每一會話請求回復(fù)5個報文,則如果每一個報文在內(nèi)核流表中查詢平均需要5次匹配,則按照現(xiàn)有方案需要每秒內(nèi)在內(nèi)核流表進行20*5*5 = 500次匹配,而采用本發(fā)明的上述圖2所示流程,則只需要20*5+80*1 = 180次匹配,其中,20*5表示各個會話請求的首個回復(fù)報文在內(nèi)核流表查詢所需要的匹配次數(shù),80*1表示各個會話請求的除首個回復(fù)報文之外的剩余回復(fù)報文在flowcache表查詢所需要的匹配次數(shù)??梢钥闯?,采用本發(fā)明,有效的提升實際應(yīng)用網(wǎng)絡(luò)中OVS內(nèi)核的轉(zhuǎn)發(fā)性能。
[0045]作為本發(fā)明的一個實施例,在本發(fā)明中,上述步驟205中將flow cache表中的流表項更新為從內(nèi)核流表中找到的所述特征字段匹配的流表項具體實現(xiàn)時可有以下兩種實現(xiàn)方式:
[0046]方式1:
[0047]本方式I下,將flow cache表中的流表項更新為從內(nèi)核流表中找到的所述特征字段匹配的流表項可包括:
[0048]檢查flow cache表是否存有流表項,
[0049]如果否,將從內(nèi)核流表中找到的所述特征字段匹配的流表項拷貝至所述flowcache 表;
[0050]如果是,拷貝從內(nèi)核流表中找到的所述特征字段匹配的流表項,將flow cache表中的流表項更新為拷貝的流表項。
[0051]可以看出,本方式I下,flow cache表中僅記錄