[发明专利]一种基于内存的IP地址最长匹配快速查找的方法有效
申请号: | 200610024890.5 | 申请日: | 2006-03-21 |
公开(公告)号: | CN101043421A | 公开(公告)日: | 2007-09-26 |
发明(设计)人: | 王磊 | 申请(专利权)人: | 上海激动通信有限公司 |
主分类号: | H04L12/56 | 分类号: | H04L12/56;H04L29/06;G06F17/30 |
代理公司: | 上海申汇专利代理有限公司 | 代理人: | 翁若莹 |
地址: | 200030上海*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明涉及一种基于内存的IP地址最长匹配快速查找的方法,该方法首先对IP地址分成A类,B类,对IP按照8位一段的方式建立索引树,A类地址只有1层,B类地址有2层。对最底层,建立一个MASK桶索引,每个MASK下面挂接一个IP顺序表,在此顺序表中存放最终的IP项,查找的时候,根据传入的IP地址判定是A类还是B类地址,如果是A类地址,根据得到的MASK桶索引,从32位MASK的IP列表开始,采用二分法进行匹配,直到找到或者查找失败。如果是B类地址,则引导到第二段表中,用IP地址的次8位在第二段表中进行定位,并最终跟A类地址一样引导到MASK桶索引,进行查找。本发明的优点是查找快速、高效。 | ||
搜索关键词: | 一种 基于 内存 ip 地址 最长 匹配 快速 查找 方法 | ||
【主权项】:
1.一种基于内存的IP地址最长匹配快速查找的方法,其特征在于,采用C、C++语言编程实现,运行于基于X86架构的PC服务器,或运行在防火墙、路由器网络设备中,其方法为:(一):创建IP地址库加载到内存中的数据结构1)首先执行初始化操作,将IP地址库加载到内存中来,建立“第一段表”进行A、B类地址分别进行处理,将高8位<128的IP地址库列入A类,强高8位>128IP的地址库列入B类,并初始化该表中的内容为0;2)如果没有更多的IP地址记录,则结束;否则读取一个IP地址库中的IP地址/MASK对,先根据IP地址判断是A类还是B类地址,如果在“第一段表”中的指针为0,并且是A类地址,执行步骤3);如果在“第一段表”中的指针为0,并且是B类地址,则执行步骤6);如果在“第一段表”中的指针不为0,并且是A类地址,得到表项中指针指向的“MASK桶索引表”,并转向步骤4);否则,得到表项中指针指向的“MASK桶索引表”,执行步骤7);3)创建一个表项数为24个的“MASK桶索引表”,将所有表项初始化为0;4)根据掩码1的位数在“MASK桶索引表”中定位到相应的表项,如果该表项的指针为0,创建一个新的“IP顺序查找表”,并将该表项的指针指向新的“IP顺序查找表”;5)在上一步得到的“IP顺序查找表中”将新的IP插入,并转到步骤2);6)创建一个新的“第二段表”,将所有表项初始化为0,并将“第一段表”中该项的指针指向新创建的“第二段表”;7)根据IP地址的次高8定位当前“第二段表”中的表项,判断表项中的指针值是否为0,如果是,创建一个表项数为16个的“MASK桶索引表”,并将所有表项初始化为0,并最后转到步骤4);(二)快速查找的方法:1)根据传入的IP地址判断是A类还是B类地址,并根据IP地址高8位在“第一段表”中定位表项,如果表项中的指针值为0,则返回未匹配错误;2)如果是A类地址,根据步骤1)中得到的指针,获取“MASK桶索引表”的地址,并转到步骤4)执行。3)如果是B类地址,根据步骤1)中得到的指针,获取“第二段表”的地址,并根据IP地址次高8位在当前“第二段表”中定位表项,如果表项中的指针值为0,则返回未匹配错误。否则,根据该指针值,得到“MASK桶索引表”的地址;4)对得到的“MASK桶索引表”的地址,按照掩码1的位数,从多到少,依次对“IP顺序查找表”进行二分查找,如果找到,则返回匹配正确信息,否则返回未匹配错误。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海激动通信有限公司,未经上海激动通信有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/200610024890.5/,转载请声明来源钻瓜专利网。