專(zhuān)利名稱(chēng):一種ip段地址集中查找ip地址的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種在IP段地址集中查找IP地址的方法,屬于計(jì)算機(jī)網(wǎng)絡(luò)領(lǐng)域。
背景技術(shù):
在物理地址查詢(xún)應(yīng)用中,涉及從一組大量的IP段地址集中搜尋某個(gè)IP,目前解決該問(wèn)題的主流辦法有平衡二 叉樹(shù)、二分查找等。平衡二叉樹(shù)(Balanced Binary Tree)是一棵空樹(shù)或它的左右兩個(gè)子樹(shù)的高度差的絕對(duì)值不超過(guò)1,并且左右兩個(gè)子樹(shù)都是一棵平衡二叉樹(shù)。構(gòu)造與調(diào)整方法平衡二叉樹(shù)的常用算法有紅黑樹(shù)、AVL、Treap、伸展樹(shù)等。二分查找又稱(chēng)折半查找,優(yōu)點(diǎn)是比較次數(shù)少,查找速度快,平均性能好;其缺點(diǎn)是要求待查表為有序表,且插入刪除困難。因此,折半查找方法適用于不經(jīng)常變動(dòng)而查找頻繁的有序列表。但這些辦法的查找時(shí)間都隨著IP地址集的大小線(xiàn)性增長(zhǎng),特別是當(dāng)IP段地址數(shù)量達(dá)到幾十萬(wàn)級(jí)別的情況下,查找性能已成為問(wèn)題。
發(fā)明內(nèi)容
針對(duì)現(xiàn)有技術(shù)的不足,本發(fā)明提供了一種快速查找IP地址的方法,該方法可從幾十萬(wàn)級(jí)的海量IP段地址集中,快速定位出某個(gè)IP,查找時(shí)間基本與IP段地址集的大小無(wú)關(guān)。本發(fā)明的技術(shù)方案是一種IP段地址集中查找IP地址的方法,其步驟包括I)選取一 IP段地址,根據(jù)IP段的變化范圍將IP段分為相鄰域,并建立多個(gè)哈希鏈表存儲(chǔ)所述IP段;2)在所述多個(gè)哈希鏈表中按照順序查找出待查找的IP地址;3)在每個(gè)哈希鏈表中查找所述IP地址的方式為,先確定哈希位置,再遍歷哈希鏈表。所述IP段地址分割成4個(gè)相鄰域,所述4個(gè)相鄰域分別是IP段地址的范圍變化集中在最后一個(gè)域,IP段地址的范圍變化跨越最后兩個(gè)域、IP段地址的范圍變化跨越了最后三個(gè)域,以及IP段地址的范圍變化跨越四個(gè)域。所述相鄰域建立哈希鏈表個(gè)數(shù)為3,設(shè)為哈希表A,B, C。所述哈希表A存儲(chǔ)IP地址段變化范圍在最后一個(gè)域和跨越最后兩個(gè)域的IP段,所述哈希表B存儲(chǔ)IP地址段變化范圍跨越了最后三個(gè)域的IP段,所述哈希表C存儲(chǔ)IP地址段變化范圍跨越四個(gè)域的IP段。步驟2)中通過(guò)比較該IP段的起始地址和終止地址確定IP段的變化范圍,查找出待查找的IP地址的方法如下2-1)將待查找的IP地址前24bit作為索引,在所述哈希表A中查找起始地址和終止地址包含待查找IP的節(jié)點(diǎn),若沒(méi)有則繼續(xù)查找進(jìn)入步驟2-2);2-2)將待查找的IP地址前16bit作為索引,在所述哈希表B中查找起始地址和終止地址包含待查找IP的節(jié)點(diǎn),若沒(méi)有則繼續(xù)查找進(jìn)入步驟2-3);2-3)將待查找的IP地址前8bit作為索引,在所述哈希表C中查找起始地址和終止地址包含待查找IP的節(jié)點(diǎn)。更進(jìn)一步,所述哈希表A存儲(chǔ)IP地址段變化范圍在最后一個(gè)域和跨越最后兩個(gè)域的IP段時(shí),若IP變化范圍跨越兩個(gè)域,則需要將原IP拆分成一組變化范圍只跨越最后一個(gè)域的子IP段,再將這組子IP段存儲(chǔ)到哈希表A中。更進(jìn)一步,所述哈希表B存儲(chǔ)IP地址段變化范圍跨越了最后三個(gè)域的IP段時(shí),若IP段變化范圍跨越三個(gè)域,則需要將原IP拆分成一組變化范圍只跨越最后兩
個(gè)域的子IP段,再將這組子IP段存儲(chǔ)到哈希表B中。更進(jìn)一步,所述哈希表C存儲(chǔ)IP地址段變化范圍跨越四個(gè)域的IP段時(shí),若IP段變化范圍跨越四個(gè)域,則需要將原IP段拆分成一組變化范圍只跨越最后三個(gè)域的子IP段,再將這組IP段存儲(chǔ)到哈希表C中。更進(jìn)一步,所述哈希鏈表結(jié)構(gòu)中,鏈表的每個(gè)結(jié)點(diǎn)存儲(chǔ)一個(gè)IP段的起始地址、終止地址以及指向下一個(gè)結(jié)點(diǎn)的指針。更進(jìn)一步,所述哈希鏈表結(jié)構(gòu)中第一列為哈希索引數(shù)組,每個(gè)索引入口均為鏈表的起始地址。本發(fā)明的有益效果基于本發(fā)明的hash表結(jié)構(gòu)進(jìn)行IP查找,最壞情況下是訪問(wèn)了全部3張hash表,然而絕大多數(shù)IP地址段的變化范圍集中在最后兩個(gè)域,通常情況的查找在24位hash表中就能完成,而24位hash表每個(gè)索引位置允許變化的IP地址也就255個(gè),因此查找時(shí)間基本與IP段地址集的大小無(wú)關(guān)。而且經(jīng)過(guò)測(cè)試證明,在IP段地址集達(dá)到30萬(wàn)的情況下,該方法的單次查詢(xún)時(shí)間為μs級(jí)。
圖I為本發(fā)明IP段地址集中查找IP地址的方法存儲(chǔ)IP地址段的hash鏈表結(jié)構(gòu)示意圖;圖2為本發(fā)明IP段地址集中查找IP地址的方法的加載IP段地址集流程示意圖;圖3為本發(fā)明IP段地址集中查找IP地址的方法的一實(shí)施例中A表的IP地址段存儲(chǔ)流程示意圖;圖4為本發(fā)明IP段地址集中查找IP地址的方法的一實(shí)施例中B表的IP地址段存儲(chǔ)流程示意圖;圖5為本發(fā)明IP段地址集中查找IP地址的方法的一實(shí)施例中C表的IP地址段存儲(chǔ)流程示意圖;圖6為本發(fā)明IP段地址集中查找IP地址的方法的查找流程示意圖。
具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本分買(mǎi)那個(gè)實(shí)施例中的技術(shù)方案進(jìn)行清除、完整地描述,可以理解的是,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。將IP地址段用4 個(gè)域表示,如f4. f3. f2. fl,則根據(jù)IP地址段的變化范圍,可分為下面4種范圍變化集中在域fl,范圍變化集中在域f2和fl,范圍變化跨越了 f3、f2和Π,范圍變化跨越f4、f3、f2和fl四個(gè)域。據(jù)此,本發(fā)明構(gòu)建了 3個(gè)hash鏈表,分別存儲(chǔ)上述四種類(lèi)型的IP段,前兩種存一個(gè)表,后兩種分別存一個(gè)表。然后將待查找的IP依次到這3個(gè)hash表中查找,直至查找結(jié)束。假設(shè)待查找的IP地址為IP1,具體步驟如下(I)構(gòu)建IP前綴為24、16和8的A、B、C三張hash表;(2)取IPl前24bit作為hash值,在A表中查找IPl,找到,則結(jié)束查找;(3)取IPl前16bit作為hash值,在B表中查找IP1,找到,則結(jié)束查找;(4)取IPl前8bit作為hash值,在C表中查找IP1,找到,則結(jié)束查找,否則表明沒(méi)有找到。如圖I所示是本發(fā)明IP段地址集中查找IP地址的方法存儲(chǔ)IP地址段的hash鏈表結(jié)構(gòu)示意圖;為了存儲(chǔ)IP段地址,本發(fā)明引入了如圖I所示的hash表結(jié)構(gòu),結(jié)構(gòu)中的第一列為hash索引數(shù)組,hash表的位置沖突采用鏈表方式解決,即每個(gè)索弓I入口均為鏈表的首地址,鏈表的每個(gè)結(jié)點(diǎn)存儲(chǔ)一個(gè)IP段的起始地址、終止地址以及指向下一個(gè)結(jié)點(diǎn)的指針。為了加速查找效率,本發(fā)明構(gòu)建了 3個(gè)這樣的hash鏈表A、B、C :A表存儲(chǔ)地址段變化范圍集中在最后兩個(gè)域的IP段,也即將IP地址的前24bit作為索引,索引范圍為(Γ16777215(2的24次冪);B表存儲(chǔ)地址段變化范圍集中在最后三個(gè)域的IP段,也即將IP地址的前16bit作為索引,索引范圍為O飛5535 (2的16次冪);而C表存儲(chǔ)地址段變化范圍跨越4個(gè)域的IP段,也即將IP地址的前Sbit作為hash索引,索引范圍為0 255。如圖2為本發(fā)明IP段地址集中查找IP地址的方法的加載IP段地址集流程示意圖;IP段地址集的加載過(guò)程如圖2所示,每個(gè)IP段的具體處理流程如下(I)比較IP段的起始地址和終止地址,判定其變化范圍;(2)如果起始地址和終止地址的前16bit —致,則將該IP段插入A表;否則進(jìn)行步驟3);(3)如果起始地址和終止地址的前8bit —致,則將該IP段插入B表;否則將該IP段插入C表;(4)A表的IP段插入過(guò)程如圖3所示,由于A表是將IP地址的前24bit作為索弓丨,鏈表的每個(gè)結(jié)點(diǎn)只能表示變化范圍在最后一個(gè)域的IP段,如果變化范圍跨越了最后兩個(gè)域,則需要將IP段拆分成一組變化范圍在最后一個(gè)域的子IP段,例如IP段I. 2. 3. 4 I. 2. 4. 5,則拆分成兩個(gè) IP 段 I. 2. 3. 4 I. 2. 3. 255 和 I. 2. 4. (Tl. 2. 4. 5,具體操作為a)取起始地址的前24bit作為索引nstart ;b)取終止地址的前24bit作為索引nend ;c)如果nstart與nend相等,則說(shuō)明IP段變化范圍集中在最后一個(gè)域,只需在nstart的位置的鏈表按起始地址的順序插入一個(gè)新結(jié)點(diǎn)即可;d)否則,則說(shuō)明IP段變化范圍跨越了最后兩個(gè)域,則需要在nstart和nend之間的所有位置的鏈表上都插入一個(gè)新結(jié)點(diǎn),而新結(jié)點(diǎn)的起始地址和終止地址會(huì)根據(jù)索引的位置發(fā)生變化,假設(shè)插入的IP段為(ipstart, ipend),計(jì)算規(guī)則如下nstart位置新結(jié)點(diǎn)的起始地址=ipstart,新結(jié)點(diǎn)的終止地址=nstart〈〈8+0xFFnend位置新結(jié)點(diǎn)的起始地址=nend〈〈8,新結(jié)點(diǎn)的終止地址=ipend其他位置i :新結(jié)點(diǎn)的起始地址=i〈〈8,新結(jié)點(diǎn)的終止地址=i〈〈8+0xFF(5) B表的IP段插入過(guò)程如圖4所示,原理同A表類(lèi)似,不同的是a)取起始地址的前16bit作為索引nstart ;b)取終止地址的前16bit作為索引nend,而且在IP段變化范圍跨越多個(gè)e)當(dāng)IP段變化范圍跨越3個(gè)域時(shí),假設(shè)插入的IP段為(ipstart, ipend),計(jì)算規(guī)則如下nstart位置新結(jié)點(diǎn)的起始地址=ipstart,新結(jié)點(diǎn)的終止地址=nstart<<16+0xFFFFnend位置新結(jié)點(diǎn)的起始地址=nend〈〈16,新結(jié)點(diǎn)的終止地址=ipend其他位置i :新結(jié)點(diǎn)的起始地址=i〈〈16,新結(jié)點(diǎn)的終止地址=i〈〈16+0xFFFF;(6) C表的IP段插入過(guò)程如圖5所示,原理同A表類(lèi)似,不同的是a)取起始地址的前8bit作為索引nstart ;b)取終止地址的前8bit作為索引nend;c)當(dāng)IP段變化范圍跨越4個(gè)域時(shí),假設(shè)插入的IP段為(ipstart, ipend),計(jì)算規(guī)則如下nstart位置新結(jié)點(diǎn)的起始地址=ipstart,新結(jié)點(diǎn)的終止地址=nstart〈〈24+0xFFFFFFnend位置新結(jié)點(diǎn)的起始地址=nend〈〈24,新結(jié)點(diǎn)的終止地址=ipend其他位置i :新結(jié)點(diǎn)的起始地址=i〈〈24,新結(jié)點(diǎn)的終止地址=i〈〈24+0xFFFFFF如圖6所示為本發(fā)明IP段地址集中查找IP地址的方法的查找流程示意圖,圖6在IP地址的查找過(guò)程中假設(shè)待查找的IP為ipo,則具體流程如下(I)取ipO的前24bit作為索引nl,在A表位置nl的鏈表中遍歷,如果找到,則結(jié)束查找,否則進(jìn)行下一步;(2)取ipO的前16bit作為索引n2,在B表位置n2的鏈表中遍歷,如果找到,則結(jié)束查找,否則進(jìn)行下一步;(3)取ipO的前8bit作為索引n3,在A表位置n3的鏈表中遍歷,查找結(jié)束。
權(quán)利要求
1.一種IP段地址集中查找IP地址的方法,其步驟包括1)選取一IP段地址,根據(jù)IP段的變化范圍將IP段分為相鄰域,并建立多個(gè)哈希鏈表存儲(chǔ)所述IP段;2)在所述多個(gè)哈希鏈表中按照順序查找出待查找的IP地址;3)在每個(gè)哈希鏈表中查找所述IP地址的方式為,先確定哈希位置,再遍歷哈希鏈表。
2.權(quán)利要求I所述的IP段地址集中查找IP地址的方法,其特征在于,所述IP段地址分割成4個(gè)相鄰域,所述4個(gè)相鄰域分別是IP段地址的范圍變化集中在最后一個(gè)域,IP段地址的范圍變化跨越最后兩個(gè)域、IP段地址的范圍變化跨越了最后三個(gè)域,以及IP段地址的范圍變化跨越四個(gè)域。
3.如權(quán)利要求I或2所述的IP段地址集中查找IP地址的方法,其特征在于,所述相鄰域建立哈希鏈表個(gè)數(shù)為3,設(shè)為哈希表A,B, C。
4.如權(quán)利要求3所述的IP段地址集中查找IP地址的方法,其特征在于,所述哈希表A 存儲(chǔ)IP地址段變化范圍在最后一個(gè)域和跨越最后兩個(gè)域的IP段,所述哈希表B存儲(chǔ)IP地址段變化范圍跨越了最后三個(gè)域的IP段,所述哈希表C存儲(chǔ)IP地址段變化范圍跨越四個(gè)域的IP段。
5.如權(quán)利要求I或4所述的IP段地址集中查找IP地址的方法,其特征在于,步驟2) 中通過(guò)比較該IP段的起始地址和終止地址確定IP段的變化范圍,查找出待查找的IP地址的方法如下2-1)將待查找的IP地址前24bit作為索引,在所述哈希表A中查找起始地址和終止地址包含待查找IP的節(jié)點(diǎn),若沒(méi)有則繼續(xù)查找進(jìn)入步驟2-2);2-2)將待查找的IP地址前16bit作為索引,在所述哈希表B中查找起始地址和終止地址包含待查找IP的節(jié)點(diǎn),若沒(méi)有則繼續(xù)查找進(jìn)入步驟2-3);2-3)將待查找的IP地址前8bit作為索引,在所述哈希表C中查找起始地址和終止地址包含待查找IP的節(jié)點(diǎn)。
6.如權(quán)利要求I或4所述的IP段地址集中查找IP地址的方法,其特征在于,所述哈希表A存儲(chǔ)IP地址段變化范圍在最后一個(gè)域和跨越最后兩個(gè)域的IP段時(shí),若IP變化范圍跨越兩個(gè)域,則需要將原IP拆分成一組變化范圍只跨越最后一個(gè)域的子IP段,再將這組子IP段存儲(chǔ)到哈希表A中。
7.如權(quán)利要求I或4所述的IP段地址集中查找IP地址的方法,其特征在于,所述哈希表B存儲(chǔ)IP地址段變化范圍跨越了最后三個(gè)域的IP段時(shí),若IP段變化范圍跨越三個(gè)域,則需要將原IP拆分成一組變化范圍只跨越最后兩個(gè)域的子IP段,再將這組子IP段存儲(chǔ)到哈希表B中。
8.如權(quán)利要求I或4所述的IP段地址集中查找IP地址的方法,其特征在于,所述哈希表C存儲(chǔ)IP地址段變化范圍跨越四個(gè)域的IP段時(shí),若IP段變化范圍跨越四個(gè)域,則需要將原IP段拆分成一組變化范圍只跨越最后三個(gè)域的子IP段,再將這組IP段存儲(chǔ)到哈希表C中。
9.如權(quán)利要求I所述的IP段地址集中查找IP地址的方法,其特征在于,所述哈希鏈表結(jié)構(gòu)中,鏈表的每個(gè)結(jié)點(diǎn)存儲(chǔ)一個(gè)IP段的起始地址、終止地址以及指向下一個(gè)結(jié)點(diǎn)的指針。
10.如權(quán)利要求I所述的IP段地址集中查找IP地址的方法,其特征在于,所述哈希鏈表結(jié)構(gòu)中第一列為哈希索引數(shù)組,每個(gè)索引入口均為鏈表的起始地址。
全文摘要
本發(fā)明涉及一種在IP段地址集中查找IP地址的方法,步驟為1)選取一IP段地址,根據(jù)IP段的變化范圍將IP段分為相鄰域,并建立多個(gè)哈希鏈表存儲(chǔ)所述IP段;2)在所述多個(gè)哈希鏈表中按照順序查找出待查找的IP地址;3)在每個(gè)哈希鏈表中查找所述IP地址的方式為,先確定哈希位置,再遍歷哈希鏈表。基于本發(fā)明的hash表結(jié)構(gòu)進(jìn)行IP查找,最壞情況是訪問(wèn)了全部3張hash表,然而絕大多數(shù)IP地址段的變化范圍集中在最后兩個(gè)域,通常情況的查找在24位hash表中就能完成,而24位hash表每個(gè)索引位置允許變化的IP地址也就255個(gè),因此查找時(shí)間基本與IP段地址集的大小無(wú)關(guān)。而且經(jīng)過(guò)測(cè)試證明,在IP段地址集達(dá)到30萬(wàn)的情況下,該方法的單次查詢(xún)時(shí)間為μs級(jí)。
文檔編號(hào)H04L29/12GK102984292SQ20121051114
公開(kāi)日2013年3月20日 申請(qǐng)日期2012年12月3日 優(yōu)先權(quán)日2012年12月3日
發(fā)明者毛林燕 申請(qǐng)人:北京銳安科技有限公司