本發明專利技術涉及一種基于樹狀自動機的域名匹配方法。該方法將待匹配域名以及模式子串的每一個分段填充至n字節的整數倍,其中n=L/8,L為計算機系統的最小運算位寬;然后將模式子串以n字節為單元,構建樹狀自動機;然后將待匹配域名從根節點開始,順序執行樹狀自動機直至完成域名匹配。本發明專利技術在進行匹配運算時以n字節為匹配單元,匹配運算效率遠高于現有的字符串匹配方法,樹狀自動機采用hash值作為表項存儲地址,能夠減少表項所占用的存儲空間,并將hash沖突域限定在本級節點內。本發明專利技術適用于域名的固定前綴匹配,或固定后綴匹配,以及其他具備相同的分層特性字符串的匹配運算。
【技術實現步驟摘要】
一種基于樹狀自動機的域名匹配方法
本專利技術屬于信息技術、域名
,具體涉及一種基于樹狀自動機的域名匹配方法。
技術介紹
隨著互聯網技術的飛速發展,域名的訪問流量也快速增加,隨即要求后臺服務器具備更高的解析能力與安全防護能力。后臺服務器在進行域名服務時,需要對域名進行匹配,如何實現域名的快速匹配便是其中的關鍵問題。現有的匹配方法多為字符串匹配:待匹配域名視為字符串T,并且有n個模式子串P1、P2、…、Pn,在T中尋找是否存在任意一個模式字串。該類算法常見的實現方式為:先將n個模式字串經過運算生成樹狀結構體,字符串T只需沿著樹狀結構體的根節點往下進行順序匹配即可,無需遍歷n個模式字串。現有算法進行的是逐字節匹配,而現代計算機系統的CPU運算位寬已普遍達到64位,因此現有的域名匹配方法效率低下。
技術實現思路
本專利技術目的在于針對上述問題,提供一種更高效的基于樹狀自動機的域名匹配方法。本專利技術采用的技術方案如下:一種基于樹狀自動機的域名匹配方法,其步驟包括:1)將待匹配域名以及模式子串的每一個分段填充至n字節的整數倍,其中n=L/8,L為計算機系統的最小運算位寬;2)將模式子串以n字節為單元,構建樹狀自動機;3)將待匹配域名從根節點開始,順序執行樹狀自動機直至完成域名匹配。進一步地,步驟1)中若某個分段已經是n字節的整數倍,則該分段無需填充。進一步地,步驟2)所述樹狀自動機由節點表項和出邊表項組成;節點表項存儲節點內的出邊數量,節點采用的hash算法初值,以及下一個節點的基地址;出邊表項的存儲地址由出邊的hash值與節點的基地址相加得到。所述出邊表項包含匹配后的跳轉信息,以及該出邊是否為輸出邊的信息,當存在多條出邊hash沖突時,通過沖突指針構成hash鏈表。進一步地,步驟3)的具體匹配過程如下:a)初始化節點基地址為0,指向根節點;b)從節點基地址讀取表項,獲得節點內的出邊數量N,hash初值M,下一個節點的基地址;c)將輸入的字符串進行hash運算,hash初值為M,hash運算結果與N進行取余操做后,與節點基地址相加,得到出邊存儲地址;d)從出邊存儲地址讀取表項,比較輸入字符串與表項中的模式子串:若匹配且出邊為輸出邊,匹配過程完成,匹配成功;若匹配且不為輸出邊,節點基地址指向下一個節點,返回步驟b);若失配且出邊不存在hash沖突鏈,返回步驟a);若失配且出邊存在hash沖突鏈,出邊表項地址指向下一個沖突表項,重復執行步驟d)。與現有技術相比,本專利技術的有益效果如下:1)本專利技術方法將域名以及模式子串分段填充至n字節的整數倍,當進行匹配運算時以n字節為匹配單元,匹配運算效率遠高于現有的字符串匹配方法,采用64位計算位寬時是其8倍。2)樹狀自動機采用hash值作為表項存儲地址,1次計算即可獲取表項內容。每級節點的hash空間可變,減少表項所占用的存儲空間。3)樹狀自動機的節點之間通過基地址進行區分,不同節點間的出邊即使有相同的hash結果也互不影響,如此將hash沖突域限定在本級節點內。4)樹狀自動機的每級節點采用不同的hash初值,能夠進一步避免hash沖突,節約節點存儲空間。5)采用hash沖突鏈表的方式確保匹配的精確性。6)本專利技術適用于域名的固定前綴匹配,或固定后綴匹配,以及其他具備相同的分層特性字符串的匹配運算。附圖說明圖1是現有的域名字符串匹配算法的匹配過程示意圖。圖2是本專利技術基于樹狀自動機的域名字符串匹配過程示意圖。具體實施方式為使本專利技術的上述目的、特征和優點能夠更加明顯易懂,下面通過具體實施例和附圖,對本專利技術做進一步說明。域名是代表IP地址的字符串,由若干字段組成,每個字段(label)之間以“.”分隔,如www.sina.com。域名本身具有明顯的層級結構特征,域名匹配也是以label為單位進行分段匹配。針對域名匹配的分段特征,本專利技術將匹配過程分為以下步驟:1.將待匹配域名以及模式子串的每一個分段填充至n字節的整數倍,若本分段已經是n字節的整數倍,則無需填充,n取決于計算機系統的最小運算位寬L,計算公式為n=L/8,如最小運算位寬為32,則n等于4。2.將模式子串以n字節為單元,構建樹狀自動機,構建方法參照AC自動機(Aho-Corasickautomation)。該樹狀自動機具備以下特征:1)樹狀自動機由節點表項和出邊表項組成;2)節點表項存儲該節點內的出邊數量,該節點采用的hash算法初值,以及下一個節點的基地址。由于節點內的出邊數量總是2的冪次方,所以節點內可能會包括部分無效填充出邊,出邊表項的存儲地址由出邊的hash值與節點的基地址相加而得;3)出邊表項包含匹配后的跳轉信息,以及該出邊是否為輸出邊的信息,當存在多條出邊hash沖突時,通過沖突指針構成hash鏈表;4)根節點為表項特殊節點,存儲在固定位置;5)節點與出邊為邏輯劃分,物理上可以由同一表項同時擔任;6)表項具備以下元素,如表1所示:表1.樹狀自動機的表項3.待匹配域名從根節點開始,順序執行樹狀自動機直至完成匹配。本專利技術方法將域名以及模式子串的分段填充至n字節的整數倍,當進行匹配運算時以n字節為匹配單元,可顯著提高匹配效率。模式子串構建的樹狀自動機采用hash值作為表項存儲地址,每級節點的hash空間可變,減少表項所占用的存儲空間。將hash沖突域控制在節點內,每級節點的hash初值或hash算法可變,盡可能規避哈希沖突導致的匹配運算次數增加。下面提供一個具體實例。該實例以最小運算位寬32位,待匹配域名為www.sina.com,模式子串1為sina.com,模式子串2為sina.cn,模式子串3為m.sina,hash算法為CRC32為例。使用現有的字符串匹配算法需要8次運算,匹配過程如附圖1所示;使用本專利技術方法僅需要2次匹配運算,匹配過程如附圖2所示,具體實施方案如下:1.待匹配域名與模式子串按label填充到4字節整數倍,以-表示填充字符,如表2所示。表2.待匹配域名與模式子串的填充待匹配域名www_sinacom_模式子串1sinacom-模式子串2sinacn--模式子串3m---sina2.構建樹狀自動機,如圖2所示,根節點具備‘sina’與‘m---’2條出邊,根節點空間為2,hash結果只需取bit0即可,定義H[31:0]為32位數據,且H=hash(x),H(sina)[0]代表hash(sina)的結果取bit0。選取合適的hash初值使H(sina)[0]與H(m---)[0]分別為0和1,各出邊的映射情況如表3所示:表3.各出邊的映射情況所有邊表項細則如表4~表9所示:表4.出邊‘sina’的表項名稱:sina描述TYPE01:節點加出邊表項ID0HASH_SIZE1NXT_NODE下一個節點表項基地址:2HASH_SEL節點Hash算法的初始值:0HASH_ENDHash沖突標志:0HASH_PTR無效填充值PATTERNsinaTREE_END0表5.出邊‘m---’的表項名稱:m---描述TYPE10:出邊表項ID0HASH_SIZE1NXT_NODE下一個節點表項基地址:2HASH_SEL節點Hash算法的初始值:0HASH_ENDHash沖突標志:0HASH_PTR無效填充值PAT本文檔來自技高網...
【技術保護點】
一種基于樹狀自動機的域名匹配方法,其步驟包括:1)將待匹配域名以及模式子串的每一個分段填充至n字節的整數倍,其中n=L/8,L為計算機系統的最小運算位寬;2)將模式子串以n字節為單元,構建樹狀自動機;3)將待匹配域名從根節點開始,順序執行樹狀自動機直至完成域名匹配。
【技術特征摘要】
1.一種基于樹狀自動機的域名匹配方法,其步驟包括:1)將待匹配域名的每一個分段以及模式子串的每一個分段填充至n字節的整數倍,其中n=L/8,L為計算機系統的最小運算位寬;2)將模式子串以n字節為單元,構建樹狀自動機;3)將待匹配域名從根節點開始,順序執行樹狀自動機直至完成域名匹配;具體匹配過程如下:a)初始化節點基地址為0,指向根節點;b)從節點基地址讀取表項,獲得節點內的出邊數量N,hash初值M,下一個節點的基地址;c)將輸入的待匹配域名的字符串進行hash運算,hash初值為M,hash運算結果與N進行取余操做后,與節點基地址相加,得到出邊存儲地址;d)從出邊存儲地址讀取表項,比較輸入字符串與表項中的模式子串:若匹配且出邊為輸出邊,匹配過程完成,匹配成功;若匹配且不為輸出邊,節點基地址指向下一個節點,返回步驟b);若失配且出邊不存在hash沖突鏈,返回步驟a);若失配且出邊存在hash沖突鏈,出邊表項地址指向下一個沖突表項,重復執行步驟d)。2.如...
【專利技術屬性】
技術研發人員:李曉東,李洪濤,孫云剛,羅瑤,武麗帥,
申請(專利權)人:中國互聯網絡信息中心,
類型:發明
國別省市:北京;11
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。