流表項查詢方法、設(shè)備及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及網(wǎng)絡(luò)通信領(lǐng)域,特別涉及一種流表項查詢方法、設(shè)備及系統(tǒng)。
【背景技術(shù)】
[0002] 軟件定義網(wǎng)絡(luò)是一種將控制平面與轉(zhuǎn)發(fā)平面相分離的網(wǎng)絡(luò),能使網(wǎng)絡(luò)管理員集中 和自動化管理網(wǎng)絡(luò)設(shè)備,大大降低了網(wǎng)絡(luò)復(fù)雜度。實現(xiàn)軟件定義網(wǎng)絡(luò)的方法有多種,其中 化enflow(開放流)是最受關(guān)注的方法之一。化enflow是一種進行轉(zhuǎn)發(fā)策略控制的核必數(shù) 據(jù)結(jié)構(gòu),支持化enflow的網(wǎng)絡(luò)中,交換機能夠?qū)崿F(xiàn)數(shù)據(jù)層和控制層的分離,每個交換機都 配置有流表,用來進行數(shù)據(jù)包的查找和轉(zhuǎn)發(fā)。
[0003] 現(xiàn)有技術(shù)中,基于現(xiàn)場可編程口陣列(英文;Field-ProgrammableGateArray; 簡稱;FPGA)方案實現(xiàn)的交換機,包括H態(tài)內(nèi)容尋址存儲器(英文;TernaryContent AcMress油IeMemoir;簡稱;TCAM)和靜態(tài)隨機存儲器(英文;StaticRandomAccess Memory;簡稱;SRAM)兩部分流表資源,通過TCAM流表資源和SRAM流表資源設(shè)計的9級流 表來查找和轉(zhuǎn)發(fā)數(shù)據(jù)包。其中,通配流表存儲在TCAM流表資源中,精確流表存儲在SRAM流 表資源中。每個流表包含多個流表項,為了獲取數(shù)據(jù)包轉(zhuǎn)發(fā)的目的端口,采用哈希算法對精 確流表項進行查詢,采用逐條查找方法對精確流表項進行批量查詢。
[0004] 數(shù)據(jù)包采用哈希算法查詢精確流表項是比較快的,但是當(dāng)控制器批量查詢精確流 表項時,由于使用的是逐條查找方法,速度比較慢,特別是當(dāng)精確流表項記錄達到上萬條 時,遍歷整個精確流表的速度是非常慢的,因此精確流表項的查詢速度較慢。
【發(fā)明內(nèi)容】
[0005] 為了解決批量查詢精確流表項時的查詢速度較慢的問題,本發(fā)明實施例提供了一 種流表項查詢方法、設(shè)備及系統(tǒng)。所述技術(shù)方案如下:
[0006] 第一方面,提供一種流表項查詢方法,所述方法包括:
[0007] 接收控制器發(fā)送的第一流模型消息,所述第一流模型消息指示對精確流表的流表 項進行批量查詢;
[0008] 在所述精確流表中確定所述第一流模型消息中的匹配域?qū)?yīng)的第一索引表;
[0009] 確定所述第一索引表的類型,所述類型為第一類型或第二類型,所述第二類型為 包括第二字段的類型,所述第一類型為不包括所述第二字段的類型,所述第二字段的有效 值種類的數(shù)量級大于百級;
[0010] 當(dāng)所述第一索引表的類型為所述第一類型,根據(jù)所述匹配域的值和所述第一索引 表,采用二分法查詢得到流表項;
[0011] 當(dāng)所述第一索引表的類型為所述第二類型,通過哈希算法查詢得到流表項。
[0012] 結(jié)合第一方面,在第一種可實現(xiàn)方式中,
[0013] 所述根據(jù)所述匹配域的值和所述第一索引表,采用二分法查詢得到流表項,包 括:
[0014] 根據(jù)所述匹配域的值,采用二分法對所述第一索引表進行查詢;
[0015] 在所述第一索引表中確定與所述匹配域的值相等的索引值所對應(yīng)的位置;
[0016] 獲取所述位置記錄的流表項作為查詢得到的流表項。
[0017] 結(jié)合第一方面,在第二種可實現(xiàn)方式中,
[0018] 所述在所述精確流表中確定所述第一流模型消息中的匹配域?qū)?yīng)的第一索引表, 包括:
[0019] 獲取所述第一流模型消息中的匹配域的匹配字段組合;
[0020] 根據(jù)所述匹配字段組合依次查找所述精確流表中建立的各個索引表;
[0021] 如果某個索引表的匹配域與所述匹配字段組合相同,確定所述索引表為第一索引 表。
[0022] 結(jié)合第一方面,在第H種可實現(xiàn)方式中,
[0023] 在所述接收控制器發(fā)送的第一流模型消息之前,所述方法還包括:
[0024] 接收所述控制器發(fā)送的用于指示增加流表項的第二流模型消息,所述第二流模型 消息包括第一流表項;
[00巧]確定所述第一流表項的類型;
[0026] 當(dāng)所述第一流表項的類型為通配流表項,將所述第一流表項保存在通配流表中;
[0027] 當(dāng)所述第一流表項的類型為精確流表項,將所述第一流表項保存在精確流表中。
[0028] 結(jié)合第H種可實現(xiàn)方式,在第四種可實現(xiàn)方式中,
[0029] 所述確定所述第一流表項的類型包括:
[0030] 檢測所述第一流表項的匹配域中是否存在掩碼;
[0031] 當(dāng)所述第一流表項的匹配域中不存在掩碼,確定所述第一流表項為精確流表項;
[0032] 當(dāng)所述第一流表項的匹配域中存在掩碼,確定所述第一流表項為通配流表項。
[0033] 結(jié)合第H種可實現(xiàn)方式或第四種可實現(xiàn)方式,在第五種可實現(xiàn)方式中,
[0034] 在所述將所述第一流表項保存在精確流表中之后,所述方法還包括:
[0035] 當(dāng)所述第一流表項的匹配域字段包括所述第二字段,為所述第一流表項建立第二 類型的索引表;
[0036] 當(dāng)所述第一流表項的匹配域字段不包括所述第二字段,為所述第一流表項建立第 一類型的索引表。
[0037] 結(jié)合第五種可實現(xiàn)方式,在第六種可實現(xiàn)方式中,
[0038] 在所述為所述第一流表項建立第一類型的索引表之后,所述方法還包括:
[0039] 采用動態(tài)數(shù)組方式存儲所述第一類型的索引表中的字段值,并將所述字段值作為 所述第一類型的索引表的索引值。
[0040] 結(jié)合第一方面,在第走種可實現(xiàn)方式中,
[0041] 在所述接收控制器發(fā)送的第一流模型消息之前,所述方法還包括:
[0042] 在與所述控制器握手成功之后,向所述控制器上報九級流表;
[0043] 其中,每級所述流表支持開放流協(xié)議定義的所有匹配域,支持所述開放流協(xié)議定 義的所有動作,每個所述匹配域都支持通配。
[0044] 第二方面,提供一種流表項查詢設(shè)備,所述流表項查詢設(shè)備包括:
[0045] 第一接收單元,用于接收控制器發(fā)送的第一流模型消息,所述第一流模型消息指 示對精確流表的流表項進行批量查詢;
[0046] 第一確定單元,用于在所述精確流表中確定所述第一流模型消息中的匹配域?qū)?yīng) 的第一索引表;
[0047] 第二確定單元,用于確定所述第一索引表的類型,所述類型為第一類型或第二類 型,所述第二類型為包括第二字段的類型,所述第一類型為不包括所述第二字段的類型,所 述第二字段的有效值種類的數(shù)量級大于百級;
[0048] 第一獲取單元,用于在所述第一索引表的類型為所述第一類型時,根據(jù)所述匹配 域的值和所述第一索引表,采用二分法查詢得到流表項;
[0049] 第二獲取單元,用于在所述第一索引表的類型為所述第二類型時,通過哈希算法 查詢得到流表項。
[0050] 結(jié)合第二方面,在第一種可實現(xiàn)方式中,
[0051] 所述第一獲取單元,包括:
[0052] 查詢模塊,用于根據(jù)所述匹配域的值,采用二分法對所述第一索引表進行查詢;
[0053] 第一確定模塊,用于在所述第一索引表中確定與所述匹配域的值相等的索引值所 對應(yīng)的位置;
[0054] 第一獲取模塊,用于獲取所述位置記錄的流表項作為查詢得到的流表項。
[00巧]結(jié)合第二方面,在第二種可實現(xiàn)方式中,
[0056] 所述第一確定單元,包括:
[0057] 第二獲取模塊,用于獲取所述第一流模型消息中的匹配域的匹配字段組合;
[0058] 查找模塊,用于根據(jù)所述匹配字段組合依次查找所述精確流表中建立的各個索引 表;
[0059] 第二確定模塊,用于在某個索引表的匹配域與所述匹配字段組合相同時,確定所 述索引表為第一索引表。
[0060] 結(jié)合第二方面,在第H種可實現(xiàn)方式中,所述流表項查詢設(shè)備還包括:
[0061] 第二接收單元,用于接收所述控制器發(fā)送的用于指示增加流表項的第二流模型消 息,所述第二流模型消息包括第一流表項;
[0062] 第H確定單元,用于確定所述第一流表項的類型;
[0063] 第一保存單元,用于在所述第一流表項的類型為通配流表項時,將所述第一流表 項保存在通配流表中;
[0064] 第二保存單元,用于在所述第一流表項的類型為精確流表項時,將所述第一流表 項保存在精確流表中。
[0065] 結(jié)合第H種可實現(xiàn)方式,在第四種可實現(xiàn)方式中,
[0066] 所述第H確定單元,包括:
[0067] 檢測模塊,用于檢測所述第一流表項的匹配域中是否存在掩碼;
[0068] 第H確定模塊,用于在所述第一流表項的匹配域中不存在掩碼時,確定所述第一 流表項為精確流表項;
[0069] 第四確定模塊,用于在所述第一流表項的匹配域中存在掩碼時,確定所述第一流 表項為通配流表項。
[0070] 結(jié)合第H種可實現(xiàn)方式或第四種可實現(xiàn)方式,在第五種可實現(xiàn)方式中,
[0071] 所述流表項查詢設(shè)備還包括:
[0072] 第一建立單元,用于在所述第一流表項的匹配域字段包括所述第二字段時,為所 述第一流表項建立第二類型的索引表;
[0073] 第二建立單元,用于在所述第一流表項的匹配域字段不包括所述第二字段時,為 所述第一流表項建立第一類型的索引表。
[0074] 結(jié)合第五種可實現(xiàn)方式,在第六種可實現(xiàn)方式中,
[00巧]所述流表項查詢設(shè)備還包括:
[0076] 存儲單元,用于采用動態(tài)數(shù)組方式存儲所述第一類型的索引表中的字段值,并將 所述字段值作為所述第一類型的索引表的索引值。
[0077] 結(jié)合第二方面,在第走種可實現(xiàn)方式中,
[0078] 所述流表項查詢設(shè)備還包括:
[0079] 上報單元,用于在與所述控制器握手成功之后,向所述控制器上報九級流表;
[0080] 其中,每級所述流表支持開放流協(xié)議定義的所有匹配域,支持所述開放流協(xié)議定 義的所有動作,每個所述匹配域都支持通配。
[0081] 第H方面,提供一種流表項查詢系統(tǒng),包括:
[0082] 第二方面任一所述的流表項查詢設(shè)備;
[0083]W及控制器和終端。
[0084] 本發(fā)明提供了一種流表項查詢方法、設(shè)備及系統(tǒng),由于能夠在精確流表中確定流 模型消息中的匹配域?qū)?yīng)的索引表,并根據(jù)索引表的類型,采用二分法查詢或哈希算法批 量查詢流表項,相較于現(xiàn)有的批量查詢流表項時采用的逐條查詢,該查詢方法的速度更快。 因此,在流表項批量查詢過程中,提高了精確流表項的查詢速度。
【附圖說明】
[0085] 為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使 用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于 本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可W根據(jù)送些附圖獲得其他 的