一種流表匹配的方法、裝置和OpenFlow交換系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)交換領(lǐng)域,具體涉及一種流表匹配的方法、裝置和化enFlow交換 系統(tǒng)。
【背景技術(shù)】
[0002] 開放流(化enFlow)技術(shù)允許對一個網(wǎng)絡(luò)進(jìn)行編程,好像該個網(wǎng)絡(luò)就是一臺計(jì)算機(jī) 一樣。OpenFlow和軟件定義網(wǎng)絡(luò)(SoftwareDefinedNetwork,簡稱SDN)可將物理網(wǎng)絡(luò)的抽 象層直接提供給控制元件,允許通過軟件設(shè)置和操作網(wǎng)絡(luò),化enFlow技術(shù)的核也思想是將 原本完全由交換機(jī)/路由器控制的數(shù)據(jù)包轉(zhuǎn)發(fā)過程,轉(zhuǎn)化為由化enFlow交換機(jī)(化enFlow Switch)和控制服務(wù)器(Controller)分別完成的獨(dú)立過程。
[0003] 化enFlow交換機(jī)由流表(FlowT油1日)、安全通道和化enFlow協(xié)議H部分組成,其 中,流表由匹配域(MatchField)、計(jì)數(shù)器(Counters)和指令集(Instructions)組成,用于 存儲數(shù)據(jù)包的轉(zhuǎn)發(fā)規(guī)則,安全通道是連接化enFlow交換機(jī)到控制器的接口,而化enFlow協(xié) 議用來描述控制器和交換機(jī)之間交互所用信息的標(biāo)準(zhǔn)。化enFlow交換機(jī)在化enFlow網(wǎng)絡(luò) 中執(zhí)行來自化enFlow控制器的命令,根據(jù)控制器下發(fā)的流規(guī)則對收到的數(shù)據(jù)包進(jìn)行轉(zhuǎn)發(fā)。 當(dāng)化enFlow交換機(jī)對于某一個收到的數(shù)據(jù)包無法找到對應(yīng)的轉(zhuǎn)發(fā)規(guī)則時,則將該數(shù)據(jù)包 轉(zhuǎn)發(fā)給控制器,由控制器決定該包的轉(zhuǎn)發(fā)動作,并下發(fā)新的轉(zhuǎn)發(fā)規(guī)則到化enFlow交換機(jī)。
[0004] 現(xiàn)有的化enFlow交換機(jī)所進(jìn)行的數(shù)據(jù)包匹配只能基于有限的字段進(jìn)行,即,其流 表的匹配域不能動態(tài)更新。例如,假設(shè)流表的匹配域只有協(xié)議規(guī)定的字段A、字段B或字段 CH個字段用于數(shù)據(jù)包的匹配,當(dāng)一個數(shù)據(jù)包中用于表征該數(shù)據(jù)包對應(yīng)的數(shù)據(jù)流的特征字 段是字段D,即不是字段A、字段B和字段C H個字段中的任意一個時,若化enFlow交換機(jī) 進(jìn)行數(shù)據(jù)包的匹配,則需要將流表的匹配域擴(kuò)展至字段A、字段B、字段C和字段D。該一擴(kuò) 展往往需要付出一定的代價,例如,重新更改硬件邏輯,對當(dāng)前軟件和/或硬件進(jìn)行升級。
[0005] 可見,現(xiàn)有的Switch匹配域不能動態(tài)更新,如果需要更新匹配域,則當(dāng)前軟硬件 必須要升級才能支持,無法滿足業(yè)務(wù)需求。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明實(shí)施例提供一種流表匹配的方法、裝置和化enFlow交換系統(tǒng),W在不改變 現(xiàn)有硬件邏輯和標(biāo)準(zhǔn)協(xié)議的基礎(chǔ)上實(shí)現(xiàn)任意數(shù)據(jù)流中任意字段的匹配。
[0007] 第一方面,一種流表匹配的方法,包括;接收控制器針對第一流表下發(fā)的跳轉(zhuǎn)指令 和匹配指令,所述匹配指令用于指示將匹配字段映射為映射值,并將所述映射值寫入元數(shù) 據(jù)Metadata域,傳遞給第二流表,所述匹配指令中包含用于將所述匹配字段映射為所述映 射值的參數(shù),所述跳轉(zhuǎn)指令用于指示跳轉(zhuǎn)的第二流表;
[0008] 在所述第一流表中建立第一流表項(xiàng),所述第一流表項(xiàng)的指令集為所述跳轉(zhuǎn)指令和 所述匹配指令,其中,所述匹配指令用于交換機(jī)收到數(shù)據(jù)包后,根據(jù)所述匹配指令中包含的 用于將所述匹配字段映射為所述映射值的參數(shù),將所述匹配字段映射為映射值Mp,并將所 述映射值Mp寫入元數(shù)據(jù)Metadata域,所述跳轉(zhuǎn)指令用于跳轉(zhuǎn)到所述第二流表,將所述數(shù)據(jù) 包和所述元數(shù)據(jù)Metadata域中寫入的所述映射值Mp傳遞給所述第二流表;
[0009]接收所述控制器針對所述第二流表下發(fā)的流模式消息,所述流模式消息包含行為 指令和用于匹配所述匹配字段的元數(shù)據(jù)Metadata值;
[0010] 在所述第二流表中建立第二流表項(xiàng),所述第二流表項(xiàng)的指令集為所述行為指令, 所述第二流表項(xiàng)的匹配域?yàn)樗鲈獢?shù)據(jù)Metedata值,其中,所述第二流表項(xiàng)的匹配域用于 與所述映射值Mp進(jìn)行匹配,所述行為指令用于根據(jù)匹配結(jié)果,對所述數(shù)據(jù)包進(jìn)行處理。
[0011] 第二方面,一種流表匹配的方法,所述方法包括;接收控制器針對第一流表下發(fā)的 第一跳轉(zhuǎn)指令和第一匹配指令,所述第一匹配指令用于指示將第一匹配字段映射為第一映 射值,并將所述第一映射值寫入元數(shù)據(jù)Metadata域,傳遞給第二流表,所述第一匹配指令 中包含用于將所述第一匹配字段映射為所述第一映射值的參數(shù),所述第一跳轉(zhuǎn)指令用于指 示跳轉(zhuǎn)的第二流表,其中,需要匹配的字段包含Nb個字節(jié),且Nb=n*Nm,n為大于1的整數(shù), Nm等于流表的元數(shù)據(jù)Metadata域可包含的最大字節(jié)數(shù),所述第一匹配字段為所述需要匹 配的字段中的第1字節(jié)至第Nm字節(jié);
[0012] 在所述第一流表中建立第一流表項(xiàng),所述第一流表項(xiàng)的指令集為所述第一跳轉(zhuǎn)指 令和所述第一匹配指令,其中,所述第一匹配指令用于交換機(jī)收到數(shù)據(jù)包后,根據(jù)所述第一 匹配指令中包含的用于將所述第一匹配字段映射為所述第一映射值的參數(shù),將所述第一 匹配字段映射為第一映射值Mpl,并將所述第一映射值Mpl寫入所述第一流表的的元數(shù)據(jù) Metadata域,所述第一跳轉(zhuǎn)指令用于跳轉(zhuǎn)到所述第二流表,將所述數(shù)據(jù)包和所述第一流表 的的元數(shù)據(jù)Metadata域中寫入的所述第一映射值Mpl傳遞給所述第二流表;
[0013] 接收所述控制器針對n-1個流表下發(fā)的n-1個流模式消息,其中,針對第i個流表 下發(fā)第i個流模式消息,n>i> 2,所述第i個流模式消息中包含第i個固齡指令、第i個 匹配指令和用于匹配第i個匹配字段的第i個元數(shù)據(jù)Metadata值,所述第i個匹配指令用 于指示將所述第i個匹配字段映射為第i個映射值,所述第i個匹配字段為所述需要匹配 的字段中的第(i-l)*Nm+l字節(jié)至第i*Nm個字節(jié),所述第i個匹配指令中包含用于將所述 第i個匹配字段映射為所述第i個映射值的參數(shù),所述第i個跳轉(zhuǎn)指令用于指示跳轉(zhuǎn)的下 一流表,所述第二流表為第2個流表,所述第i個流表的下一流表為第i+1個流表,所述第 n個流表的下一流表為最終流表;
[0014] 在所述n-1個流表中建立n-1個流表項(xiàng),其中,在所述第i個流表中建立第i個流 表項(xiàng),所述第i個流表項(xiàng)的匹配域?yàn)樗龅趇個元數(shù)據(jù)Metedata值,所述第i個流表項(xiàng)的 指令集為所述第i個跳轉(zhuǎn)指令和所述第i個匹配指令,所述第i個流表項(xiàng)的匹配域用于與 第i-1個映射值Mpi-1進(jìn)行匹配,并根據(jù)匹配結(jié)果,執(zhí)行所述第i個跳轉(zhuǎn)指令和所述第i個 匹配指令,所述第一映射值Mpl為第1個映射值Mpl,所述第i個匹配指令用于根據(jù)所述第 i個匹配指令中包含的用于將所述第i個匹配字段映射為所述第i個映射值的參數(shù),將所述 第i個匹配字段映射為第i個映射值Mpi,并將所述第i個映射值Mpi寫入所述第i個流表 的元數(shù)據(jù)Metadata域,所述第i個跳轉(zhuǎn)指令用于跳轉(zhuǎn)到所述第i個流表的下一流表,將所 述數(shù)據(jù)包和所述第i個流表的元數(shù)據(jù)Metadata域中寫入的所述第i個映射值Mpi傳遞給 所述第i個流表的下一流表;
[0015]接收所述控制器針對所述最終流表下發(fā)的最終流模式消息,所述最終流模式消息 包含行為指令和用于匹配第n個匹配字段的第n個元數(shù)據(jù)Metadata值;
[0016] 在所述最終流表中建立最終流表項(xiàng),所述最終流表項(xiàng)的指令集為所述行為指令, 所述最終流表項(xiàng)的匹配域?yàn)樗龅趎個元數(shù)據(jù)Metedata值,其中,所述最終流表項(xiàng)的匹配 域用于與所述第n個映射值Mpn進(jìn)行匹配,所述行為指令用于根據(jù)匹配結(jié)果,對所述數(shù)據(jù)包 進(jìn)行處理。
[0017] 第H方面,一種流表匹配的裝置,所述裝置包括;第一接收模塊,用于接收控制器 針對第一流表下發(fā)的跳轉(zhuǎn)指令和匹配指令,所述匹配指令用于指示將匹配字段映射為映射 值,并將所述映射值寫入元數(shù)據(jù)Metadata域,傳遞給第二流表,所述匹配指令中包含用于 將所述匹配字段映射為所述映射值的參數(shù),所述跳轉(zhuǎn)指令用于指示跳轉(zhuǎn)的第二流表;
[0018] 第一建立模塊,用于在所述第一流表中建立第一流表項(xiàng),所述第一流表項(xiàng)的指令 集為所述跳轉(zhuǎn)指令和所述匹配指令,其中,所述匹配指令用于交換機(jī)收到數(shù)據(jù)包后,根據(jù)所 述匹配指令中包含的用于將所述匹配字段映射為所述映射值的參數(shù),將所述匹配字段映射 為映射值Mp,并將所述映射值Mp寫入元數(shù)據(jù)Metadata域,所述跳轉(zhuǎn)指令用于跳轉(zhuǎn)到所述第 二流表,將所述數(shù)據(jù)包和所述元數(shù)據(jù)Metadata域中寫入的所述映射值Mp傳遞給所述第二 流表;
[0019] 第二接收模塊,用于接收所述控制器針對所述第二流表下發(fā)的流模式消息,所述 流模式消息包含行為指令和用于匹配所述匹配字段的元數(shù)據(jù)Metadata值;
[0020] 第二建立模塊,用于在所述第二流表中建立第二流表項(xiàng),所述第二流表項(xiàng)的指令 集為所述行為指令,所述第二流表項(xiàng)的匹配域?yàn)樗鲈獢?shù)據(jù)Metedata值,其中,所述第二 流表項(xiàng)的匹配域用于與所述映射值Mp進(jìn)行匹配,所述行為指令用于根據(jù)匹配結(jié)果,對所述 數(shù)據(jù)包進(jìn)行處理。
[0021] 第四方面,一種流表匹配的裝置,所述裝置包括:第H接收模塊,用于接收控制 器針對第一流表下發(fā)的第一跳轉(zhuǎn)指令和第一匹配指令,所述第一匹配指令用于指示將第 一匹配字段映射為第一映射值,并將所述第一映射值寫入元數(shù)據(jù)Metadata域,傳遞給第 二流表,所述第一匹配指令中包含用于將所述第一匹配字段映射為所述第一映射值的參 數(shù),所述第一跳轉(zhuǎn)指令用于指示跳轉(zhuǎn)的第二流表,其中,需要匹配的字段包含Nb個字節(jié),且 Nb=n*Nm,n為大于1的整數(shù),Nm等于流表的元數(shù)據(jù)Metadata域可包含的最大字節(jié)數(shù),所述 第一匹配字段為所述需要匹配的字段中的第1字節(jié)至第Nm字節(jié);
[0022] 第H建立模塊,用于在所述第一流表中建立第一流表項(xiàng),所述第一流表項(xiàng)的指令 集為所述第一跳轉(zhuǎn)指令和所述第一匹配指令,其中,所述第一匹配指令用于交換機(jī)收到數(shù) 據(jù)包后,根據(jù)所述第一匹配指令中包含的用于將所述第一匹配字段映射為所述第一映射值 的參數(shù),將所述第一匹配字段映射為第一映射值Mpl,并將所述第一映射值Mpl寫入所述第 一流表的的元數(shù)據(jù)Metadata域,所述