亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種存儲(chǔ)IPv4地址和IPv6地址的方法和裝置的制作方法

文檔序號(hào):7746331閱讀:154來(lái)源:國(guó)知局
專利名稱:一種存儲(chǔ)IPv4地址和IPv6地址的方法和裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,特別涉及一種存儲(chǔ)IPv4地址和IPv6地址的方法和裝置。
背景技術(shù)
IPv6是互聯(lián)網(wǎng)工程任務(wù)組(IETF)設(shè)計(jì)的用于替代現(xiàn)行IPv4的下一代IP協(xié)議,解決了 IPv4地址枯竭的問(wèn)題。由于IPv6的應(yīng)用是一個(gè)循序漸近的過(guò)程,在很長(zhǎng)時(shí)間內(nèi)IPv4 網(wǎng)絡(luò)和IPv6網(wǎng)絡(luò)會(huì)同時(shí)存在,在很多情況下,網(wǎng)絡(luò)設(shè)備需要支持IPv4和IPv6雙棧,網(wǎng)絡(luò)中也會(huì)同時(shí)存在IPv4地址和IPv6地址。IPv4和IPv6地址的存儲(chǔ)方式,直接影響到IPv4地址和IPv6地址的融合及查詢效率,尤其是對(duì)需要存儲(chǔ)海量IP地址的業(yè)務(wù)的查詢效率。IPv4地址由32位標(biāo)識(shí),IPv6地址由128位標(biāo)識(shí),由于長(zhǎng)度的不同,在現(xiàn)有技術(shù)中將IPv4地址和IPv6地址分別按照各自的存儲(chǔ)方式進(jìn)行存儲(chǔ)。將IPv4地址存儲(chǔ)為一個(gè)整數(shù),對(duì)于IPv6地址則存在以下兩種存儲(chǔ)方式其一、將IPv6地址存儲(chǔ)為字符串;其二、將IPv6地址進(jìn)行摘要算法的處理后,計(jì)算出一個(gè)整數(shù)來(lái)標(biāo)識(shí)該IPv6地址,將該計(jì)算出的整數(shù)進(jìn)行存儲(chǔ)。上述兩種方法中,IPv4地址和IPv6地址分別采用各自的存儲(chǔ)方式,導(dǎo)致IPv4地址和IPv6地址需要分別查詢,在海量地址存儲(chǔ)時(shí),嚴(yán)重影響效率,且增加了開發(fā)工作量。

發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供了一種存儲(chǔ)IPv4地址和IPv6地址的方法和裝置,以便于提高地址存儲(chǔ)和查詢的效率,提高系統(tǒng)準(zhǔn)確性。一種存儲(chǔ)IPv4地址和IPv6地址的方法,該方法包括A、接收到包含IP地址的存儲(chǔ)指令時(shí),確定數(shù)據(jù)庫(kù)中包含前綴字段和后綴字段的存儲(chǔ)空間,并判斷所述IP地址的類型,如果是IPv4地址,則執(zhí)行步驟B ;如果是IPv6地址, 則執(zhí)行步驟C ;B、將所述IPv4地址轉(zhuǎn)換成整型數(shù)據(jù)后存儲(chǔ)在所述后綴字段中,將所述前綴字段置空,結(jié)束當(dāng)前存儲(chǔ)流程;C、將所述IPv6地址劃分為高位地址部分和低位地址部分,將高位地址部分的信息存儲(chǔ)在所述前綴字段中,將低位地址部分轉(zhuǎn)換成整型數(shù)據(jù)后存儲(chǔ)在所述后綴字段中,結(jié)束當(dāng)前存儲(chǔ)流程。一種存儲(chǔ)IPv4地址和IPv6地址的裝置,該裝置包括指令接收單元、空間確定單元、第一類型判斷單元、IPv4地址存儲(chǔ)單元和IPv6地址存儲(chǔ)單元;所述指令接收單元,用于接收包含IP地址的存儲(chǔ)指令;所述空間確定單元,用于在所述指令接收單元接收到包含IP地址的存儲(chǔ)指令后, 確定數(shù)據(jù)庫(kù)中包含前綴字段和后綴字段的存儲(chǔ)空間;所述第一類型判斷單元,用于判斷所述IP地址的類型,如果是IPv4地址,則將該IPv4地址發(fā)送給所述IPv4地址存儲(chǔ)單元;如果是IPv6地址,則將該IPv6地址發(fā)送給所述 IPv6地址存儲(chǔ)單元;所述IPv4地址存儲(chǔ)單元,用于將所述IPv4地址轉(zhuǎn)換成整型數(shù)據(jù)后存儲(chǔ)在所述后綴字段中,將所述前綴字段置空;所述IPv6地址存儲(chǔ)單元,用于將所述IPv6地址劃分為高位地址部分和低位地址部分,將高位地址部分的信息存儲(chǔ)在所述前綴字段中,將低位地址部分轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在所述后綴字段中。由以上技術(shù)方案可以看出,將IP地址存儲(chǔ)在包含前綴字段和后綴字段的存儲(chǔ)空間,并對(duì)存儲(chǔ)指令中具體的IP地址類型進(jìn)行區(qū)分,即針對(duì)IPv4地址,轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在后綴字段中,前綴字段置空;針對(duì)IPv6地址,則將IPv6地址劃分為高位存儲(chǔ)地址和低位存儲(chǔ)地址,將高位存儲(chǔ)地址的信息存儲(chǔ)在前綴字段中,將低位存儲(chǔ)地址轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在后綴字段中。這種存儲(chǔ)方式實(shí)現(xiàn)了在數(shù)據(jù)庫(kù)中IPv4地址和IPv6地址的統(tǒng)一存儲(chǔ), 為IPv4地址和IPv6地址的統(tǒng)一查詢提供方便,提高了存儲(chǔ)和查詢效率。另外,該存儲(chǔ)方式能夠兼容當(dāng)前的IPv4存儲(chǔ)系統(tǒng),只需將原有的IPv4地址存儲(chǔ)空間作為后綴字段,不會(huì)造成已經(jīng)存儲(chǔ)的IPv4地址丟失,實(shí)現(xiàn)IPv4存儲(chǔ)系統(tǒng)無(wú)縫過(guò)渡到IPv6存儲(chǔ)系統(tǒng)。


圖1為本發(fā)明提供的主要方法流程圖;圖2為實(shí)施例一提供的IP地址存儲(chǔ)流程圖;圖3為實(shí)施例一提供的單個(gè)IP地址查詢流程圖;圖4為實(shí)施例一提供的IP地址范圍查詢流程圖;圖5為實(shí)施例一中步驟405對(duì)應(yīng)的查詢范圍示意圖;圖6為實(shí)施例一中步驟406對(duì)應(yīng)的查詢范圍示意圖;圖7和圖8為實(shí)施例一中步驟407-1對(duì)應(yīng)的查詢范圍示意圖;圖9和圖10為實(shí)施例一中步驟407-3對(duì)應(yīng)的查詢范圍示意圖;圖11為實(shí)施例二提供的IP地址存儲(chǔ)流程圖;圖12為實(shí)施例二提供的單個(gè)IP地址查詢流程圖;圖13為實(shí)施例二提供的IP地址范圍查詢流程圖;圖14為本發(fā)明提供的裝置結(jié)構(gòu)圖;圖15為本發(fā)明提供的另一種裝置結(jié)構(gòu)圖。
具體實(shí)施例方式為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)描述。本發(fā)明提供的方法如圖1所示,可以主要包括以下步驟步驟101 接收到包含IP地址的存儲(chǔ)指令時(shí),確定數(shù)據(jù)庫(kù)中包含前綴字段和后綴字段的存儲(chǔ)空間,并判斷該IP地址的類型;如果是IPv4地址,則執(zhí)行步驟102 ;如果是IPv6 地址,則執(zhí)行步驟103。步驟102 將該IPv4地址轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在后綴字段中,將前綴字段置空,結(jié)束當(dāng)前存儲(chǔ)流程。步驟103 將該IPv6地址劃分為高位地址部分和低位地址部分,將高位地址部分的信息存儲(chǔ)在前綴字段中,將低位地址部分轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在后綴字段中,結(jié)束當(dāng)前存儲(chǔ)流程。其中,高位地址部分的信息可以是IPv6地址的高位地址部分轉(zhuǎn)換為整型數(shù)據(jù)后, 即將IPv6的高位地址部分轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在前綴字段中。或者,高位地址部分的信息也可以是偏移量表中與IPv6地址的地址前綴匹配的偏移量ID,即將IPv6地址轉(zhuǎn)換為設(shè)定的數(shù)據(jù)形式后,查找偏移量表中,高位地址部分對(duì)應(yīng)的偏移量ID,將該偏移量ID存儲(chǔ)在前綴字段中。下面分別通過(guò)兩個(gè)具體實(shí)施例對(duì)這兩種情況進(jìn)行詳細(xì)描述。實(shí)施例一數(shù)據(jù)庫(kù)中通常支持64位的整型數(shù)據(jù),現(xiàn)有的IPv4地址一般在數(shù)據(jù)庫(kù)中存儲(chǔ)在64 位存儲(chǔ)空間的低32位。在本實(shí)施例中,對(duì)于將IPv4地址和IPv6地址融合存儲(chǔ)的情況,可以在現(xiàn)有64位存儲(chǔ)空間的基礎(chǔ)上,額外增加64位,與現(xiàn)有的64位共同組成一個(gè)IP地址的存儲(chǔ)空間,即該存儲(chǔ)空間包含兩個(gè)字段64位的前綴字段和64位的后綴字段。在本實(shí)施例中前綴字段采用ip_prefix字段表示,后綴字段采用ip字段表示。圖2為實(shí)施例一提供的IP地址存儲(chǔ)流程圖,如圖2所示,該流程可以包括以下步驟步驟201 接收到包含IP地址的存儲(chǔ)指令時(shí),在數(shù)據(jù)庫(kù)中確定一個(gè)包含ip_prefiX 字段和ip字段的一個(gè)存儲(chǔ)空間。步驟202 判斷該IP地址的類型;如果是IPv4地址,則執(zhí)行步驟203 ;如果是IPv6 地址,則執(zhí)行步驟204。步驟203 將該IPv4地址轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在ip字段的低32位,將ip_ prefix字段置空,結(jié)束當(dāng)前存儲(chǔ)流程。步驟204 將該IPv6地址劃分為高64位存儲(chǔ)地址和低64位存儲(chǔ)地址,將高64位存儲(chǔ)地址轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在ip_pref ix字段中,將低64位存儲(chǔ)地址轉(zhuǎn)換成整型數(shù)據(jù)后存儲(chǔ)在ip字段中,結(jié)束當(dāng)前存儲(chǔ)流程。針對(duì)圖2所示的IP地址存儲(chǔ)方式,對(duì)應(yīng)的IP地址查詢過(guò)程可以分為以下兩種情況第一種情況查詢單個(gè)IP地址,此時(shí)對(duì)應(yīng)的查詢流程可以如圖3所示,包括以下步驟步驟301 接收到包含單個(gè)IP地址的查詢指令后,判斷該IP地址的類型,如果是 IPv4地址,則執(zhí)行步驟302 ;如果是IPv6地址,則執(zhí)行步驟303。步驟302 將IPv4地址轉(zhuǎn)換為整型數(shù)據(jù)后,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為ip_prefiX 字段為空且ip字段為轉(zhuǎn)換后得到的數(shù)據(jù),獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果,結(jié)束當(dāng)前查詢流程。對(duì)于IPv4地址而言,由于其僅占用了 ip字段中的低32位,因此,在對(duì)數(shù)據(jù)庫(kù)設(shè)置查詢條件時(shí),需要查詢ip_prefiX字段為空且ip字段為轉(zhuǎn)換后得到的數(shù)據(jù),數(shù)據(jù)庫(kù)根據(jù)該查詢條件進(jìn)行查詢后,會(huì)返回查詢結(jié)果。例如,會(huì)返回?cái)?shù)據(jù)庫(kù)中該IPv4地址對(duì)應(yīng)的諸如用戶名、用戶電話、用戶地址等信息。
步驟303 將該IPv6地址劃分為高64位和低64位后分別轉(zhuǎn)換為整型數(shù)據(jù),得到高 64位查詢地址和低64位查詢地址,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為ip_prefX字段為該高64位查詢地址且ip字段為低64位查詢地址,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果,結(jié)束當(dāng)前查詢流程。對(duì)于IPv6地址而言,由于存儲(chǔ)時(shí)是按照高64位和低64位劃分的,因此,在查詢時(shí)也需要針對(duì)高64位和低64位分別進(jìn)行。第二種情況查詢IP地址范圍,此時(shí)對(duì)應(yīng)的查詢流程可以如圖4所示,包括以下步驟步驟401 接收到包含IP地址范圍的查詢指令后,判斷該IP地址范圍的類型,如果是IPv4地址范圍,則執(zhí)行步驟402 ;如果是IPv6地址范圍,則執(zhí)行步驟403。步驟402 將該IPv4地址范圍的起始端值和結(jié)束端值轉(zhuǎn)換為整型數(shù)據(jù)后,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為ip_prefiX字段為空,并且ip字段大于轉(zhuǎn)換后的起始端值且小于轉(zhuǎn)換后的結(jié)束端值,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果,結(jié)束當(dāng)前查詢流程。假設(shè)該IPv4地址轉(zhuǎn)換后的起始端值為ipV4_start,轉(zhuǎn)換后的結(jié)束端值為ipv4_ end,則設(shè)置的查詢條件可以表示為ip_prefix字段=null and (ipv4_start <= ip字段 <=ipv4_end)。步驟403 將IPv6地址范圍的起始端值和結(jié)束端值分別劃分為高64位和低64位后,再分別轉(zhuǎn)換為整型數(shù)據(jù)得到起始端值的高64位查詢地址和低64位查詢地址,以及結(jié)束端值的高64位查詢地址和低64位查詢地址,繼續(xù)執(zhí)行步驟404。步驟404 判斷起始端值的高64位查詢地址和結(jié)束端值的高64位查詢地址是否相同,如果相同,執(zhí)行步驟405 ;否則,執(zhí)行步驟408。步驟405 判斷起始端值的低64位查詢地址和結(jié)束端值的低64位查詢地址的符號(hào)位是否相同,如果相同,執(zhí)行步驟406 ;如果不相同,執(zhí)行步驟407。由于數(shù)據(jù)庫(kù)中每64位的存儲(chǔ)空間的最高位為符號(hào)位,為了與數(shù)據(jù)庫(kù)的該特性兼容,需要對(duì)該起始端值和結(jié)束端值的該符號(hào)位進(jìn)行具體區(qū)分。步驟406 設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為ip_prefiX字段為起始端值的高64位查詢地址,并且ip字段大于或等于轉(zhuǎn)換后的起始端值低64位查詢地址且小于或等于轉(zhuǎn)換后的結(jié)束端值低64位查詢地址,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果,結(jié)束當(dāng)前查詢流程。由于數(shù)據(jù)庫(kù)中64位的最高位為符號(hào)位,即符號(hào)位為0時(shí)為正數(shù),符號(hào)位為1時(shí)為負(fù)數(shù)。其中,符號(hào)位為O時(shí)對(duì)應(yīng)的整數(shù)范圍為0至7FFFFFFFFFFFFFFF,符號(hào)位為1時(shí)對(duì)應(yīng)的整數(shù)范圍為8000000000000000至FFFFFFFFFFFFFFFF。如果查詢范圍在一個(gè)符號(hào)位區(qū)段,即起始端值的低64位查詢地址和結(jié)束端值的低64位查詢地址符號(hào)位相同,在一個(gè)符號(hào)位區(qū)段,如圖5所示,則對(duì)數(shù)據(jù)庫(kù)的查詢條件在該起始端值的低64位查詢地址和結(jié)束端值的低 64位查詢地址之間即可。例如,當(dāng)?shù)?4位查詢地址范圍為2至5時(shí),設(shè)置的查詢條件為2 <=ip字段<=5,如圖5中(a)所示;當(dāng)?shù)?4位查詢地址范圍為-2至-5時(shí),設(shè)置的查詢條件為_5<= ip字段<=-2,如圖5中(b)所示。在本步驟中,起始端值的高64位如果為startIP_prefix,低64位為startIP_ postfix,結(jié)束端值的高64位與起始端值相同,低64位為endIP_p0Stfix,則設(shè)置的查詢條件為:ip_prefix 字段=startIP_prefix, and(startIP_postfix < = ip 字段<=endIP_ postfix)ο
步驟407 設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為ip_prefiX字段為起始端值的高64位查詢地址,并且ip字段大于或等于轉(zhuǎn)換后的起始端值低64位查詢地址或者小于或等于轉(zhuǎn)換后的結(jié)束端值低64位查詢地址,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果,結(jié)束當(dāng)前查詢流程。如果查詢范圍跨越兩個(gè)符號(hào)位區(qū)段,即起始端值的低64位查詢地址和結(jié)束端值的低64位查詢地址符號(hào)位不同,不在一個(gè)符號(hào)位區(qū)段,如圖6所示,則對(duì)數(shù)據(jù)庫(kù)的查詢條件應(yīng)該包含大于該起始端值的低64位查詢地址以及小于結(jié)束端值的低64位查詢地址兩種情況。例如,當(dāng)?shù)?4位查詢地址范圍為2至FFFFFFFFFFFFFFFE,即-2至2時(shí),設(shè)置的查詢條件為ip字段>=2or ip字段<=-2。同樣,在本步驟中,如果起始端值的高64位為StartIP_pref ix,低64位為 startIP_postfix,結(jié)束端值的高64位與起始端值相同,低64位為endIP_postfix,且 startIP_postfix與endIP_postfix的符號(hào)位不同,則本步驟設(shè)置的查詢條件為ip_ prefix 字段=startlP—prefix,and (ip 字段 > =startIP_postf ixor ip 字段 <=endIP_ postfx)0步驟408 按任意順序或者同時(shí)執(zhí)行步驟408-1、408-2和408_3。如果起始端值的高64位查詢地址和結(jié)束端值的高64位查詢地址不相同,則可以將查詢范圍分為三段前綴字段ip_prefiX為起始端值的高64位查詢地址時(shí)的情況、前綴字段ip_prefX為起始端值的高64位查詢地址和結(jié)束端值的高64位查詢地址之間的情況、 前綴字段ip_prefix為結(jié)束端值的高64位查詢地址的情況,分別對(duì)應(yīng)步驟408-1、408_2和 408-3。步驟408-1 如果起始端值的低64位查詢地址的符號(hào)位是0,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為ip_pref ix為起始端值的高64位查詢地址,并且ip字段大于或等于起始端值低64 位查詢地址或者小于或等于-1 ;如果起始端值的低64位查詢地址的符號(hào)位是1,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為ip_prefiX為起始端值的高64位查詢地址,并且ip字段大于或等于起始端值低64位查詢地址并且小于或等于-1 ;獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果。本步驟中,當(dāng)起始端值的低64位查詢地址的符號(hào)位是0時(shí),說(shuō)明該起始端值的低 64位查詢地址是正數(shù),針對(duì)ip_prefiX為起始端值的低64位查詢地址時(shí)的情況如圖7所示,包括兩部分ip字段大于或等于起始端值低64位查詢地址StartIP_p0StfiX,以及ip 字段為負(fù)數(shù)的整個(gè)部分即ip字段小于或等于-1。設(shè)置的查詢條件為ip_prefiX字段= start IP_prefix and (ip 字startIP—postfix or ip 字當(dāng)起始端值的低64位查詢地址的符號(hào)位是1時(shí),說(shuō)明該起始端值的低64位查詢地址是負(fù)數(shù),針對(duì)ip_prefiX為起始端值的低64位查詢地址時(shí)的情況如圖8所示,應(yīng)該設(shè)置為ip_prefix 字肖=startIP_pref ix and (ip 字肖> =startIP_postf ix and ip 字 <=-1)。步驟408-2 如果起始端值的高64位查詢地址與結(jié)束端值的高64位查詢地址符號(hào)位相同,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段ip_prefiX字段大于起始端值的高64位查詢地址且小于結(jié)束端值的高64位查詢地址;如果起始端值的高64位查詢地址與結(jié)束端值的高64位查詢地址符號(hào)位不相同,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段ip_prefiX字段大于起始端值的高64位查詢地址或者小于結(jié)束端值的高64位查詢地址;獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果。
本步驟中,如果起始端值的高64位查詢地址與結(jié)束端值的高64位查詢地址符號(hào)位相同,則說(shuō)明都為正數(shù)或都為負(fù)數(shù),則設(shè)置的查詢條件可以表示為ip_prefiX字段> startIP_prefix and ip_prefix字段< endIP_prefix。如果起始端值的高64位查詢地址與結(jié)束端值的高64位查詢地址符號(hào)位不同,則說(shuō)明起始端值的高64位查詢地址為正數(shù)并且結(jié)束端值的高64位查詢地址為負(fù)數(shù),則設(shè)置的查詢條件可以表示為ip_prefiX字段> startIP_prefix or ip_pref ix字段< endIP_prefx,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果。步驟408-3:如果結(jié)束端值的低64位查詢地址的符號(hào)位是0,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為ip_pref ix為結(jié)束端值的高64位查詢地址,并且ip字段大于或等于0并且小于或等于結(jié)束端值低64位查詢地址;如果結(jié)束端值的低64位查詢地址的符號(hào)位是1,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為ip_prefiX為結(jié)束端值的高64位查詢地址,并且ip字段大于或等于0 或者小于或等于結(jié)束端值低64位查詢地址;獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果。本步驟中,當(dāng)結(jié)束端值的低64位查詢地址的符號(hào)位是0時(shí),說(shuō)明該結(jié)束端值的低 64位查詢地址是正數(shù),針對(duì)ip_prefiX為結(jié)束端值的低64位查詢地址時(shí)的情況如圖9所示,應(yīng)該設(shè)置為ip_prefix 字段=endIP_prefix and (ip 字段 > =Oand ip 字段 <=ip_ postfix)0當(dāng)結(jié)束端值的低64位查詢地址的符號(hào)位是1時(shí),說(shuō)明該結(jié)束端值的低64位查詢地址是負(fù)數(shù),針對(duì)ip_prefX為結(jié)束端值的低64位查詢地址時(shí)的情況如圖10所示,包括兩部分ip字段大于或等于0,以及ip字段小于或等于結(jié)束端值低64位查詢地址startIP_ postfix。設(shè)置的查詢條件為ip_prefix 字段=endIP_prefix and(ip 字段>=0 or ip 字段<=endIP_postfix)。步驟409 整合步驟408-1、408-2和步驟408-3獲取的數(shù)據(jù)庫(kù)返回的查詢結(jié)果,作為接收到的查詢指令對(duì)應(yīng)的查詢結(jié)果,結(jié)束當(dāng)前查詢流程。實(shí)施例二 在該實(shí)施例中,可以首先配置一個(gè)偏移量表,在該偏移量表中各表項(xiàng)包含3個(gè)字段偏移量ID、地址前綴和前綴長(zhǎng)度L。該偏移量表可以配置在IPv6地址存儲(chǔ)系統(tǒng)中,也可以配置在IPv4地址存儲(chǔ)系統(tǒng)中,或者配置其它管理系統(tǒng)中,在此不對(duì)偏移量表的設(shè)置位置進(jìn)行具體限定。在一個(gè)地址的存儲(chǔ)空間中,可以在原有ip字段的基礎(chǔ)上,額外增加一個(gè)前綴字段,用于存儲(chǔ)IP地址的地址前綴在偏移量表中對(duì)應(yīng)的偏移量ID,該額外增加的前綴字段可以標(biāo)識(shí)為ip_offSet_id字段。圖11為實(shí)施例二提供的IP地址存儲(chǔ)流程圖,如圖11所示,該流程可以包括以下步驟步驟1101 接收到包含IP地址的存儲(chǔ)指令時(shí),在數(shù)據(jù)庫(kù)中確定一個(gè)包含ip_ offset_id字段和ip字段的存儲(chǔ)空間。步驟1102 判斷該IP地址的類型;如果是IPv4地址,則執(zhí)行步驟1103 ;如果是 IPv6地址,則執(zhí)行步驟1104。步驟1103 將該IPv4地址轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在ip字段的低32位,將ip_ 0ffset_id字段設(shè)置為空,結(jié)束當(dāng)前存儲(chǔ)流程。步驟1104 將IPv6地址轉(zhuǎn)換為字符串后,從字符串的高位開始與偏移量表中的表項(xiàng)進(jìn)行匹配,獲取匹配的表項(xiàng)中的偏移長(zhǎng)度L和偏移量ID,將該偏移量ID存儲(chǔ)在ip_0ffset_id字段中,將轉(zhuǎn)換后的字符串的低128-L位轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在ip字段中。本發(fā)明中涉及的偏移量表是預(yù)先設(shè)置的,在進(jìn)行匹配時(shí),實(shí)際上是將IPv6轉(zhuǎn)換后得到的字符串從高位開始與偏移量表中各表項(xiàng)的地址前綴匹配,如果匹配到表項(xiàng),則將該表項(xiàng)的偏移量ID存儲(chǔ)在ip_offSet_id字段中。如果匹配不到表項(xiàng),則可以創(chuàng)建新的表項(xiàng), 該表項(xiàng)的前綴長(zhǎng)度采用默認(rèn)的L值,將該字符串的高L位存儲(chǔ)在該表項(xiàng)的地址前綴字段中, 并按照設(shè)定的偏移量ID順序增加偏移量ID。由于數(shù)據(jù)庫(kù)中的最大整數(shù)形式為64位正數(shù),但包含一位符號(hào)位,因此,為了簡(jiǎn)化對(duì)剩余128-L位存儲(chǔ)在ip字段中的數(shù)據(jù)的處理,則需要保證剩余128-L位至少在63位以內(nèi),也就是說(shuō),需要保證偏移量表中前綴長(zhǎng)度L至少在65位以上。例如,可以配置偏移量表中的前綴長(zhǎng)度L為80位,則該表項(xiàng)中地址前綴字段中地址前綴的長(zhǎng)度為80位,將剩余48 位字符串轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在ip字段中。此時(shí),默認(rèn)的前綴長(zhǎng)度也可以為80位。需要說(shuō)明的是,在偏移量表中配置的地址前綴不允許重疊甚至重復(fù),例如,當(dāng)已經(jīng)配置了 80位的某地址前綴在偏移量表中,又在偏移量表中配置了該地址前綴的前72位作為某表項(xiàng)的內(nèi)容,則在地址匹配過(guò)程中會(huì)出錯(cuò),因此這種情況是不允許的。另外,需要說(shuō)明的是,該實(shí)施例中是以將IPv6地址轉(zhuǎn)換為字符串的形式為例,也可以將IPv6地址轉(zhuǎn)換為其它設(shè)定的數(shù)據(jù)形式。針對(duì)圖11所示的IP地址存儲(chǔ)方式,對(duì)應(yīng)的IP地址查詢過(guò)程同樣可以分為以下兩種情況第一種情況查詢單個(gè)IP地址,此時(shí)對(duì)應(yīng)的查詢流程可以如圖12所示,包括以下步驟步驟1201 接收到包含單個(gè)IP地址的查詢指令后,判斷該IP地址的類型,如果是 IPv4地址,則執(zhí)行步驟1202 ;如果是IPv6地址,則執(zhí)行步驟1203。步驟1202 將該IPv4地址轉(zhuǎn)換為整型數(shù)據(jù)后,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為ip_ 0ffset_id字段為空,且ip字段為轉(zhuǎn)換后得到的數(shù)據(jù),獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果,結(jié)束當(dāng)前查詢流程。步驟1203 將該IPv6地址轉(zhuǎn)換為字符串后,在偏移量表中查找與該字符串匹配的表項(xiàng),如果查找到匹配的表項(xiàng),則執(zhí)行步驟1204 ;否則結(jié)束當(dāng)前查詢流程。本步驟中,將IPv6地址轉(zhuǎn)換為字符串后,從該字符串的高位開始,與偏移量表中各表項(xiàng)中的地址前綴進(jìn)行匹配。步驟1204 獲取查找到的表項(xiàng)中的偏移量ID和前綴長(zhǎng)度L,將字符串的低128-L 位轉(zhuǎn)換為整型數(shù)據(jù)后得到ip_postfiX,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為ip_0ffSet_id字段為獲取的偏移量ID并且ip字段為ip_p0stf ix,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果,結(jié)束當(dāng)前查詢流程。第二種情況查詢IP地址范圍,此時(shí)對(duì)應(yīng)的查詢流程可以如圖13所示,包括以下步驟步驟1301 接收到包含IP地址范圍的查詢指令后,判斷該IP地址范圍的類型,如果是IPv4地址范圍,則執(zhí)行步驟1302 ;如果是IPv6地址范圍,則執(zhí)行步驟1303。步驟1302 將該IPv4地址范圍的起始端值和結(jié)束端值轉(zhuǎn)換為整型數(shù)據(jù)后,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為ip_offSet_id字段為空,并且ip字段大于轉(zhuǎn)換后的起始端值且小于轉(zhuǎn)換后的結(jié)束端值,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果,結(jié)束當(dāng)前查詢流程。假設(shè)該IPv4地址轉(zhuǎn)換后的起始端值為ipV4_start,轉(zhuǎn)換后的結(jié)束端值為ipv4_ end,則設(shè)置的查詢條件可以表示為ip_offset_id字段=null andipv4_start <= ip字段<=ipv4_end。步驟1303 將該IPv6地址范圍的起始端值和結(jié)束端值轉(zhuǎn)換為與偏移量表中地址前綴相同的數(shù)據(jù)類型后,在偏移量表中分別進(jìn)行匹配,如果分別存在與起始端值匹配的表項(xiàng)和與結(jié)束端值匹配的表項(xiàng),則執(zhí)行步驟1304 ;否則結(jié)束當(dāng)前查詢流程。步驟1304 獲取與起始端值匹配的表項(xiàng)和與結(jié)束端值匹配的表項(xiàng)中的偏移量ID 和前綴長(zhǎng)度,其中,起始端值和結(jié)束端值匹配到的偏移量ID分別為Start_id和end_id, 前綴長(zhǎng)度分別為start_L和end_L,并分別將起始端值的低128-Start_L位和結(jié)束端值的 128-end_L位轉(zhuǎn)換為整型數(shù)據(jù)后分別得到startIp_postfix和endIp_postfix。步驟1305 判斷起始端值對(duì)應(yīng)的偏移量ID和結(jié)束端值對(duì)應(yīng)的偏移量ID是否相同,即start_id和end_id是否相同,如果相同,執(zhí)行步驟1306 ;如果不相同,執(zhí)行步驟 1307。步驟1306 設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為ip_offSet_id字段為start_id,并且ip 字段大于或等于startIp_postfix且小于或等于endIp_postfix,即ip_offset_id字段= start_id and (startIp_postfix <= ip 字段<=endIp_postfix),獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果,結(jié)束當(dāng)前查詢流程。步驟1307 按任意順序或者同時(shí)執(zhí)行步驟1307-1、1307-2和1307-3。如果start_id和end_id不相同,則同樣可以將查詢范圍分為三段偏移量ID為 start_id的情況、startIP前綴和endIP前綴之間的部分對(duì)應(yīng)的偏移量ID的情況、偏移量 ID為end_id的情況,分別對(duì)應(yīng)步驟1307-1、1307-2和1307-3。步驟1307-1 設(shè)置數(shù)據(jù)庫(kù)的查詢條件為ip_offSet_id字段為start_id并且ip 字段大于或等于 startIp_postfix,即 ip_offset_id 字段=start_id and ip 字段> = StartIp_p0StfiX,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果。步驟1307-2 確定步驟1303中起始端值和結(jié)束端值轉(zhuǎn)換后的數(shù)據(jù)之間的各數(shù)據(jù), 查找偏移量表中與確定的各數(shù)據(jù)匹配的各偏移量ID,如果查找到偏移量ID,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段為查找到的各偏移量ID之間的邏輯或,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果;如果查找不到偏移量ID,則結(jié)束當(dāng)前查詢流程。在步驟1303中起始端值和結(jié)束端值轉(zhuǎn)換為字符串后,確定起始端值對(duì)應(yīng)的字符串和結(jié)束端值對(duì)應(yīng)的字符串之間的所有字符串,查找偏移量表中這些字符串匹配的
偏移量ID,假設(shè)為IDk、IDk+1.....IDm,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段是IDk or
IDk+1or. . . or IDm0如果查找不到相應(yīng)的偏移量ID,則說(shuō)明數(shù)據(jù)庫(kù)中無(wú)記錄,結(jié)束流程。步驟1307-3 設(shè)置數(shù)據(jù)庫(kù)的查詢條件為ip_offSet_id字段為end_id并且ip字段大于或等于 endIp_postfix,即 ip_offset_id 字段=end_id and ip 字段<=endlp_ postfix,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果。步驟1308 整合步驟1307-1、1307-2和1307-3獲取的查詢結(jié)果,作為接收到的查
詢指令對(duì)應(yīng)的查詢結(jié)果,結(jié)束當(dāng)前查詢流程。
以上是對(duì)本發(fā)明所提供的方法進(jìn)行的詳細(xì)描述,下面對(duì)本發(fā)明提供的裝置進(jìn)行詳細(xì)描述。圖14為本發(fā)明提供的裝置結(jié)構(gòu)圖,如圖14所示,該裝置可以包括指令接收單元 1400、空間確定單元1401、第一類型判斷單元1402、IPv4地址存儲(chǔ)單元1403和IPv6地址存儲(chǔ)單元1404。指令接收單元1400,用于接收包含IP地址的存儲(chǔ)指令??臻g確定單元1401,用于在指令接收單元1400接收到包含IP地址的存儲(chǔ)指令后, 確定數(shù)據(jù)庫(kù)中包含前綴字段和后綴字段的存儲(chǔ)空間。第一類型判斷單元1402,用于判斷IP地址的類型,如果是IPv4地址,則將該IPv4 地址發(fā)送給IPv4地址存儲(chǔ)單元1403 ;如果是IPv6地址,則將該IPv6地址發(fā)送給IPv6地址存儲(chǔ)單元1404。IPv4地址存儲(chǔ)單元1403,用于將IPv4地址轉(zhuǎn)換成整型數(shù)據(jù)后存儲(chǔ)在后綴字段中, 將前綴字段置空。IPv6地址存儲(chǔ)單元1404,用于將IPv6地址劃分為高位地址部分和低位地址部分, 將高位地址部分的信息存儲(chǔ)在前綴字段中,將低位地址部分轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在后綴字段中。其中,根據(jù)IPv6地址存儲(chǔ)單元1404的不同實(shí)現(xiàn),該裝置可以采用以下兩種不同的結(jié)構(gòu)第一種,如圖14所示,IPv6地址存儲(chǔ)單元1404可以具體包括地址劃分子單元 14041、第一地址存儲(chǔ)子單元14042和第二地址存儲(chǔ)子單元14043 ;地址劃分子單元14041,用于將IPv6地址劃分為高64位和低64位,將高64位發(fā)送給第一地址存儲(chǔ)子單元14042,將低64位發(fā)送給第二地址存儲(chǔ)子單元14043。第一地址存儲(chǔ)子單元14042,用于將高64位轉(zhuǎn)換成整型數(shù)據(jù)后存儲(chǔ)在前綴字段中。第二地址存儲(chǔ)子單元14043,用于將低64位轉(zhuǎn)換成整型數(shù)據(jù)后存儲(chǔ)在后綴字段中。該種情況下,該裝置還可以實(shí)現(xiàn)單個(gè)IP地址的查詢,此時(shí),該裝置可以包括第二類型判斷單元1405、第一地址查詢單元1406和第二地址查詢單元1407。指令接收單元1400,還可以用于接收包含單個(gè)IP查詢地址的查詢指令。在此,指令接收單元1400對(duì)接收到的查詢指令具備識(shí)別功能,即能夠識(shí)別出是查詢單個(gè)IP地址還是查詢IP地址范圍,如果該查詢指令中僅包含單個(gè)IP查詢地址,則說(shuō)明該查詢指令用于查詢單個(gè)IP地址;如果該查詢指令中包含IP查詢地址范圍(即包含起始查詢端值和結(jié)束查詢端值),則說(shuō)明該查詢指令用于查詢IP地址范圍。該部分內(nèi)容為現(xiàn)有技術(shù),在此不再詳細(xì)贅述。第二類型判斷單元1405,用于判斷IP查詢地址的類型,如果是IPv4查詢地址,將該IPv4查詢地址發(fā)送給第一地址查詢單元1406 ;如果是IPv6查詢地址,則將該IPv6查詢地址發(fā)送給第二地址查詢單元1407。第一地址查詢單元1406,用于將IPv4查詢地址轉(zhuǎn)換為整型數(shù)據(jù)后,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為空且后綴字段為IPv4查詢地址轉(zhuǎn)換后得到的數(shù)據(jù),獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果。
17
第二地址查詢單元1407,用于將IPv6查詢地址劃分為高64位和低64位后分別轉(zhuǎn)換為整型數(shù)據(jù),得到高64位查詢地址和低64位查詢地址,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為高64位查詢地址且后綴字段為低64位查詢地址,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果。針對(duì)IP地址范圍的查詢,該裝置還可以包括第四類型判斷單元1408、第五地址查詢單元1409、第一地址處理單元1410、第一比較單元1411、第二比較單元1412、第六地址查詢單元1413、第七地址查詢單元1414和第八地址查詢單元1415。指令接收單元1400,還可以用于接收包含IP查詢地址范圍的查詢指令。第四類型判斷單元1408,用于判斷IP查詢地址范圍的類型,如果是IPv4查詢地址范圍,則將該IPv4查詢地址范圍發(fā)送給第五地址查詢單元1409 ;如果是IPv6地址查詢地址范圍,則將該IPv6查詢地址范圍發(fā)送給第一地址處理單元1410。第五地址查詢單元1409,用于將IPv4查詢地址范圍的起始端值和結(jié)束端值轉(zhuǎn)換為整型數(shù)據(jù)后分別得到ipV4_start和ipv4_end,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為空,并且ipv4_Start <=后綴字段<=ipv4_end,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果。第一地址處理單元1410,用于將IPv6查詢地址范圍的起始端值ipv6_Start和結(jié)束端值ipv6_end分別劃分為高64位和低64位,再轉(zhuǎn)換為整型數(shù)據(jù)后分別得到ipV6_start 的高64位查詢地址startIP_prefix禾口低64位查詢地址startIP_postfx,以及ipv6_end 的高64位查詢地址endIP_prefix和低64位查詢地址endIP_postfix。第一比較單元1411,用于判斷startIP_prefix和endIP_prefix是否相同。第二比較單元1412,用于在第一比較單元1411的判斷結(jié)果為是時(shí),判斷startIP_ postfix和endIP_postfix的符號(hào)位是否相同。第六地址查詢單元1413,用于在第二比較單元1412的判斷結(jié)果為是時(shí),設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為startIP_prefiX且StartIP_p0StfiX < =后綴字段< = endIP_p0StfiX,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果。第七地址查詢單元1414,用于在第二比較單元1412的判斷結(jié)果為否時(shí),設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為startIP_prefiX并且后綴字段>=startIP_postfix or 后綴字段< =endIP_postfix,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果。第八地址查詢單元1415,用于在第一比較單元1411的判斷結(jié)果為否時(shí),按照任意順序或同時(shí)執(zhí)行操作Q11、操作Q12和操作Q13,并整合通過(guò)操作Qll、Q12和Q13獲取的查
詢結(jié)果。其中,操作Qll為如果StartIP_p0StfiX的符號(hào)位是0,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段為startIP_prefiX and (后綴字段> =startip_p0stfix or后綴字段 <=-D ;如果startIP_p0stfiX的符號(hào)位是1,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段為 startIP_prefix and startIP_postfix < =后綴字段< =-1 ;獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果。操作Q12為如果startIP_prefiX和endIP_prefiX的符號(hào)位相同,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為:startIP_prefix〈前綴字段< endIP_prefix ;如果 startIP_prefix 和 endIP_prefix的符號(hào)位不同,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段> startIP_prefiX or前綴字段<=endIP_prefix ;獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果。操作Q13為如果endIP_p0StfiX的符號(hào)位是0,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段為 endIP_prefix and 0 <=后綴字段<=endIP_postfix ;如果 endIP_postfix 的符號(hào)位是1,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段為endIP_prefiX and(后綴字段> = Oor后綴字段<=endIP_postfix);獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果。上述and為邏輯與,or為邏輯或。第二種如圖15所示,該裝置還可以包括偏移表存儲(chǔ)單元1430。IPv6地址存儲(chǔ)單元1404可以具體包括第一地址轉(zhuǎn)換子單元14045、表項(xiàng)匹配子單元14046、第三地址存儲(chǔ)子單元14047、偏移表項(xiàng)新建子單元14044和第四地址存儲(chǔ)子單元14048。偏移表存儲(chǔ)單元1430,用于存儲(chǔ)偏移量表,該偏移量表中的各表項(xiàng)包含偏移量 ID、地址前綴和前綴長(zhǎng)度。該偏移表存儲(chǔ)單元1430可以設(shè)置為一個(gè)獨(dú)立的單元,也可以設(shè)置在IPv6地址存儲(chǔ)單元1404中,也可以設(shè)置在IPv4地址存儲(chǔ)單元1403中。上述默認(rèn)的L’值可以是預(yù)先設(shè)定的,也可以是系統(tǒng)自動(dòng)生成的。該L’值至少在 65位以上,例如可以采用默認(rèn)的L’值為80位。第一地址轉(zhuǎn)換子單元14045,將IPv6地址轉(zhuǎn)換為與偏移量表中地址前綴相同類型的數(shù)據(jù)后發(fā)送給表項(xiàng)匹配子單元14046。表項(xiàng)匹配子單元14046,用于從轉(zhuǎn)換后的IPv6地址的高位開始與偏移量表中的表項(xiàng)進(jìn)行匹配,如果存在匹配的表項(xiàng),則向第三地址存儲(chǔ)子單元14047發(fā)送處理通知;否則, 將轉(zhuǎn)換后的IPv6地址發(fā)送給偏移表項(xiàng)新建子單元14044。第三地址存儲(chǔ)子單元14047,用于獲取匹配的表項(xiàng)中的偏移量ID和前綴長(zhǎng)度L,將獲取的偏移量ID存儲(chǔ)在前綴字段中,將轉(zhuǎn)換后的IPv6地址的低M位轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在后綴字段中,其中,M= 128-L。偏移表項(xiàng)新建子單元14044,用于在表項(xiàng)匹配子單元14046匹配不到相應(yīng)的表項(xiàng)時(shí),在接收到表項(xiàng)匹配子單元14046發(fā)送的轉(zhuǎn)換后的IPv6地址時(shí),在偏移量表中創(chuàng)建新的表項(xiàng),該新的表項(xiàng)的前綴長(zhǎng)度采用默認(rèn)的L’值,將轉(zhuǎn)換后的IPv6地址的高L’位存儲(chǔ)為新的表項(xiàng)的地址前綴,并按照設(shè)定的偏移量ID順序?yàn)樾碌谋眄?xiàng)設(shè)置偏移量ID,將該偏移量ID 和L’值發(fā)送給第四地址存儲(chǔ)子單元14048。第四地址存儲(chǔ)子單元14048,用于將接收到的偏移量ID存儲(chǔ)在前綴字段中,將轉(zhuǎn)換后的IPv6地址的低N位轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在后綴字段中,其中,N= 128-L’。針對(duì)單個(gè)IP地址查詢,該裝置還可以包括第三類型判斷單元1416、第三地址查詢單元1417和第四地址查詢單元1418。指令接收單元1400,還可以用于接收包含單個(gè)IP查詢地址的查詢指令。第三類型判斷單元1416,用于判斷IP查詢地址的類型,如果是IPv4查詢地址,將該IPv4查詢地址發(fā)送給第三地址查詢單元1417 ;如果是IPv6查詢地址,則將該IPv6查詢地址發(fā)送給第四地址查詢單元1418。第三地址查詢單元1417,用于將IPv4查詢地址轉(zhuǎn)換為整型數(shù)據(jù)后,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為空且后綴字段為IPv4查詢地址轉(zhuǎn)換后得到的數(shù)據(jù),獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果。第四地址查詢單元1418,用于IPv6查詢地址轉(zhuǎn)換為與偏移量表中地址前綴相同類型的數(shù)據(jù)后,在偏移量表中查找與IPv6查詢地址轉(zhuǎn)換后的數(shù)據(jù)匹配的表項(xiàng),如果查找不到匹配的表項(xiàng),結(jié)束操作;如果查找到匹配的表項(xiàng),則獲取查找到的表項(xiàng)中的偏移量ID和前綴長(zhǎng)度Li,將IPv6查詢地址轉(zhuǎn)換后數(shù)據(jù)的低附位轉(zhuǎn)換為整型數(shù)據(jù)后得到ip_p0Stfix, 設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為獲取的偏移量ID且后綴字段為ip_p0stfiX,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果,結(jié)束當(dāng)前查詢流程;其中,W = 128-L1。針對(duì)IP地址范圍的查詢,該裝置還可以包括第五類型判斷單元1419、第九地址查詢單元1420、第二地址處理單元1421、第三地址處理單元1422、第三比較單元1423、第十地址查詢單元1424和第i^一地址查詢單元1425。指令接收單元1400,還用于接收包含IP查詢地址范圍的查詢指令。與第一種結(jié)構(gòu)中相同,指令接收單元1400對(duì)接收到的查詢指令具備識(shí)別功能,即能夠識(shí)別出是查詢單個(gè)IP地址還是查詢IP地址范圍,如果該查詢指令中僅包含單個(gè)IP查詢地址,則說(shuō)明該查詢指令用于查詢單個(gè)IP地址;如果該查詢指令中包含IP查詢地址范圍 (即包含起始查詢端值和結(jié)束查詢端值),則說(shuō)明該查詢指令用于查詢IP地址范圍。第五類型判斷單元1419,用于判斷該IP查詢地址范圍的類型,如果是IPv4查詢地址范圍,則將該IPv4地址查詢范圍發(fā)送給第九地址查詢單元1420 ;如果是IPv6查詢地址范圍,則將該IPv6查詢地址范圍發(fā)送給第二地址處理單元1421。第九地址查詢單元1420,用于將IPv4查詢地址范圍的起始端值和結(jié)束端值轉(zhuǎn)換為整型數(shù)據(jù)后分別得到ipV4_start和ipv4_end,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為空,并且ipv4_Start <=后綴字段<=ipv4_end,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果。第二地址處理單元1421,用于將IPv6查詢地址范圍的起始端值和結(jié)束端值轉(zhuǎn)換為與偏移量表中地址前綴相同類型的數(shù)據(jù)后,在偏移量表中分別進(jìn)行匹配。第三地址處理單元1422,用于在第二地址處理單元1421匹配到與轉(zhuǎn)換后起始端值匹配的表項(xiàng)以及與轉(zhuǎn)換后結(jié)束端值匹配的表項(xiàng)時(shí),獲取與轉(zhuǎn)換后的起始端值以及結(jié)束端值匹配的表項(xiàng)中的偏移量ID分別為start_id和end_id,前綴長(zhǎng)度分別為start_L和end_ L,并分別將轉(zhuǎn)換后的起始端值的低N2位和轉(zhuǎn)換后的結(jié)束端值的低N3位轉(zhuǎn)換為整型數(shù)據(jù)后分別得至IJ startIp_postfix 禾口 endIp_postfix ;其中,N2 = 128_start_L,N3 = 128_end_L。第三比較單元1423,用于判斷start_id和end_id是否相同。第十地址查詢單元1424,用于在第三比較單元1423的判斷結(jié)果為是時(shí),設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為start_id and StartIp_p0StfiX < =后綴字段< = endIp_p0Stfix,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果。第十一地址查詢單元1425,用于在第三比較單元1423的判斷結(jié)果為否時(shí),按照任意順序或者同時(shí)執(zhí)行操作Q21、操作Q22和操作Q23,并整合操作Q21、操作Q22和操作Q23 獲取的查詢結(jié)果。其中,操作Q21為設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段為startjd and后綴字段 >=startIp_p0Stfix,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果。操作Q22為確定起始端值轉(zhuǎn)換為與偏移量表中地址前綴相同類型的數(shù)據(jù)以及結(jié)束端值轉(zhuǎn)換為與偏移量表中地址前綴相同類型的數(shù)據(jù)之間的各數(shù)據(jù),查找偏移量表中與確定的各數(shù)據(jù)匹配的各偏移量ID,如果查找到偏移量ID,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段為查找到的各偏移量ID之間的邏輯或,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果。操作Q23為設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段為end_id and后綴字段< =endIp_p0Stfix,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果。由以上描述可以看出,本發(fā)明提供的方法和裝置具備以下優(yōu)點(diǎn)1)將IP地址存儲(chǔ)在包含前綴字段和后綴字段的存儲(chǔ)空間,并對(duì)存儲(chǔ)指令中具體的IP地址類型進(jìn)行區(qū)分,即針對(duì)IPv4地址,轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在后綴字段中,前綴字段置空;針對(duì)IPv6地址,則將IPv6地址劃分為高位存儲(chǔ)地址和低位存儲(chǔ)地址,將高位存儲(chǔ)地址的信息存儲(chǔ)在前綴字段中,將低位存儲(chǔ)地址轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在后綴字段中。這種存儲(chǔ)方式實(shí)現(xiàn)了在數(shù)據(jù)庫(kù)中IPv4地址和IPv6地址的統(tǒng)一存儲(chǔ),為IPv4地址和IPv6地址的統(tǒng)一查詢提供方便,提高了存儲(chǔ)和查詢效率。2)該存儲(chǔ)方式能夠兼容當(dāng)前的IPv4存儲(chǔ)系統(tǒng),只需將原有的IPv4地址存儲(chǔ)空間作為后綴字段,不會(huì)造成已經(jīng)存儲(chǔ)的IPv4地址丟失,實(shí)現(xiàn)IPv4存儲(chǔ)系統(tǒng)無(wú)縫過(guò)渡到IPv6 存儲(chǔ)系統(tǒng)。3)本發(fā)明中IPv4地址和IPv6地址均以整型數(shù)據(jù)的形式存儲(chǔ),避免了現(xiàn)有第一種方式中存儲(chǔ)為字符串的方式所帶來(lái)的查詢速度極為緩慢的缺點(diǎn)。4)本發(fā)明提供的方式無(wú)需進(jìn)行任何復(fù)雜的算法,相比較現(xiàn)有技術(shù)的第二種方式, 實(shí)現(xiàn)十分簡(jiǎn)單。另外,對(duì)于現(xiàn)有技術(shù)的第二種方式,由于IPv6地址為128位,而摘要算法的結(jié)果大多為32位,在海量地址存儲(chǔ)中,重復(fù)率很大,影響系統(tǒng)準(zhǔn)確性,并且,摘要算法的結(jié)果并不是線性的,無(wú)法對(duì)IPv6地址進(jìn)行地址范圍的查詢,存在很大局限性。而本發(fā)明提供的方式達(dá)到128位,在海量地址存儲(chǔ)中,不會(huì)產(chǎn)生重復(fù),系統(tǒng)準(zhǔn)確性得到提高。另外,本發(fā)明中存儲(chǔ)的IP地址均是線性的,可以方便的實(shí)現(xiàn)單個(gè)IP地址或IP地址范圍的查詢。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。
權(quán)利要求
1.一種存儲(chǔ)IPv4地址和IPv6地址的方法,其特征在于,該方法包括A、接收到包含IP地址的存儲(chǔ)指令時(shí),確定數(shù)據(jù)庫(kù)中包含前綴字段和后綴字段的存儲(chǔ)空間,并判斷所述IP地址的類型,如果是IPv4地址,則執(zhí)行步驟B ;如果是IPv6地址,則執(zhí)行步驟C ; B、將所述IPv4地址轉(zhuǎn)換成整型數(shù)據(jù)后存儲(chǔ)在所述后綴字段中,將所述前綴字段置空, 結(jié)束當(dāng)前存儲(chǔ)流程;C、將所述IPv6地址劃分為高位地址部分和低位地址部分,將高位地址部分的信息存儲(chǔ)在所述前綴字段中,將低位地址部分轉(zhuǎn)換成整型數(shù)據(jù)后存儲(chǔ)在所述后綴字段中,結(jié)束當(dāng)前存儲(chǔ)流程。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟C具體包括將所述IPv6地址劃分為高64位和低64位,將高64位轉(zhuǎn)換成整型數(shù)據(jù)后存儲(chǔ)在所述前綴字段中,將低64位轉(zhuǎn)換成整型數(shù)據(jù)后存儲(chǔ)在所述后綴字段中,結(jié)束當(dāng)前存儲(chǔ)流程。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,預(yù)設(shè)偏移量表,該偏移量表中的各表項(xiàng)包含偏移量ID、地址前綴和前綴長(zhǎng)度;所述步驟C具體包括Cl、將所述IPv6地址轉(zhuǎn)換為與所述偏移量表中地址前綴相同類型的數(shù)據(jù)后,從轉(zhuǎn)換后的IPv6地址的高位開始與所述偏移量表中的表項(xiàng)進(jìn)行匹配,如果存在匹配的表項(xiàng),則執(zhí)行步驟C2 ;否則,執(zhí)行步驟C3 ;C2、獲取匹配的表項(xiàng)中的偏移量ID和前綴長(zhǎng)度L,將獲取的偏移量ID存儲(chǔ)在所述前綴字段中,將轉(zhuǎn)換后的IPv6地址的低M位轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在所述后綴字段中,其中,M =128-L,結(jié)束當(dāng)前存儲(chǔ)流程;C3、在偏移量表中創(chuàng)建新的表項(xiàng),該新的表項(xiàng)的前綴長(zhǎng)度采用默認(rèn)的L’值,將轉(zhuǎn)換后的 IPv6地址的高L’位存儲(chǔ)為所述新的表項(xiàng)的地址前綴,并按照設(shè)定的偏移量ID順序?yàn)樗鲂碌谋眄?xiàng)設(shè)置偏移量ID,將設(shè)置的該偏移量ID存儲(chǔ)在所述前綴字段中,將轉(zhuǎn)換后的IPv6地址的低N位轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在所述后綴字段中,其中,N= 128-L’,結(jié)束當(dāng)前存儲(chǔ)流程。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,該方法還包括以下查詢流程D1、接收到包含單個(gè)IP查詢地址的查詢指令后,判斷該單個(gè)IP查詢地址的類型,如果是IPv4查詢地址,則執(zhí)行步驟El ;如果是IPv6查詢地址,則執(zhí)行步驟Fl ;E1、將所述IPv4查詢地址轉(zhuǎn)換為整型數(shù)據(jù)后,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為空且后綴字段為所述IPv4查詢地址轉(zhuǎn)換后得到的數(shù)據(jù),獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果,結(jié)束當(dāng)前查詢流程;F1、將所述IPv6查詢地址劃分為高64位和低64位后分別轉(zhuǎn)換為整型數(shù)據(jù),得到高64 位查詢地址和低64位查詢地址,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為所述高64位查詢地址且后綴字段為所述低64位查詢地址,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果。
5.根據(jù)權(quán)利要求3所述的方法,其特征在于,該方法還包括以下查詢流程D2、接收到包含單個(gè)IP查詢地址的查詢指令后,判斷所述IP查詢地址的類型,如果是 IPv4查詢地址,則執(zhí)行步驟E2 ;如果是IPv6查詢地址,則執(zhí)行步驟F2 ;E2、將所述IPv4查詢地址轉(zhuǎn)換為整型數(shù)據(jù)后,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為空且后綴字段為所述IPv4查詢地址轉(zhuǎn)換后得到的數(shù)據(jù),獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果,結(jié)束當(dāng)前查詢流程;F2、將所述IPv6查詢地址轉(zhuǎn)換為與所述偏移量表中地址前綴相同類型的數(shù)據(jù)后,在所述偏移量表中查找與所述IPv6查詢地址轉(zhuǎn)換后的數(shù)據(jù)匹配的表項(xiàng),如果查找到匹配的表項(xiàng),則執(zhí)行步驟G2,否則,結(jié)束當(dāng)前查詢流程;G2、獲取查找到的表項(xiàng)中的偏移量ID和前綴長(zhǎng)度Li,將所述IPv6查詢地址轉(zhuǎn)換后數(shù)據(jù)的低m位轉(zhuǎn)換為整型數(shù)據(jù)后得到ip_p0stfiX,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為獲取的偏移量ID且后綴字段為ip_p0stfix,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果,結(jié)束當(dāng)前查詢流程;其中,Nl = 128-L1。
6.根據(jù)權(quán)利要求2所述的方法,其特征在于,該方法還包括以下查詢流程 HI、接收到包含IP查詢地址范圍的查詢指令后,判斷所述IP查詢地址范圍的類型,如果是IPv4查詢地址范圍,則執(zhí)行步驟Il ;如果是IPv6查詢地址范圍,則執(zhí)行步驟Jl ;II、將所述IPv4查詢地址范圍的起始端值和結(jié)束端值轉(zhuǎn)換為整型數(shù)據(jù)后分別得到 ipv4_start和ipv4_end,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為空,并且ipv4_Start <=后綴字段<=ipV4_end,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果,結(jié)束當(dāng)前查詢流程;J1、將所述IPv6查詢地址范圍的起始端值ipv6_Start和結(jié)束端值ipv6_end分別劃分為高64位和低64位,再轉(zhuǎn)換為整型數(shù)據(jù)后分別得到ipV6_start的高64位查詢地址 startIP_prefix和低64位查詢地址startIP_postfix,以及ipv6_end的高64位查詢地址 endIP_prefix 和低 64 位查詢地址 endIP_postfix ;判斷 startIP_prefix 和 endIP_prefix 是否相同,如果相同,執(zhí)行步驟Kl ;否則執(zhí)行步驟Ql ;K1、判斷StartIP_p0StfiX和endIP_p0Stf ix的符號(hào)位是否相同,如果相同,執(zhí)行步驟 01 ;否則執(zhí)行步驟Pl ;·01、設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為startIP_prefiX且StartIP_p0StfiX <=后綴字段<=endIP_p0Stfix,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果,結(jié)束當(dāng)前查詢流程;P1、設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為startIP_prefiX并且后綴字段> = startIP_postfix or后綴字段< =endIP_p0Stfix,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果,結(jié)束當(dāng)前查詢流程;Q1、按任意順序或同時(shí)執(zhí)行步驟Q11、Q12和Q13 ;Q11、如果startIP_p0stfiX的符號(hào)位是0,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段為 startIP_prefix and(后綴字段 > =startIP_postfix or 后綴字段 < =-1);如果 startIP_postfix的符號(hào)位是1,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段為StartIP_prefiX and startIP_postfix <=后綴字段<=_1 ;獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果;Q12、如果startIP_prefiX和endIP_prefiX的符號(hào)位相同,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為:startIP_prefix <前綴字段< endIP_prefix ;如果 startIP_prefix 禾口 endIP_prefix 的符號(hào)位不同,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段> startIP_prefiX or前綴字段 <=endIP_prefix ;獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果;Q13、如果endIP_p0StfiX的符號(hào)位是0,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段為 endIP_prefix and 0 <=后綴字段<=endIP_postfix ;如果 endIP_postfix 的符號(hào)位是 1,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段為endIP_prefiX and(后綴字段>=Oor后綴字段<=endIP postfix);獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果; R1、整合步驟Q11、Q12和Q13獲取的查詢結(jié)果; 其中,所述and為邏輯與,所述or為邏輯或。
7.根據(jù)權(quán)利要求3所述的方法,其特征在于,該方法還包括以下查詢流程;H2、接收到包含IP查詢地址范圍的查詢指令后,判斷該IP查詢地址范圍的類型,如果是IPv4查詢地址范圍,則執(zhí)行步驟12 ;如果是IPv6查詢地址范圍,則執(zhí)行步驟J2 ;12、將所述IPv4查詢地址范圍的起始端值和結(jié)束端值轉(zhuǎn)換為整型數(shù)據(jù)后分別得到 ipv4_start和ipv4_end,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為空,并且ipv4_Start <=后綴字段<=ipV4_end,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果,結(jié)束當(dāng)前查詢流程;J2、將所述IPv6查詢地址范圍的起始端值和結(jié)束端值轉(zhuǎn)換為與所述偏移量表中地址前綴相同類型的數(shù)據(jù)后,在所述偏移量表中分別進(jìn)行匹配,如果分別存在與轉(zhuǎn)換后起始端值匹配的表項(xiàng)以及與轉(zhuǎn)換后結(jié)束端值匹配的表項(xiàng),則執(zhí)行步驟K2 ;否則,結(jié)束當(dāng)前查詢流程;K2、獲取與轉(zhuǎn)換后的起始端值以及結(jié)束端值匹配的表項(xiàng)中的偏移量ID分別為start_ id和end_id,前綴長(zhǎng)度分別為start_L和end_L,并分別將轉(zhuǎn)換后的起始端值的低N2位和轉(zhuǎn)換后的結(jié)束端值的低N3位轉(zhuǎn)換為整型數(shù)據(jù)后分別得到StartIp_p0StfiX和endlp_ postfix ;其中,N2 = 128-start_L, N3 = 128-end_L ;02、判斷start_id和end_id是否相同,如果相同,執(zhí)行步驟P2 ;否則執(zhí)行步驟Q2 ; P2、設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為start_id and StartIp_p0Stfix < =后綴字段<=endIp_p0stfiX,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果,結(jié)束當(dāng)前查詢流程; Q2、按照任意順序或者同時(shí)執(zhí)行步驟Q21、Q22和Q23 ;Q21、設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段為startjd and后綴字段> =Startlp_ postfix,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果;Q22、確定起始端值轉(zhuǎn)換為與所述偏移量表中地址前綴相同類型的數(shù)據(jù)以及結(jié)束端值轉(zhuǎn)換為與所述偏移量表中地址前綴相同類型的數(shù)據(jù)之間的各數(shù)據(jù),查找所述偏移量表中與確定的所述各數(shù)據(jù)匹配的各偏移量ID,如果查找到偏移量ID,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段為查找到的各偏移量ID之間的邏輯或,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果;Q23、設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段為end_id and后綴字段<=endlp_ postfix,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果;尺2、整合步驟021、022和Q23獲取的查詢結(jié)果; 其中,所述and為邏輯與,所述or為邏輯或。
8.一種存儲(chǔ)IPv4地址和IPv6地址的裝置,其特征在于,該裝置包括指令接收單元、 空間確定單元、第一類型判斷單元、IPv4地址存儲(chǔ)單元和IPv6地址存儲(chǔ)單元;所述指令接收單元,用于接收包含IP地址的存儲(chǔ)指令;所述空間確定單元,用于在所述指令接收單元接收到包含IP地址的存儲(chǔ)指令后,確定數(shù)據(jù)庫(kù)中包含前綴字段和后綴字段的存儲(chǔ)空間;所述第一類型判斷單元,用于判斷所述IP地址的類型,如果是IPv4地址,則將該IPv4 地址發(fā)送給所述IPv4地址存儲(chǔ)單元;如果是IPv6地址,則將該IPv6地址發(fā)送給所述IPv6 地址存儲(chǔ)單元;所述IPv4地址存儲(chǔ)單元,用于將所述IPv4地址轉(zhuǎn)換成整型數(shù)據(jù)后存儲(chǔ)在所述后綴字段中,將所述前綴字段置空;所述IPv6地址存儲(chǔ)單元,用于將所述IPv6地址劃分為高位地址部分和低位地址部分, 將高位地址部分的信息存儲(chǔ)在所述前綴字段中,將低位地址部分轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在所述后綴字段中。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述IPv6地址存儲(chǔ)單元包括地址劃分子單元和第一地址存儲(chǔ)子單元和第二地址存儲(chǔ)子單元;所述地址劃分子單元,用于將所述IPv6地址劃分為高64位和低64位,將高64位發(fā)送給第一地址存儲(chǔ)子單元,將低64位發(fā)送給第二地址存儲(chǔ)子單元;所述第一地址存儲(chǔ)子單元,用于將所述高64位轉(zhuǎn)換成整型數(shù)據(jù)后存儲(chǔ)在所述前綴字段中;所述第二地址存儲(chǔ)子單元,用于將所述低64位轉(zhuǎn)換成整型數(shù)據(jù)后存儲(chǔ)在所述后綴字段中。
10.根據(jù)權(quán)利要求8所述的裝置,其特征在于,該裝置還包括偏移表存儲(chǔ)單元,用于存儲(chǔ)偏移量表,該偏移量表中的各表項(xiàng)包含偏移量ID、地址前綴和前綴長(zhǎng)度;所述IPv6地址存儲(chǔ)單元包括第一地址轉(zhuǎn)換子單元、表項(xiàng)匹配子單元、第三地址存儲(chǔ)子單元、偏移表項(xiàng)新建子單元和第四地址存儲(chǔ)子單元;所述第一地址轉(zhuǎn)換子單元,將所述IPv6地址轉(zhuǎn)換為與所述偏移量表中地址前綴相同類型的數(shù)據(jù)后發(fā)送給表項(xiàng)匹配子單元;所述表項(xiàng)匹配子單元,用于從轉(zhuǎn)換后的IPv6地址的高位開始與所述偏移量表中的表項(xiàng)進(jìn)行匹配,如果存在匹配的表項(xiàng),則向第三地址存儲(chǔ)子單元發(fā)送處理通知;否則,將轉(zhuǎn)換后的IPv6地址發(fā)送給所述偏移表項(xiàng)新建子單元;所述第三地址存儲(chǔ)子單元,用于獲取匹配的表項(xiàng)中的偏移量ID和前綴長(zhǎng)度L,將獲取的偏移量ID存儲(chǔ)在所述前綴字段中,將轉(zhuǎn)換后的IPv6地址的低M位轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在所述后綴字段中,其中,M= 128-L;所述偏移表項(xiàng)新建子單元,用于接收到所述表項(xiàng)匹配子單元發(fā)送的轉(zhuǎn)換后的IPv6地址后,在偏移量表中創(chuàng)建新的表項(xiàng),該新的表項(xiàng)的前綴長(zhǎng)度采用默認(rèn)的L’值,將轉(zhuǎn)換后的 IPv6地址的高L’位存儲(chǔ)為所述新的表項(xiàng)的地址前綴,并按照設(shè)定的偏移量ID順序?yàn)樗鲂碌谋眄?xiàng)設(shè)置偏移量ID,將該偏移量ID和L’值發(fā)送給第四地址存儲(chǔ)子單元;所述第四地址存儲(chǔ)子單元,用于將接收到的偏移量ID存儲(chǔ)在所述前綴字段中,將轉(zhuǎn)換后的IPv6地址的低N位轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在所述后綴字段中,其中,N= 128-L’。
11.根據(jù)權(quán)利要求9所述的裝置,其特征在于,該裝置還包括第二類型判斷單元、第一地址查詢單元和第二地址查詢單元;所述指令接收單元,還用于接收包含單個(gè)IP查詢地址的查詢指令; 所述第二類型判斷單元,用于判斷所述IP查詢地址的類型,如果是IPv4查詢地址,將該IPv4查詢地址發(fā)送給第一地址查詢單元;如果是IPv6查詢地址,則將該IPv6查詢地址發(fā)送給第二地址查詢單元;所述第一地址查詢單元,用于將所述IPv4查詢地址轉(zhuǎn)換為整型數(shù)據(jù)后,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為空且后綴字段為所述IPv4查詢地址轉(zhuǎn)換后得到的數(shù)據(jù),獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果;所述第二地址查詢單元,用于將所述IPv6查詢地址劃分為高64位和低64位后分別轉(zhuǎn)換為整型數(shù)據(jù),得到高64位查詢地址和低64位查詢地址,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為所述高64位查詢地址且后綴字段為所述低64位查詢地址,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果。
12.根據(jù)權(quán)利要求10所述的裝置,其特征在于,該裝置還包括第三類型判斷單元、第三地址查詢單元和第四地址查詢單元;所述指令接收單元,還用于接收包含單個(gè)IP查詢地址的查詢指令; 所述第三類型判斷單元,用于判斷所述IP查詢地址的類型,如果是IPv4查詢地址,將該IPv4查詢地址發(fā)送給第三地址查詢單元;如果是IPv6查詢地址,則將該IPv6查詢地址發(fā)送給第四地址查詢單元;所述第三地址查詢單元,用于將所述IPv4查詢地址轉(zhuǎn)換為整型數(shù)據(jù)后,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為空且后綴字段為所述IPv4查詢地址轉(zhuǎn)換后得到的數(shù)據(jù),獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果;所述第四地址查詢單元,用于所述IPv6查詢地址轉(zhuǎn)換為與所述偏移量表中地址前綴相同類型的數(shù)據(jù)后,在所述偏移量表中查找與所述IPv6查詢地址轉(zhuǎn)換后的數(shù)據(jù)匹配的表項(xiàng),如果查找不到匹配的表項(xiàng),結(jié)束操作;如果查找到匹配的表項(xiàng),則獲取查找到的表項(xiàng)中的偏移量ID和前綴長(zhǎng)度Ll,將所述IPv6查詢地址轉(zhuǎn)換后數(shù)據(jù)的低m位轉(zhuǎn)換為整型數(shù)據(jù)后得到ip_p0stfX,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為獲取的偏移量ID且后綴字段為 ip_p0Stfix,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果,結(jié)束當(dāng)前查詢流程;其中,附=128-L1。
13.根據(jù)權(quán)利要求9所述的裝置,其特征在于,該裝置還包括第四類型判斷單元、第五地址查詢單元、第一地址處理單元、第一比較單元、第二比較單元、第六地址查詢單元、第七地址查詢單元和第八地址查詢單元;所述指令接收單元,還用于接收包含IP查詢地址范圍的查詢指令; 所述第四類型判斷單元,用于判斷所述IP查詢地址范圍的類型,如果是IPv4查詢地址范圍,則將該IPv4查詢地址范圍發(fā)送給所述第五地址查詢單元;如果是IPv6地址查詢地址范圍,則將該IPv6查詢地址范圍發(fā)送給所述第一地址處理單元;所述第五地址查詢單元,用于將所述IPv4查詢地址范圍的起始端值和結(jié)束端值轉(zhuǎn)換為整型數(shù)據(jù)后分別得到ipV4_start和ipv4_end,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為空,并且ipv4_Start <=后綴字段<=ipv4_end,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果;所述第一地址處理單元,用于將所述IPv6查詢地址范圍的起始端值ipv6_Start和結(jié)束端值ipv6_end分別劃分為高64位和低64位,再轉(zhuǎn)換為整型數(shù)據(jù)后分別得到ipV6_start 的高64位查詢地址startIP_prefix和低64位查詢地址startIP_postfix,以及ipv6_end 的高64位查詢地址endIP_prefix和低64位查詢地址endIP_postfix ;所述第一比較單元,用于判斷所述startIP_prefiX和endIP_prefiX是否相同; 所述第二比較單元,用于在所述第一比較單元的判斷結(jié)果為是時(shí),判斷startIP_ postfix和endIP_postfx的符號(hào)位是否相同;所述第六地址查詢單元,用于在所述第二比較單元的判斷結(jié)果為是時(shí),設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為startIP_prefiX且StartIP_p0StfiX <=后綴字段< =endIP_p0StfiX,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果;所述第七地址查詢單元,用于在所述第二比較單元的判斷結(jié)果為否時(shí),設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為startIP_prefiX并且后綴字段>=StartIP_pOStfiXOr后綴字段<=endIP_p0StfX,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果;所述第八地址查詢單元,用于在所述第一比較單元的判斷結(jié)果為否時(shí),按照任意順序或同時(shí)執(zhí)行操作Q11、操作Q12和操作Q13,并整合通過(guò)操作Qll、Q12和Q13獲取的查詢結(jié)果;其中,所述操作Qll為如果StartIP_p0StfiX的符號(hào)位是0,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段為startIP_prefiX and (后綴字段> =startip_p0stfix or后綴字段 <=-1);如果startIP_p0stfiX的符號(hào)位是1,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段為 startIP_prefix and startIP_postfix < =后綴字段< =-1 ;獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果;所述操作Q12為如果startIP_prefiX和endIP_prefiX的符號(hào)位相同,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為:startIP_prefix〈前綴字段< endIP_prefix ;如果 startIP_prefix 禾口 endIP_prefix的符號(hào)位不同,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段> startIP_prefiX or前綴字段<=endIP_prefix ;獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果;所述操作Q13為如果endIP_p0StfiX的符號(hào)位是0,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段為 endIP_prefix and 0 <=后綴字段<=endIP_postfix ;如果 endIP_postfix 的符號(hào)位是1,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段為endIP_prefiX and(后綴字段> = Oor后綴字段<=endIP_postfix);獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果; 所述and為邏輯與,所述or為邏輯或。
14.根據(jù)權(quán)利要求10所述的裝置,其特征在于,該裝置還包括第五類型判斷單元、第九地址查詢單元、第二地址處理單元、第三地址處理單元、第三比較單元、第十地址查詢單元和第i^一地址查詢單元;所述指令接收單元,還用于接收包含IP查詢地址范圍的查詢指令; 所述第五類型判斷單元,用于判斷該IP查詢地址范圍的類型,如果是IPv4查詢地址范圍,則將該IPv4地址查詢范圍發(fā)送給第九地址查詢單元;如果是IPv6查詢地址范圍,則將該IPv6查詢地址范圍發(fā)送給第二地址處理單元;所述第九地址查詢單元,用于將所述IPv4查詢地址范圍的起始端值和結(jié)束端值轉(zhuǎn)換為整型數(shù)據(jù)后分別得到ipV4_start和ipv4_end,設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為空,并且ipv4_Start < =后綴字段<=ipv4_end,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果;所述第二地址處理單元,用于將所述IPv6查詢地址范圍的起始端值和結(jié)束端值轉(zhuǎn)換為與所述偏移量表中地址前綴相同類型的數(shù)據(jù)后,在所述偏移量表中分別進(jìn)行匹配;所述第三地址處理單元,用于在所述第二地址處理單元匹配到與轉(zhuǎn)換后起始端值匹配的表項(xiàng)以及與轉(zhuǎn)換后結(jié)束端值匹配的表項(xiàng)時(shí),獲取與轉(zhuǎn)換后的起始端值以及結(jié)束端值匹配的表項(xiàng)中的偏移量ID分別為start_id和end_id,前綴長(zhǎng)度分別為start_L和end_L,并分別將轉(zhuǎn)換后的起始端值的低N2位和轉(zhuǎn)換后的結(jié)束端值的低N3位轉(zhuǎn)換為整型數(shù)據(jù)后分別得至Ij startIp_postfix 禾口 endIp_postfix ;其中,N2 = 128_start_L,N3 = 128_end_L ; 所述第三比較單元,用于判斷所述start_id和end_id是否相同;所述第十地址查詢單元,用于在所述第三比較單元的判斷結(jié)果為是時(shí),設(shè)置對(duì)數(shù)據(jù)庫(kù)的查詢條件為前綴字段為start_id and startIp_postfix < =后綴字段< =endlp_ postfix,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果;所述第十一地址查詢單元,用于在所述第三比較單元的判斷結(jié)果為否時(shí),按照任意順序或者同時(shí)執(zhí)行操作Q21、操作Q22和操作Q23,并整合操作Q21、操作Q22和操作Q23獲取的查詢結(jié)果;其中,所述操作Q21為設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段為startjd and后綴字段 >=startIp_p0Stfix,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果;所述操作Q22為確定起始端值轉(zhuǎn)換為與所述偏移量表中地址前綴相同類型的數(shù)據(jù)以及結(jié)束端值轉(zhuǎn)換為與所述偏移量表中地址前綴相同類型的數(shù)據(jù)之間的各數(shù)據(jù),查找所述偏移量表中與確定的所述各數(shù)據(jù)匹配的各偏移量ID,如果查找到偏移量ID,則設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段為查找到的各偏移量ID之間的邏輯或,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果;所述操作Q23為設(shè)置數(shù)據(jù)庫(kù)的查詢條件為前綴字段為end_id and后綴字段< = endIp_p0Stfix,獲取數(shù)據(jù)庫(kù)返回的查詢結(jié)果; 所述and為邏輯與,所述or為邏輯或。
全文摘要
本發(fā)明提供了一種存儲(chǔ)IPv4地址和IPv6地址的方法和裝置,將IP地址存儲(chǔ)在包含前綴字段和后綴字段的存儲(chǔ)空間,并對(duì)存儲(chǔ)指令中具體的IP地址類型進(jìn)行區(qū)分,即針對(duì)IPv4地址,轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在后綴字段中,前綴字段置空;針對(duì)IPv6地址,則將IPv6地址劃分為高位存儲(chǔ)地址和低位存儲(chǔ)地址,將高位存儲(chǔ)地址的信息存儲(chǔ)在前綴字段中,將低位存儲(chǔ)地址轉(zhuǎn)換為整型數(shù)據(jù)后存儲(chǔ)在后綴字段中。通過(guò)本發(fā)明能夠提高地址存儲(chǔ)和查詢的效率,提高系統(tǒng)準(zhǔn)確性。
文檔編號(hào)H04L12/56GK102223289SQ201010149629
公開日2011年10月19日 申請(qǐng)日期2010年4月15日 優(yōu)先權(quán)日2010年4月15日
發(fā)明者鐘果 申請(qǐng)人:杭州華三通信技術(shù)有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1