一种基于树状自动机的域名匹配方法与流程

文档序号:13008976阅读:195来源:国知局
技术领域
本发明属于信息技术、域名技术领域,具体涉及一种基于树状自动机的域名匹配方法。


背景技术:

随着互联网技术的飞速发展,域名的访问流量也快速增加,随即要求后台服务器具备更
高的解析能力与安全防护能力。后台服务器在进行域名服务时,需要对域名进行匹配,如何
实现域名的快速匹配便是其中的关键问题。
现有的匹配方法多为字符串匹配:待匹配域名视为字符串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-Corasick
automation)。该树状自动机具备以下特征:
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_
sina
com_
模式子串1
sina
com-
模式子串2
sina
cn--
模式子串3
m---
sina
2.构建树状自动机,如图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’的表项
表5.出边‘m---’的表项
名称:m---
描述
TYPE
10:节点加出边表项
ID
0
HASH_SIZE
1
NXT_NODE
下一个节点表项基地址:2
HASH_SEL
节点Hash算法的初始值:0
HASH_END
Hash冲突标志:0
HASH_PTR
无效填充值
PATTERN
m---
TREE_END
0
表6.出边‘com-’的表项
名称:com-
描述
TYPE
01:节点加出边表项
ID
1
HASH_SIZE
2
NXT_NODE
无效填充值
HASH_SEL
节点Hash算法的初始值:0
HASH_END
Hash冲突标志:0
HASH_PTR
无效填充值
PATTERN
Com-
TREE_END
1,树结束
表7.出边‘cn--’的表项
表8.出边‘sina’的表项
名称:sina
描述
TYPE
10:出边表项
ID
1
HASH_SIZE
2
NXT_NODE
无效填充值
HASH_SEL
节点Hash算法的初始值:0
HASH_END
Hash冲突标志:0
HASH_PTR
无效填充值
PATTERN
sina
TREE_END
1,树结束
表9.出边‘xxxx’的表项
名称:xxxx
描述
TYPE
11:无效填充表项
ID
1
HASH_SIZE
2
NXT_NODE
无效填充值
HASH_SEL
节点Hash算法的初始值:0
HASH_END
Hash冲突标志:0
HASH_PTR
无效填充值
PATTERN
无效填充值
TREE_END
1,树结束
3.匹配运算步骤如下:
a>初始化节点基地址为0,指向根节点;
b>从节点基地址读取表项0,获取节点hash空间以及hash初值,此例为sina表项,
Hash_Size=1,hash初值为0;
c>取hash(www-)的[Hash_Size-1:0]作为偏移地址,加上节点基地址,读取该地址对应表
项;
d>www-与根节点表项失配,自动机保持在根节点状态;
e>返回步骤c>,输入从www-更新为sina;
f>Sina与根节点.出边0匹配,且下一个节点基地址为4,自动机更新至节点1;
g>返回步骤b>,com-与节点1的表项0匹配,且指示为树状自动机结束,完成此次匹配。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可
以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保
护范围应以权利要求书所述为准。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1