本發(fā)明涉及網(wǎng)絡(luò)通信領(lǐng)域,更具體的,涉及一種基于后綴索引匹配ip地址的方法及系統(tǒng)。
背景技術(shù):
::路由器作為internet互連的核心設(shè)備,其主要功能是按照ip分組中的目的地址轉(zhuǎn)發(fā)分組,查找路由表(指路由器或者其他互聯(lián)網(wǎng)網(wǎng)絡(luò)設(shè)備上存儲的一張路由信息表,該表中存有到達特定網(wǎng)絡(luò)終端的路徑)決定將分組發(fā)往哪個端口。路由器的處理速度是網(wǎng)絡(luò)通信的主要瓶頸之一,其性能直接影響著網(wǎng)絡(luò)互聯(lián)的質(zhì)量。高效的路由表查找算法是影響路由器轉(zhuǎn)發(fā)效率的重要因素。隨著internet網(wǎng)絡(luò)規(guī)模的擴大,路由表的大小與日俱增,這個問題隨著ipv6網(wǎng)絡(luò)協(xié)議的逐步應(yīng)用而更加突出。同ipv4的cidr(無類域間路由,classlessinter-domainrouting)概念類似,ipv6地址也被認為是無類別的,路由查找時必須要進行最長前綴匹配lpm(longestprefixmatching)而不是精確匹配,不僅需要與地址前綴的比特值進行匹配查找,而且還要考慮地址前綴長度。這些都給路由表查找算法效率的提高帶來了挑戰(zhàn)。技術(shù)實現(xiàn)要素:本發(fā)明為解決以上現(xiàn)有路由表查找算法查找效率不高的缺陷,提供了一種基于后綴索引匹配ip地址的方法。為實現(xiàn)以上發(fā)明目的,采用的技術(shù)方案是:一種基于后綴索引匹配ip地址的方法,包括以下步驟:s1.對ip路由數(shù)據(jù)構(gòu)建后綴索引;s2.將ipv6地址平均分為k段,然后分別為每段ipv6地址構(gòu)建不同的哈希表,每張哈希表存放段內(nèi)不同后綴在后綴索引中的區(qū)間值;s3.對于給定的目的ip地址,將其平均分為k段,然后將k段目的ip地址通過二分查找法在k張哈希表中查找匹配的后綴索引區(qū)間,并記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù);s4.根據(jù)記錄的段數(shù)進行段內(nèi)回溯查找,輸出目的ip的路由信息。優(yōu)選地,所述步驟s1構(gòu)建后綴索引的具體過程如下:ip路由數(shù)據(jù)中的各個ipv6地址對應(yīng)的前綴構(gòu)成集合s,集合s中的每個前綴視為一個字符串并在末尾添加#,#<0<1,即每個ipv6地址包括有129個后綴;將集合s中的所有前綴首尾相連組成一個字符串t,構(gòu)建字符串t的構(gòu)建后綴索引。優(yōu)選地,所述步驟s2構(gòu)建哈希表的具體過程如下:將ipv6地址平均分為16段,然后為各段ipv6地址分別構(gòu)建一個哈希表,16個哈希表分別為h_table1~h_table16,其中h_table1~h_table15內(nèi)分別記錄有各自段內(nèi)的所有以00000000~11111111開始的后綴在后綴索引中的區(qū)間值;h_table16記錄所有段內(nèi)的所有以00000000#~11111111#開始的后綴在后綴索引中的區(qū)間值。優(yōu)選地,所述步驟s4通過二分查找法查找匹配的后綴索引區(qū)間的具體過程如下:(1)首先對目的ip地址第8段在h_table8內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù),然后執(zhí)行步驟(2),否則執(zhí)行步驟(10);(2)對目的ip地址第12段在h_table12內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù),然后執(zhí)行步驟(3),否則執(zhí)行步驟(7);(3)對目的ip地址第14段在h_table14內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù),然后執(zhí)行步驟(4),否則執(zhí)行步驟(6);(4)對目的ip地址第15段在h_table15內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù),然后執(zhí)行步驟(5);(5)對目的ip地址第16段在h_table16內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù);(6)對目的ip地址第13段在h_table13內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù);(7)對目的ip地址第10段在h_table10內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù),然后執(zhí)行步驟(8),否則執(zhí)行步驟(9);(8)對目的ip地址第11段在h_table11內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù);(9)對目的ip地址第9段在h_table9內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù);(10)對目的ip地址第4段在h_table4內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù),然后執(zhí)行步驟(11),否則執(zhí)行步驟(14);(11)對目的ip地址第6段在h_table6內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù),然后執(zhí)行步驟(12),否則執(zhí)行步驟(13);(12)對目的ip地址第7段在h_table7內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù);(13)對目的ip地址第5段在h_table5內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù);(14)對目的ip地址第2段在h_table2內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù),然后執(zhí)行步驟(15),否則執(zhí)行步驟(16);(15)對目的ip地址第3段在h_table3內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù);(16)對目的ip地址第1段在h_table1內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù)。優(yōu)選地,定義f為字符串t的所有后綴按字典順序排序后的首字符組成的數(shù)組;定義bwt為字符串t的所有后綴按字典順序排序后的最后一個字符組成的數(shù)組;所述步驟s5進行段內(nèi)回溯查找的具體步驟如下:s101.根據(jù)記錄的段數(shù),將下一段內(nèi)的目的ip地址倒置,其最后一個字符在f中的起始位置標(biāo)記為first,結(jié)束位置標(biāo)記為last;s102.查詢first與last之間的所有行對應(yīng)的bwt中是否存在與倒置的ip地址的倒數(shù)第i個字符相同的字符,i的初始值為2;s103.若是則將這些字符映射在f中,這些字符在f中的相應(yīng)起始位置、結(jié)束位置標(biāo)記為first、last;s104.令i=i+1然后利用步驟s3得到的first、last重復(fù)執(zhí)行步驟s103直至查詢不到匹配項,此時得到最長匹配后綴。s105.輸出目的ip的路由信息。同時,本發(fā)明還提供了一種應(yīng)用以上方法的系統(tǒng),其方案如下:包括索引構(gòu)造模塊和索引查詢模塊,索引構(gòu)造模塊用于構(gòu)建后綴索引和哈希表,所述索引查詢模塊用于哈希表的查找和段內(nèi)回溯查找。與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:1.查找一個ipv6地址最多需讀路由表4次,與路由表的大小無關(guān),因此能夠保證查找效率。2.將后綴索引應(yīng)用到路由查找上,有效的加快了ip地址的匹配速度,同時具有良好的性能。附圖說明圖1為方法的流程示意圖。圖2為本發(fā)明的路由表結(jié)構(gòu)圖。圖3為系統(tǒng)的示意圖。具體實施方式附圖僅用于示例性說明,不能理解為對本專利的限制;以下結(jié)合附圖和實施例對本發(fā)明做進一步的闡述。實施例1如圖1所示,本發(fā)明提供的方法包括有以下步驟;s1.對ip路由數(shù)據(jù)構(gòu)建后綴索引;s2.將ipv6地址平均分為k段,然后分別為每段ipv6地址構(gòu)建不同的哈希表,每張哈希表存放段內(nèi)不同后綴在后綴索引中的區(qū)間值;s3.對于給定的目的ip地址,將其平均分為k段,然后將k段目的ip地址通過二分查找法在k張哈希表中查找匹配的后綴索引區(qū)間,并記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù);s4.根據(jù)記錄的段數(shù)進行段內(nèi)回溯查找,輸出目的ip的路由信息。其中,如圖2所示,圖2為路由表結(jié)構(gòu)圖。在具體的實施過程中,所述步驟s1構(gòu)建后綴索引的具體過程如下:ip路由數(shù)據(jù)中的各個ipv6地址對應(yīng)的前綴構(gòu)成集合s,集合s中的每個前綴視為一個字符串并在末尾添加#(#<0<1),即每個ipv6地址包括有129個后綴;將集合s中的所有前綴首尾相連組成一個字符串t,構(gòu)建字符串t的構(gòu)建后綴索引。在具體的實施過程中,所述步驟s2構(gòu)建哈希表的具體過程如下:將ipv6地址平均分為16段,然后為各段ipv6地址分別構(gòu)建一個哈希表,16個哈希表分別為h_table1~h_table16,其中h_table1~h_table15內(nèi)分別記錄有各自段內(nèi)的所有以00000000~11111111開始的后綴在后綴索引中的區(qū)間值;h_table16記錄所有段內(nèi)的所有以00000000#~11111111#開始的后綴在后綴索引中的區(qū)間值。為了方便說明構(gòu)建哈希表的過程,本實施例以ip地址長度為4為例,以2bit為單位進行分段查找。給定一個集合s={s1,s2,…},集合中每一項si是一條路由規(guī)則的匹配前綴。構(gòu)造字符串t=s1#s2#...的后綴索引(這里,s1#是由前綴s1和#構(gòu)成字符串,將所有這些字符串首尾相連得到t)。例如:s={1100/4,110*/3},那么就有t=1100#110#。則其后綴索引如下所示:pos=012345678x=1100#110#sa=847326150若以2bit分段構(gòu)建兩個hash表,則哈希表h_tablel對應(yīng)前2bit,用于記錄所有以00,01,10,11開始的后綴在后綴索引中的區(qū)間;哈希表h_table2對應(yīng)后2bit,用于記錄所有以00#,01#,10#,11#開始的后綴在后綴索引中的區(qū)間。如表1所示:h_table1中的[4,4]表示以00開始的后綴在后綴索引中的區(qū)間只有第4行;htable1中的null表示以01開始的后綴在后綴索引中找不到相應(yīng)的區(qū)間;h_table1中的[5,6]表示以10開始的后綴在后綴索引中的區(qū)間從第5行到第6行;h_table1中的[7,8]表示以11開始的后綴在后綴索引中的區(qū)間從第7行到第8行;h_table2中的[4,4]表示以00#開始的后綴在后綴索引中的區(qū)間只有第4行;htable2中的null表示以01#開始的后綴在后綴索引中找不到相應(yīng)的區(qū)間;h_table2中的[5,5]表示以10#開始的后綴在后綴索引中的區(qū)間只有第5行;htable2中的null表示以11#開始的后綴在后綴索引中找不到相應(yīng)的區(qū)間。表1哈希表的鍵-值indexh_table1h_table200[4,4][4,4]01nullnull10[5,6][5,5]11[7,8]null給定一個ip地址,與其匹配的ip前綴的中間字符不可能是#。所以,給定通配符x(x可以為1或者0),則ip地址11xx是有可能匹配110#和1100#110#的;而ip地址xx11不可能匹配110#和1100#110#的。這也就是為什么h_table1中的11表項為[7,8],h_table2中的11表項為空的原因。從上述可知,ipv6的地址長度為128bit,因此以8bit為單位構(gòu)建16個哈希表,分別為h_table1~h_table16。則h_table1~15記錄所有以00000000~11111111開始的后綴在后綴索引中的區(qū)間;h_table16記錄所有以00000000#~11111111#開始的后綴在后綴索引中的區(qū)間。在具體的實施過程中,所述步驟s4通過二分查找法查找匹配的后綴索引區(qū)間的具體過程如下:(1)首先對目的ip地址第8段在h_table8內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù),然后執(zhí)行步驟(2),否則執(zhí)行步驟(10);(2)對目的ip地址第12段在h_table12內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù),然后執(zhí)行步驟(3),否則執(zhí)行步驟(7);(3)對目的ip地址第14段在h_table14內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù),然后執(zhí)行步驟(4),否則執(zhí)行步驟(6);(4)對目的ip地址第15段在h_table15內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù),然后執(zhí)行步驟(5);(5)對目的ip地址第16段在h_table16內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù);(6)對目的ip地址第13段在h_table13內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù);(7)對目的ip地址第10段在h_table10內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù),然后執(zhí)行步驟(8),否則執(zhí)行步驟(9);(8)對目的ip地址第11段在h_table11內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù);(9)對目的ip地址第9段在h_table9內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù);(10)對目的ip地址第4段在h_table4內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù),然后執(zhí)行步驟(11),否則執(zhí)行步驟(14);(11)對目的ip地址第6段在h_table6內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù),然后執(zhí)行步驟(12),否則執(zhí)行步驟(13);(12)對目的ip地址第7段在h_table7內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù);(13)對目的ip地址第5段在h_table5內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù);(14)對目的ip地址第2段在h_table2內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù),然后執(zhí)行步驟(15),否則執(zhí)行步驟(16);(15)對目的ip地址第3段在h_table3內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù);(16)對目的ip地址第1段在h_table1內(nèi)查找匹配的后綴索引區(qū)間,若查找到匹配的后綴索引區(qū)間,則記錄匹配的后綴索引區(qū)間所在的哈希表對應(yīng)的段數(shù)。本實施例中,定義f為字符串t的所有后綴按字典順序排序后的首字符組成的數(shù)組;定義bwt為字符串t的所有后綴按字典順序排序后的最后一個字符組成的數(shù)組;則所述步驟s5進行段內(nèi)回溯查找的具體步驟如下:s101.根據(jù)記錄的段數(shù),將下一段內(nèi)的目的ip地址倒置,其最后一個字符在f中的起始位置標(biāo)記為first,結(jié)束位置標(biāo)記為last;s102.查詢first與last之間的所有行對應(yīng)的bwt中是否存在與倒置的ip地址的倒數(shù)第i個字符相同的字符,i的初始值為2;s103.若是則將這些字符映射在f中,這些字符在f中的相應(yīng)起始位置、結(jié)束位置標(biāo)記為first、last;s104.令i=i+1然后利用步驟s3得到的first、last重復(fù)執(zhí)行步驟s103直至查詢不到匹配項,此時得到最長匹配后綴。s105.輸出目的ip的路由信息。實施例2本實施例提供了一種應(yīng)用實施例1方法的系統(tǒng),如圖3所示,其具體的方案如下:包括索引構(gòu)造模塊和索引查詢模塊,索引構(gòu)造模塊用于構(gòu)建后綴索引和哈希表,所述索引查詢模塊用于哈希表的查找和段內(nèi)回溯查找。顯然,本發(fā)明的上述實施例僅僅是為清楚地說明本發(fā)明所作的舉例,而并非是對本發(fā)明的實施方式的限定。對于所屬領(lǐng)域的普通技術(shù)人員來說,在上述說明的基礎(chǔ)上還可以做出其它不同形式的變化或變動。這里無需也無法對所有的實施方式予以窮舉。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應(yīng)包含在本發(fā)明權(quán)利要求的保護范圍之內(nèi)。當(dāng)前第1頁12當(dāng)前第1頁12