CN110071871A - 一种大模式集ip地址匹配方法 - Google Patents

一种大模式集ip地址匹配方法 Download PDF

Info

Publication number
CN110071871A
CN110071871A CN201910189504.5A CN201910189504A CN110071871A CN 110071871 A CN110071871 A CN 110071871A CN 201910189504 A CN201910189504 A CN 201910189504A CN 110071871 A CN110071871 A CN 110071871A
Authority
CN
China
Prior art keywords
node
prefix
string
rule
branch
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201910189504.5A
Other languages
English (en)
Inventor
邹潇湘
卓子寒
余翔湛
史建焘
朱秋苹
张奕欣
张翀
邢潇
谷杰铭
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Harbin Institute of Technology
National Computer Network and Information Security Management Center
Original Assignee
Harbin Institute of Technology
National Computer Network and Information Security Management Center
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Harbin Institute of Technology, National Computer Network and Information Security Management Center filed Critical Harbin Institute of Technology
Priority to CN201910189504.5A priority Critical patent/CN110071871A/zh
Publication of CN110071871A publication Critical patent/CN110071871A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering
    • H04L45/748Address table lookup; Address filtering using longest matching prefix

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明公开了一种大模式集IP地址匹配方法,通过采用前缀串的有序集合构建搜索树,同时使搜索树中的子节点继承父节点的所有输出信息,建立IP地址精确匹配搜索算法,实现了IP地址的精确匹配,以及IP地址匹配规则的动态增删,大幅度地减小了数据冗余,适用于模式集变化多或存储空间有限的应用场景。

Description

一种大模式集IP地址匹配方法
技术领域
本发明属于计算机网络技术领域,具体涉及一种大模式集IP地址匹配方法。
背景技术
为满足日益增长的网络需求,IETF(Internet Engineering Task Force,互联网工程任务组)设计了下一代IP协议——IPv6,用于替代现行版本IP协议(IPv4),以解决由于IPv4的网络地址资源有限带来的严重制约互联网应用和发展的问题。然而,IPv6协议在扩展网络地址资源的同时,也扩大了IP地址模式串的规模,即大模式集IP地址问题。在当今巨大的网络流量和日益增多的模式集合面前,如何有效的保障信息传播安全,高效稳定地实现对某些重点网段的实时监测与过滤,是大模式集IP地址精确匹配的应用场景。
IP地址匹配算法是一种基于前缀的多命中字符串匹配算法。自1975年AC算法被提出后,字符串匹配算法已经发展了四十多年,在网络与信息安全方面发挥着重要的作用。算法可应用于多种场景下,软件方面如入侵检测系统中特征码的匹配,硬件方面如路由查找中的地址匹配。现有技术中,针对IP地址匹配的路由查找算法主要有两种:一种是基于地址前缀值的路由查找算法,它通过对整个地址前缀空间进行地址关键字穷举来消除地址前缀长度对查找的影响;另一种是基于地址前缀长度的路由查找算法,最为普遍的基于地址前缀长度的路由查找算法结构是二进制trie树,多分支trie树是基于二进制trie树的一种提高了查找速度的改进算法。
现有技术存在的不足,由于二进制trie树搜索树是基于地址前缀串的,虽然树的构建方法简单快捷,但搜索速度受树深的影响较大,算法存在较大的数据冗余,不能适用于模式集变化多或存储空间有限的应用场景。
发明内容
有鉴于此,本发明提供了一种大模式集IP地址匹配方法,通过采用前缀串的有序集合构建搜索树,同时使搜索树中的子节点继承父节点的所有输出信息,建立IP地址精确匹配搜索算法,实现了IP地址的精确匹配,以及IP地址匹配规则的动态增删。
本发明提供的一种大模式集IP地址匹配方法,
先将由IP地址和子网掩码组成的IP地址匹配规则,转化为二进制前缀串,并对前缀串进行排序,形成前缀串的有序集合;基于所述前缀串的有序集合构建搜索树,并使搜索树中的每个子节点都继承父节点的所有输出信息;
对输入的目标IP地址,采用所述搜索树进行匹配搜索,所述匹配搜索的过程为,从搜索树的根节点出发,将目标IP地址对应的二进制串与当前节点跳过的字符串进行比较,如果跳过字符串的长度大于目标IP地址对应的二进制串的长度或跳过字符串的值与目标IP地址对应的二进制串的值不相等,则直接退出搜索程序;如果相等,则根据目标IP地址与当前节点的信息计算下一级节点的地址,继续对下一级节点进行比对,直到匹配出与目标IP地址相一致的匹配节点,并输出该匹配节点对应的前缀串集合。
进一步地,所述搜索树的树节点数据结构为:
{skip,branch,adr,isLeaf,index,skipValue}
其中,skip表示当前节点跳过的前缀子串的字符数;branch表示当前节点所包含的分支数;adr表示当前节点的最左孩子节点的位置;isLeaf表示当前节点是否与某个前缀串相匹配,如果存在相匹配的前缀串,则isLeaf=1,否则isLeaf=0;index表示当前节点对应的前缀串编号,如果当前节点不存在与之对应的前缀串,则index=0;skipValue表示当前节点跳过的字符串值,如果当前节点不存在跳过的字符串,则skipValue=null。
进一步地,采用构建算法构建所述搜索树,具体包括如下步骤:
步骤3.1、对前缀串有序集合中的第一个前缀串进行计算,输入
{first,n,pos,pre}
其中,first为当前所处理的前缀串在前缀串有序集合中的编号,n为当前所处理的前缀串所在子树所包含的前缀串总数,pos为当前构造的树节点在搜索树中的位置,pre为当前所在子树包含的前缀串所共有的前缀子串的长度;
当n=1时,当前树节点为{0,0,-1,1,prefix[first].order,null};算法结束;当n>1时,执行步骤3.2;
步骤3.2、根据pre、first、n,计算从第first个前缀串开始的n个前缀串所具有的相同前缀子串的长度,得到skip值;再根据输入的pre、first、n及skip,计算当前节点的branch值;再根据branch,计算当前节点的最左孩子节点的adr;
步骤3.3、判断当前节点是否存在与之对应的前缀串,如果存在,则:当前节点为{branch,skip,adr,1,prefix[first].order,prefix[first][pre:pre+skip]},且令first自加1,并将first的值赋给变量p;否则,当前节点为{branch,skip,adr,0,0,prefix[first][pre:pre+skip]},其中,prefix[first][pre:pre+skip]为当前节点跳过的字符串值;
步骤3.4、递归调用步骤3.1,从第0个子节点开始,依次计算每个子节点分支构建所需参数,第i个子节点计算过程为,0≤i≤2^branch-1,令k=0,k为第i个子节点所包含的前缀串的个数:从第p个前缀串开始,截取后续前缀串的pre+skip到pre+skip+branch位,并将其转化为十进制数num,当num与i相同时,令k=k+1,由此构建第i个子节点的输入为:
{p,k,adr+i,pre+skip+branch};
步骤3.5、令p=p+k,即当前子树第i+1个子节点的前缀串从第p+k个前缀串开始,执行步骤3.2,直至所有的子节点都计算完毕。
进一步地,采用所述搜索树的IP地址匹配过程包括如下步骤:
步骤4.1、将待匹配的IP地址nip转化为二进制前缀串ip;
步骤4.2、从搜索树的根结点开始,获取当前节点跳过的字符数skip、节点分支数branch和节点的最左孩子节点的位置adr;对比ip的前skip位与当前节点的skipValue值,如果相等则执行步骤4.3,如果不相等则退出算法;
步骤4.3、采用如下公式计算下一树节点的地址:
index=adr+EXTRACT(pos,branch,ip)
其中,EXTRACT(pos,branch,ip)表示将字符串二进制前缀串ip从pos位开始,截取branch个字符,并将其转化为对应的十进制整数;则下一节点node为trie[index],下一次开始匹配的位置pos′为pos值与node的父节点的分支数和其跳过的字符数的和;
步骤4.4、判断节点node是否为叶子节点,若为叶子节点,则将ip与node对应的前缀串进行对比,若二者相等则说明匹配,记录node的下标值,重复执行步骤4.3;若二者不相等,则匹配失败,算法结束。
进一步地,在所述搜索树中动态增加节点的过程如下:
步骤5.1、将输入的ip和mask转换为对应的二进制前缀串prefix_rule,并对该prefix_rule进行编号,号码为order;
步骤5.2、根据所述搜索算法,找到与prefix_rule失配的节点node,node在搜索树中的下标为index;
步骤5.3、判断node对应的前缀串是否与prefix_rule相等,若相等,则算法退出;否则执行步骤5.4;
步骤5.4、若node是叶子节点,则判断:
当node是空节点时,node={0,0,-1,1,order,null};
当node不是空节点时,将node对应的前缀串与prefix_rule进行比较,计算二者共有的前缀子串的长度k:若prefix_rule包含在node对应的前缀串中,则更新当前节点的值,即trie[index]={k-pos,1,1,order,prefix_rule[pos:k]};同时更新新的孩子节点信息,trie[node.adr+pat[node.order][k]]=node;若node对应的前缀串包含在prefix_rule中,则更新当前节点的值为
trie[index]={k-pos,1,trie[index].adr,node.order,prefix_rule[pos:k]};同时将新规则的相关信息放到node对应的孩子节点中,trie[node.adr+prefix_rule[k]]={0,0,-1,1,order,null};否则,当前节点分裂,prefix_rule与原node对应的前缀串各为当前节点的左右孩子节点,更新当前节点的值,trie[index]={k-pos,1,0,0,prefix_rule[pos:k]};更新原node对应的规则对应的孩子节点,trie[node.adr+pat[node.order][k]]=node;更新prefix_rule对应的孩子节点,trie[node.adr+prefix_rule[k]]={0,0,-1,1,order,null};
步骤5.5、若node不是叶子节点,则从prefix_rule的第pos位截取,将其和node的skipValue相对比,计算二者的共有前缀长度k:若k等于skipValue的长度,则更新节点信息为
trie[index]={node.skip,node.branch,node.adr,1,order,node.skipValue};
否则当前节点分裂,新增两个节点分别对应prefix_rule和原node对应的匹配规则,更新当前节点的信息,trie[index]={k,1,trie[index].adr,0,skipValue[0:k]};填充prefix_rule对应的孩子节点信息,trie[node.adr+prefix_rule[k]]={0,0,-1,1,order,null};将原node的孩子节点信息填充到另一孩子节点中:
trie[node.adr+pat[node.order][k]]=
{node.skip,node.branch,node.adr,node.isLeaf,node.index,node.skipValue[k:]}。
进一步地,在所述搜索树中动态删除节点的过程如下:
步骤6.1、根据搜索算法,找到失配的节点node,node在trie中对应的下标为index;
步骤6.2、若node有对应的规则且对应的规则编号为order,则删除node对应的规则信息,其他值保持不变,
trie[index]={node.skip,node.branch,node.adr,0,0,node.skipValue};
若node无对应的规则或者该规则的编号不是order,则表示失配,搜索树中不存在该规则信息,删除失败。
有益效果:
本发明通过使搜索树中的子节点继承父节点的所有输出信息,能够实现IP地址精确多匹配,及IP地址匹配规则的动态增删,大幅度地减小了数据冗余,适用于模式集变化多或存储空间有限的应用场景。
附图说明
图1为本发明提供的一种大模式集IP地址匹配方法的排序后的前缀串。
图2为本发明提供的一种大模式集IP地址匹配方法构建的搜索树。
图3为本发明提供的一种大模式集IP地址匹配方法构建的搜索树节点的下标及位置之间的对应关系。
具体实施方式
下面结合附图并举实施例,对本发明进行详细描述。
本发明提供的一种大模式集IP地址匹配方法,是对LC-trie算法的进一步优化,其基本思想:首先,将由IP地址和子网掩码组成的IP地址匹配规则,转化为便于处理的二进制前缀串,并对前缀串进行排序,形成前缀串的有序集合,再采用前缀串的有序集合构建搜索树,并使搜索树中的每个子节点都继承父节点的所有输出信息(增加的数据结构),以满足对IP地址精确多匹配的需要;然后,基于上述构建好的搜索树,建立IP地址精确匹配搜索方法,即,从搜索树的根节点出发,将目标IP地址对应的二进制串与当前节点跳过的字符串进行比较,如果跳过字符串的长度大于目标IP地址对应的二进制串的长度或跳过字符串的值与目标IP地址对应的二进制串的值不相等,则直接退出搜索程序,如果一致则根据目标IP地址与当前节点的信息计算下一级节点的地址,继续对下一级节点进行比对,直到匹配出与目标IP地址相一致的匹配节点,并输出该匹配节点对应的前缀串,即对应的IP地址匹配规则。
本发明提供的一种大模式集IP地址匹配方法,具体包括如下内容:
一、搜索树构建算法
本发明提供的一种大模式集IP地址匹配方法中,对前缀串从左往右按位进行对比,按照‘0’在前、‘1’在后的原则对所有的前缀串进行排序,并对前缀串有序集合中的每个前缀串进行编号。这里的排序过程可以采用快速排序和基数排序两种算法,当IP地址匹配规则集较大时,使用基数排序可大大节省运算时间,排序后的前缀串如图1所示。
本发明提供的基于排序后的前缀串构建搜索树的具体过程为,递归调用搜索树构建算法从前缀串的有序集合的第一个前缀串开始从前到后遍历所有的前缀串构建搜索树,构建算法采用层压缩和路径压缩的方法对搜索树进行压缩,例如,可以采用计算分支数和跳过的字符数的方法实现压缩。构建算法的具体内容如下:
为实现IP地址的精确匹配,本发明定义搜索树树节点的数据结构为:
树节点={skip,branch,adr,isLeaf,index,skipValue}
其中,skip表示当前节点跳过的前缀子串的字符数;branch表示当前节点所包含的分支数;adr表示当前节点的最左孩子节点的位置;isLeaf表示当前节点是否与某个前缀串相匹配,如果存在相匹配的前缀串,则isLeaf=1,否则isLeaf=0;index表示当前节点对应的前缀串编号,如果当前节点不存在与之对应的前缀串,则index=0;skipValue表示当前节点跳过的字符串值,如果当前节点不存在跳过的字符串,则skipValue=null。本发明与LC-trie算法的差别在于,通过在树节点的数据结构中增加isLeaf、index、skipValue三个参数,实现了所有节点都记录了完整的前缀串的相关信息,为实现IP地址精确多匹配,以及动态快速增删IP地址匹配规则奠定了重要的基础。
搜索树的构建过程为:从前缀串集合中的第一个前缀串开始递归调用搜索树构建算法,从前到后遍历计算前缀串有序集合中的每一个前缀串,构建搜索树。搜索树构建算法的输入为:当前所处理的前缀串在前缀串有序集合中的编号为first,当前所处理的前缀串所在的子树中所包含的前缀串的总数为n,当前构造的树节点的位置pos,当前子树中包含的前缀串所共有的前缀子串的长度为pre。搜索构建算法的输出为:构造好的子树。
步骤1.1、对前缀串有序集合中的第一个前缀串进行计算,因此,此时搜索树构造函数的输入为first、n、pos及pre,当前节点存在以下两种情况:
当n=1时,即当前所处理的前缀串所在的子树中仅包含一个前缀串:该节点为{0,0,-1,1,prefix[first].order,null},该节点跳过的前缀子串的字符数为0,即skip=0;该节点所包含的分支数为0,即branch=0;该节点最左孩子节点的位置为-1,即adr=-1;该节点与编号为first的前缀串相匹配,即isLeaf=1;当前节点对应的前缀串编号为prefix[first].order,prefix[]前缀串有序集合所存储的数组;由于该节点跳过的字符数为0,所以该节点跳过的字符串值为null,即skipValue=null;算法结束;
当n>1时,即当前所处理的前缀串所在的子树中包含一个以上前缀串,执行步骤1.2;
步骤1.2、根据输入的pre、first、n,计算从第first个前缀串开始的n个前缀串所具有的相同前缀子串的长度,即当前节点跳过的前缀子串的字符数skip值;再根据输入的pre、first、n以及计算得到的skip值,计算当前节点所包含的分支数,即当前节点的branch值;再根据计算得到的branch值,计算当前节点的最左孩子节点的位置,即adr值;
步骤1.3、判断当前节点是否存在与之对应的前缀串,如果存在,则当节点为:{branch,skip,adr,1,prefix[first].order,prefix[first][pre:pre+skip]},即,由于当前根节点存在与之对应的前缀串,因此,isLeaf的值为1;当前节点的index值即为当前节点所对应的前缀串的编号,即index=prefix[first].order;当前节点跳过的字符串值为prefix[first][pre:pre+skip];令first自加1,并将first的值赋给变量p;节点的下标与其值的对应关系如图3所示;
否则,当前节点为{branch,skip,adr,0,0,prefix[first][pre:pre+skip]},其中,prefix[first][pre:pre+skip]为当前节点跳过的字符串值;
步骤1.4、递归调用构建算法计算各分支子节点。
根据上面计算得到的branch,可知当前节点包含2^branch个子节点。从第0个子节点开始,依次计算每个子节点分支构建所需参数。计算第i(0≤i≤2^branch-1)个子节点的方法如下:
从第p个前缀串开始,截取后续前缀串的pre+skip到pre+skip+branch位,并将其转化为十进制数num,令k=0,k为第i个子节点所包含的前缀串的个数,当num与i相同时,则令k=k+1。由此,可以构建当前节点的第i个子节点的输入为:当前所处理的前缀串在前缀串有序集合中的编号为p,当前所处理的前缀串所在的子树中所包含的前缀串的总数为k,当前构造的子树根节点的位置adr+i,当前子树所共有的前缀长度pre+skip+branch。
步骤1.5、令p=p+k,即当前子树第i+1个子节点的前缀串从第p+k个前缀串开始,执行步骤1.2,直至所有的子节点都计算完毕。
二、基于本发明构建的搜索树的搜索算法
基于上述过程构建的搜索树,为实现IP地址的精确匹配,本发明提出了搜索算法。搜索算法的输入为待匹配的IP地址nip、上述过程生成的搜索树及输出函数output,输出为与待匹配的IP地址nip相符合的所有规则,所述搜索树如图2所示。搜索算法如下:
步骤2.1、将nip转化为二进制前缀串ip;
步骤2.2、从搜索树的根结点开始,获取当前节点跳过的字符数skip、节点分支数branch和节点的最左孩子节点的位置adr;将ip的前skip位与当前节点的skipValue值进行比较,如果相等则执行步骤2.3,如果不相等则退出算法;
步骤2.3、通过逐步迭代找到与IP地址相匹配或者失配的节点,采用如下公式计算下一树节点的地址:
index=adr+EXTRACT(pos,branch,ip)
其中,EXTRACT(pos,branch,ip)表示将字符串二进制前缀串ip从pos位开始,截取branch个字符,并将其转化为对应的十进制整数。则下一节点node即为trie[index],下一次开始匹配的位置pos'为pos值与node的父节点的分支数和其跳过的字符数的和。
步骤2.4、判断节点node是否为叶子节点,若是叶子节点,则将ip与node对应的前缀串进行对比,若二者相等则说明匹配,记录node的下标值,重复执行步骤2.3;若二者不相等,则匹配失败,算法结束。
三、IP地址匹配规则的动态增加算法
插入时,输入为待插入的IP地址匹配规则,即IP地址ip和子网掩码mask,已生成的树trie,及已有的所有规则前缀串数组pat;输出为更新后的trie。步骤如下:
步骤3.1、根据输入的ip和mask得到该IP地址匹配规则对应的前缀串prefix_rule,并对该prefix_rule进行编号,号码为order;
步骤3.2、根据搜索算法,找到与prefix_rule失配的节点node,node在trie中对应的下标为index;
步骤3.3、判断node对应的前缀串是否与prefix_rule相等,若相等,则表示规则已存在,无需插入,算法退出;否则执行步骤3.4;
步骤3.4:将prefix_rule插入trie中:
(1)若node是叶子节点,则在搜索树的末尾插入即可。
当node是空节点时,只需对node直接进行赋值即可,及node={0,0,-1,1,order,null}。
当node不是空节点时,将node对应的前缀串与prefix_rule进行比较,计算二者的共有前缀子串的长度k:若prefix_rule包含在node对应的前缀串中,则更新当前节点的值,即trie[index]={k-pos,1,1,order,prefix_rule[pos:k]};同时更新新的孩子节点信息,trie[node.adr+pat[node.order][k]]=node;若node对应的前缀串包含在prefix_rule中,则更新当前节点的值,
trie[index]={k-pos,1,trie[index].adr,node.order,prefix_rule[pos:k]};同时将新规则的相关信息放到node对应的孩子节点中,trie[node.adr+prefix_rule[k]]={0,0,-1,1,order,null};否则,当前节点分裂,prefix_rule与原node对应的前缀串各为当前节点的左右孩子节点,更新当前节点的值,trie[index]={k-pos,1,0,0,prefix_rule[pos:k]},更新原node对应的规则对应的孩子节点,trie[node.adr+pat[node.order][k]]=node,更新prefix_rule对应的孩子节点,trie[node.adr+prefix_rule[k]]={0,0,-1,1,order,null};
(2)若node不是叶子节点,则在搜索树中间节点插入新规则。
从prefix的第pos位截取,将其和node跳过的前缀子串skipValue对比,计算二者的共有前缀长度k。若k恰好等于skipValue的长度,将prefix_rule对应的信息填入当前节点即可,更新节点信息
trie[index]={node.skip,node.branch,node.adr,1,order,node.skipValue}。
否则当前节点分裂,新增两个节点分别对应prefix和原node对应的规则。更新当前节点的信息,trie[index]={k,1,trie[index].adr,0,node.skipValue[0:k]};填充prefix_rule对应的孩子节点信息,trie[node.adr+prefix_rule[k]]={0,0,-1,1,order,null};将原node的孩子节点信息填充到另一孩子节点中:
trie[node.adr+pat[node.order][k]]=
{node.skip,node.branch,node.adr,node.isLeaf,node.index,node.skipValue[k:]}。
四、IP地址匹配规则的动态删除算法
删除规则时,输入为待删除的规则编号order,现有的LCtrie树trie,输出为更新结果,成功返回1,失败返回-1。步骤如下:
步骤4.1、根据搜索算法,找到失配的节点node,node在trie中对应的下标为index。
步骤4.2、若node有对应的规则且对应的规则编号为order,则将node对应的规则信息删除即可,其他值保持不变,trie[index]={node.skip,node.branch,node.adr,0,0,node.skipValue},返回1;若node无对应的规则或者该规则的编号不是order,表示失配,搜索树中不存在该规则信息,删除失败,返回-1。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (6)

1.一种大模式集IP地址匹配方法,其特征在于:
先将由IP地址和子网掩码组成的IP地址匹配规则,转化为二进制前缀串,并对前缀串进行排序,形成前缀串的有序集合;基于所述前缀串的有序集合构建搜索树,并使搜索树中的每个子节点都继承父节点的所有输出信息;
对输入的目标IP地址,采用所述搜索树进行匹配搜索,所述匹配搜索的过程为,从搜索树的根节点出发,将目标IP地址对应的二进制串与当前节点跳过的字符串进行比较,如果跳过字符串的长度大于目标IP地址对应的二进制串的长度或跳过字符串的值与目标IP地址对应的二进制串的值不相等,则直接退出搜索程序;如果相等,则根据目标IP地址与当前节点的信息计算下一级节点的地址,继续对下一级节点进行比对,直到匹配出与目标IP地址相一致的匹配节点,并输出该匹配节点对应的前缀串集合。
2.根据权利要求1所述的方法,其特征在于,所述搜索树的树节点数据结构为:
{skip,branch,adr,isLeaf,index,skipValue}
其中,skip表示当前节点跳过的前缀子串的字符数;branch表示当前节点所包含的分支数;adr表示当前节点的最左孩子节点的位置;isLeaf表示当前节点是否与某个前缀串相匹配,如果存在相匹配的前缀串,则isLeaf=1,否则isLeaf=0;index表示当前节点对应的前缀串编号,如果当前节点不存在与之对应的前缀串,则index=0;skipValue表示当前节点跳过的字符串值,如果当前节点不存在跳过的字符串,则skipValue=null。
3.根据权利要求2所述的方法,其特征在于,采用构建算法构建所述搜索树,具体包括如下步骤:
步骤3.1、对前缀串有序集合中的第一个前缀串进行计算,输入
{first,n,pos,pre}
其中,first为当前所处理的前缀串在前缀串有序集合中的编号,n为当前所处理的前缀串所在子树所包含的前缀串总数,pos为当前构造的树节点在搜索树中的位置,pre为当前所在子树包含的前缀串所共有的前缀子串的长度;
当n=1时,当前树节点为{0,0,-1,1,prefix[first].order,null};算法结束;当n>1时,执行步骤3.2;
步骤3.2、根据pre、first、n,计算从第first个前缀串开始的n个前缀串所具有的相同前缀子串的长度,得到skip值;再根据输入的pre、first、n及skip,计算当前节点的branch值;再根据branch,计算当前节点的最左孩子节点的adr;
步骤3.3、判断当前节点是否存在与之对应的前缀串,如果存在,则:当前节点为{branch,skip,adr,1,prefix[first].order,prefix[first][pre:pre+skip]},且令first自加1,并将first的值赋给变量p;否则,当前节点为{branch,skip,adr,0,0,prefix[first][pre:pre+skip]},其中,prefix[first][pre:pre+skip]为当前节点跳过的字符串值;
步骤3.4、递归调用步骤3.1,从第0个子节点开始,依次计算每个子节点分支构建所需参数,第i个子节点计算过程为,0≤i≤2^branch-1,令k=0,k为第i个子节点所包含的前缀串的个数:从第p个前缀串开始,截取后续前缀串的pre+skip到pre+skip+branch位,并将其转化为十进制数num,当num与i相同时,令k=k+1,由此构建第i个子节点的输入为:
{p,k,adr+i,pre+skip+branch};
步骤3.5、令p=p+k,即当前子树第i+1个子节点的前缀串从第p+k个前缀串开始,执行步骤3.2,直至所有的子节点都计算完毕。
4.根据权利要求1所述的方法,其特征在于,采用所述搜索树的IP地址匹配过程包括如下步骤:
步骤4.1、将待匹配的IP地址nip转化为二进制前缀串ip;
步骤4.2、从搜索树的根结点开始,获取当前节点跳过的字符数skip、节点分支数branch和节点的最左孩子节点的位置adr;对比ip的前skip位与当前节点的skipValue值,如果相等则执行步骤4.3,如果不相等则退出算法;
步骤4.3、采用如下公式计算下一树节点的地址:
index=adr+EXTRACT(pos,branch,ip)
其中,EXTRACT(pos,branch,ip)表示将字符串二进制前缀串ip从pos位开始,截取branch个字符,并将其转化为对应的十进制整数;则下一节点node为trie[index],下一次开始匹配的位置pos'为pos值与node的父节点的分支数和其跳过的字符数的和;
步骤4.4、判断节点node是否为叶子节点,若为叶子节点,则将ip与node对应的前缀串进行对比,若二者相等则说明匹配,记录node的下标值,重复执行步骤4.3;若二者不相等,则匹配失败,算法结束。
5.根据权利要求4所述的方法,其特征在于,在所述搜索树中动态增加节点的过程如下:
步骤5.1、将输入的ip和mask转换为对应的二进制前缀串prefix_rule,并对该prefix_rule进行编号,号码为order;
步骤5.2、根据所述搜索算法,找到与prefix_rule失配的节点node,node在搜索树中的下标为index;
步骤5.3、判断node对应的前缀串是否与prefix_rule相等,若相等,则算法退出;否则执行步骤5.4;
步骤5.4、若node是叶子节点,则判断:
当node是空节点时,node={0,0,-1,1,order,null};
当node不是空节点时,将node对应的前缀串与prefix_rule进行比较,计算二者共有的前缀子串的长度k:若prefix_rule包含在node对应的前缀串中,则更新当前节点的值,即trie[index]={k-pos,1,1,order,prefix_rule[pos:k]};同时更新新的孩子节点信息,trie[node.adr+pat[node.order][k]]=node;若node对应的前缀串包含在prefix_rule中,则更新当前节点的值为
trie[index]={k-pos,1,trie[index].adr,node.order,prefix_rule[pos:k]};同时将新规则的相关信息放到node对应的孩子节点中,trie[node.adr+prefix_rule[k]]={0,0,-1,1,order,null};否则,当前节点分裂,prefix_rule与原node对应的前缀串各为当前节点的左右孩子节点,更新当前节点的值,trie[index]={k-pos,1,0,0,prefix_rule[pos:k]};更新原node对应的规则对应的孩子节点,trie[node.adr+pat[node.order][k]]=node;更新prefix_rule对应的孩子节点,trie[node.adr+prefix_rule[k]]={0,0,-1,1,order,null};
步骤5.5、若node不是叶子节点,则从prefix_rule的第pos位截取,将其和node的skipValue相对比,计算二者的共有前缀长度k:若k等于skipValue的长度,则更新节点信息为
trie[index]={node.skip,node.branch,node.adr,1,order,node.skipValue};
否则当前节点分裂,新增两个节点分别对应prefix_rule和原node对应的匹配规则,更新当前节点的信息,trie[index]={k,1,trie[index].adr,0,skipValue[0:k]};填充prefix_rule对应的孩子节点信息,trie[node.adr+prefix_rule[k]]={0,0,-1,1,order,null};将原node的孩子节点信息填充到另一孩子节点中:
trie[node.adr+pat[node.order][k]]=
{node.skip,node.branch,node.adr,node.isLeaf,node.index,node.skipValue[k:]}。
6.根据权利要求4所述的方法,其特征在于,在所述搜索树中动态删除节点的过程如下:
步骤6.1、根据搜索算法,找到失配的节点node,node在trie中对应的下标为index;
步骤6.2、若node有对应的规则且对应的规则编号为order,则删除node对应的规则信息,其他值保持不变,
trie[index]={node.skip,node.branch,node.adr,0,0,node.skipValue};
若node无对应的规则或者该规则的编号不是order,则表示失配,搜索树中不存在该规则信息,删除失败。
CN201910189504.5A 2019-03-13 2019-03-13 一种大模式集ip地址匹配方法 Pending CN110071871A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910189504.5A CN110071871A (zh) 2019-03-13 2019-03-13 一种大模式集ip地址匹配方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910189504.5A CN110071871A (zh) 2019-03-13 2019-03-13 一种大模式集ip地址匹配方法

Publications (1)

Publication Number Publication Date
CN110071871A true CN110071871A (zh) 2019-07-30

Family

ID=67365190

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910189504.5A Pending CN110071871A (zh) 2019-03-13 2019-03-13 一种大模式集ip地址匹配方法

Country Status (1)

Country Link
CN (1) CN110071871A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113010882A (zh) * 2021-03-18 2021-06-22 哈尔滨工业大学 一种适用于缓存丢失攻击的自定义位置顺序模式匹配算法
CN113065419A (zh) * 2021-03-18 2021-07-02 哈尔滨工业大学 一种基于流量高频内容的模式匹配算法及系统
CN113286013A (zh) * 2021-05-19 2021-08-20 苏州瑞立思科技有限公司 一种子网匹配方法和装置
CN114301680A (zh) * 2021-12-29 2022-04-08 山石网科通信技术股份有限公司 一种安全策略的匹配方法及装置、存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20050066054A (ko) * 2003-12-26 2005-06-30 한국전자통신연구원 MPLS-L3VPN(Multi ProtocolLabel Switching - Layer 3Virtual PrivateNetwork)프로토콜과 고속 데이터 전송을 보장하는포워딩 검색 방법 및 포워딩 검색 트리.
CN101005461A (zh) * 2007-01-16 2007-07-25 中兴通讯股份有限公司 一种IPv6路由表查找、转发的方法
CN101286935A (zh) * 2008-05-07 2008-10-15 中兴通讯股份有限公司 一种基于ip地址范围的路由查找方法
CN105025013A (zh) * 2015-06-12 2015-11-04 国家计算机网络与信息安全管理中心 基于优先级Trie树的动态IP匹配模型
CN107707477A (zh) * 2017-09-28 2018-02-16 杭州迪普科技股份有限公司 报文的处理方法及装置、计算机可读存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20050066054A (ko) * 2003-12-26 2005-06-30 한국전자통신연구원 MPLS-L3VPN(Multi ProtocolLabel Switching - Layer 3Virtual PrivateNetwork)프로토콜과 고속 데이터 전송을 보장하는포워딩 검색 방법 및 포워딩 검색 트리.
CN101005461A (zh) * 2007-01-16 2007-07-25 中兴通讯股份有限公司 一种IPv6路由表查找、转发的方法
CN101286935A (zh) * 2008-05-07 2008-10-15 中兴通讯股份有限公司 一种基于ip地址范围的路由查找方法
CN105025013A (zh) * 2015-06-12 2015-11-04 国家计算机网络与信息安全管理中心 基于优先级Trie树的动态IP匹配模型
CN107707477A (zh) * 2017-09-28 2018-02-16 杭州迪普科技股份有限公司 报文的处理方法及装置、计算机可读存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
熊忠阳等: "《分组IP路由最长前缀匹配查找算法研究》", 《世界科技研究与发展》 *

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113010882A (zh) * 2021-03-18 2021-06-22 哈尔滨工业大学 一种适用于缓存丢失攻击的自定义位置顺序模式匹配算法
CN113065419A (zh) * 2021-03-18 2021-07-02 哈尔滨工业大学 一种基于流量高频内容的模式匹配算法及系统
CN113065419B (zh) * 2021-03-18 2022-05-24 哈尔滨工业大学 一种基于流量高频内容的模式匹配算法及系统
CN113286013A (zh) * 2021-05-19 2021-08-20 苏州瑞立思科技有限公司 一种子网匹配方法和装置
CN113286013B (zh) * 2021-05-19 2023-11-07 苏州瑞立思科技有限公司 一种子网匹配方法和装置
CN114301680A (zh) * 2021-12-29 2022-04-08 山石网科通信技术股份有限公司 一种安全策略的匹配方法及装置、存储介质
CN114301680B (zh) * 2021-12-29 2024-05-07 山石网科通信技术股份有限公司 一种安全策略的匹配方法及装置、存储介质

Similar Documents

Publication Publication Date Title
CN110071871A (zh) 一种大模式集ip地址匹配方法
CN109445834B (zh) 基于抽象语法树的程序代码相似性快速比较方法
Korman et al. Distributed verification of minimum spanning trees
CN103514201B (zh) 一种非关系型数据库的数据查询方法和装置
US7676453B2 (en) Partial query caching
JPH11212980A (ja) インデクス作成方法および検索方法
CN107247588B (zh) 一种基于约束频度的规则引擎优化方法
CN105550171A (zh) 一种垂直搜索引擎的查询信息纠错方法和系统
CN110008385B (zh) 一种基于字符串的快速匹配识别方法和装置
CN113761221B (zh) 基于图神经网络的知识图谱实体对齐方法
Pontiveros et al. Recycling smart contracts: Compression of the ethereum blockchain
CN108845843A (zh) 一种函数处理方法、装置以及相关设备
CN107239549A (zh) 数据库术语检索的方法、装置及终端
CN107025263A (zh) 用于数据库语句的语句解析方法
CN110691000B (zh) 基于FAHP与规划图融合的Web服务组合方法
CN111177578A (zh) 一种用户周边最具影响力社区的搜索方法
CN114239237A (zh) 一种支持数字孪生的配电网仿真场景生成系统与方法
Thomas et al. A survey on extracting frequent subgraphs
CN112183567B (zh) Birch算法的优化方法、装置、设备及存储介质
CN105094209B (zh) 数据的修复方法及装置
CN113076330A (zh) 查询处理方法、装置、数据库系统、电子设备及存储介质
CN111131028A (zh) 基于度约束最小生成树的域间路由恢复方法
CN114676136B (zh) 一种面向内存键值表的子集过滤器
CN109284393A (zh) 一种针对家谱人物属性名称的融合方法
CN115879868B (zh) 一种专家系统与深度学习相融合的智能合约安全审计方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20190730