一种ip地址管理的方法

文档序号:7590849阅读:101来源:国知局
专利名称:一种ip地址管理的方法
技术领域
本发明涉及网络技术,特别涉及IP网络技术中用户IP地址分配管理。
背景技术
在网络应用中,每个使用网络的用户都必须有一个ip地址,因此为每个用户分配一个ip地址就是一个必须解决的问题。在新的IPv6协议应用之前,ip地址太少一直都是一个棘手的问题。为了给每个上网的用户分配一个ip地址,网络服务提供商通常采用一种动态分配ip地址的方法。使用该方法的提供商用户一定数量的ip地址,如果有用户上网,就为该用户分配一个ip地址;如果有用户下网,就收回该用户的ip地址,以便分配给别的请求上网的用户;如果该提供商的所有的ip地址都已经分配给用户(也就是说,已经有太多的用户把所有的地址都占用了),那么新的用户就会因为分配不到ip地址而不能上网。因此,为了更好的为用户服务,如何高效的管理提供商拥有的这个ip地址就显得很重要了。例如,快速的给用户分配到一个空闲的ip地址;快速的检测某个ip地址是否已经被占用;快速的回收一个被用户释放的ip地址,以便给别的用户使用等。而且,还有一个问题就是,如何才能够用尽量少的空间来存储这些ip地址。因为,查询速度的快慢与“数据的多少”和“占用存储空间的大小”有着密切的关系数据越少,查询速度越快;占用的空间越少,查询的速度也越快。

发明内容
本发明的目的是提供一种IP地址快速分配、回收,以及查询状态的方法,同时这种方法对存储空间的要求很低。
本发明的另一个目的,是提供一种快速分配处理数据状态的方法,该方法应用广泛,如在交换机中对信道资源的管理。
本发明的目的是通过以下技术方案实现的首先构造位图,给定一个地址池,所包含的地址为a到b,为每一个地址分配一个对应位,共有(b-a+1)位,然后两两结合生成高一级的位图。不能与别的位结合的,在高一级位图中单独占一位,直到最后只有一位为止。
一般地,对于一个包含有N(N>0)个地址的地址池,共需要(log(2,N)向上取整)级位图(位图的级别从0开始),每一级位图包含的位数n为第0级为n=N,其余第k级为n=(N DIV exp(2,k))+(N MOD 2);其中exp(a,b)表示a的b次幂,例如,exp(2,3)=8;(a MOD b)表示取a对b的余数,例如,13mod 2=1;(a DIV b)表示取a对b的整倍数,例如,13div 2=6;位图中各位所对应的值按照下面的规则设置a)如果一个地址被分配出去,则该地址在第0级位图中所对应的位的值为1;否则为0;b)从第0级开始直到最后一级,从左至右两两结合,如果两个相结合的位的值都为1,则在高一级位图中对应的位的值就为1;否则为0。如果某一位不能与别的位结合,则在高一级位图中对应的位的值保持相同。
查找空闲地址,地址池的一个重要作用就是在现有地址范围内查找一个空闲的地址分配给用户使用。我们可以在上面的位图中采用下面的方法来实现快速查找如果要查找一个空闲地址,则从最高级位图开始,如果为1,则说明该地址池下已经没有空闲地址;如果为0,则采用“二分法”(也叫“折半查找法”)察看该位在低一级位图中所对应的位(可能对应两位,也可能对应一位),如果有一位为0,则察看该位在更低一级位图中所对应的位,直到找到第0级位图中为0的那一位,该位所对应的地址即为一个空闲地址。
如果要占用一个地址,则把该位的值置为1;然后,按照前述构造位图的方法逐级更新位图。更新算法的复杂度是log(2,n)。
释放一个地址,如果要释放一个位所对应的地址,则把该位的值置为1;然后,按照前述构造位图的方法逐级更新位图。更新算法的复杂度也是log(2,n)。
查询一个地址的状态,如果要查询一个地址c是否已经被分配出去,则可以在a-b的氛围内算出c相对于a的位置(c-a),然后直接测试第0级位图中的第(c-a)位的值是否为0,即可直到该地址是否被分配出去。这个算法的复杂度为1。
采用了本发明用位图管理地址池的程序设计方法,快速高效的完成IP地址的分配、回收、查询,同时大幅度节省程序运算所须存储空间。


图1为本发明一种IP地址管理的方法中的构造位图的程序流程示意图;图2为本发明一种IP地址管理的方法中的查找空闲程序流程示意图;图3为本发明一种IP地址管理的方法中的占用一个地址程序流程示意图;图4为本发明一种IP地址管理的方法中的释放一个地址程序流程示意图;图5为本发明一种IP地址管理的方法中的查询某个地址状态程序流程示意图;图6为一组IP地址与地址的状态;
图7为17位IP地址构成的位图示意图;图8为17位IP地址构成的位图被占用一位示意图;图9为17位IP地址构成的位图被释放一位示意图;具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述。
给定一个地址池,所包含的地址为a到b,为每一个地址分配一个对应位,共有N=(b-a+1)位,每一级位图包含的位数n为第0级为n=N,其余第k级为n=(N DIV exp(2,k))+(N MOD 2);如图1,构造位图的步骤如下步骤10初始化位图级数k=0;0级位图的位数n=总的地址数N;步骤11如果k级位图的位数n小于等于1,执行步骤15;步骤12生成k级位图;步骤13位图级数k加1;步骤14计算k级位图的位数,n=(N DIV exp(2,k))+(N MOD 2),执行步骤11;步骤15如果k级位图的位数n不等于1,执行步骤17;步骤16生成k级位图;步骤17程序结束,完成位图构建。
如图2,查找空闲地址的步骤如下步骤20根据地址数N计算最高级别数K,初始化k=K;步骤21初始化计数器i=0;
步骤22如果k<0,执行步骤29;步骤23如果位(k,i)的值不等于1,执行步骤27;步骤24i加1;步骤25i小于等于本级最大位数n,执行步骤28步骤26位(k,i)的值=1,执行步骤28步骤27k减1,i=2*i,执行步骤22步骤28没有找到空闲地址,返回失败;步骤29找到空闲地址(i/2),返回成功。
如图3,如果要占用一个地址,则把该位的值置为1;然后,按照前述构造位图的方法逐级更新位图。
具体操作的程序如下步骤30根据地址数N计算最高级别数K,k=K,计算要释放的地址在0级位图对应的为i;步骤31n表示级数,初始化n=0;步骤32L>K,执行步骤37步骤33位(n,i)=1;步骤34i的伙伴位的值不等于1,执行步骤37步骤35i=(i/2向下取整);步骤36n=n+1,执行步骤37步骤37程序结束其中伙伴位是指构造位图时两两互相结合的位.例如第0位的伙伴位是第1位;第7位的伙伴位是第6位;
释放一个地址,在图4中,如果要释放一个位所对应的地址,则把该位的值置为1;然后,按照前述构造位图的方法逐级更新位图。更新算法的复杂度也是log(2,n)。
具体操作的程序如下步骤40根据地址数N计算最高级别数K,计算要释放的地址在0级位图对应的为i;步骤41n表示级数,初始化n=0;步骤42n>K,执行步骤47步骤43位(n,i)=0;步骤44i的伙伴位的值不等于1,执行步骤47步骤45i=(i/2向下取整);步骤46n=n+1,执行步骤47步骤47程序结束如图5,查询一个地址的状态,具体操作的程序如下步骤50计算该地址在0级位图中对应的位i;步骤51位(0,i)的值不等于1,该位空闲,执行步骤53步骤52该位被占用步骤53程序结束其中i等于该地址相对与IP起始地址的个数。
如图6,为17个IP地址,和地址的状态,首先为17个地址各生成一位,因此第0级有17位;然后,从左至右两两结合生成第1级的位图,因为第0级的最后一位不能与别的位结合,所以在第1级位图中单独占一位,因此,第1级位图有9位;依次类推,当达到第5级时只有1位了,于是终止位图的生成,最后形成的位图如图7。如果把每一级位图都存放在字节中,则第0级需要3个字节(17=2*8+1),第1级需要2个字节(9=8+1),第2级需要1个字节(5<8),第3级需要1个字节(3<8),第4级需要1个字节,第5级需要1个字节,共需要9个字节。
如果一个地址被分配出去,则该地址在第0级位图中所对应的位的值为1;否则为0;从第0级开始直到最后一级,从左至右两两结合,如果两个相结合的位的值都为1,则在高一级位图中对应的位的值就为1;否则为0。如果某一位不能与别的位结合,则在高一级位图中对应的位的值保持相同。
查找一个空闲地址的步骤如下。如图7所示。
1a)第5级位图中位(5,0)的值为0,说明该地址池中有空闲地址;1b)在第4级位图中找到该位(5,0)所对应的两个位(4,0)和(4,1),其中(4,0)的值为0,说明该位下面有空闲地址;1c)在第3级位图中找到该位(4,0)所对应的两个位(3,0)和(3,1),两个位的值都为0,说明有空闲地址,则选一个位(3,0);1d)在第2级位图中找到该位(3,0)所对应的两个位(2,0)和(2,1),其中(2,0)的值为0,说明该位下面有空闲地址;1e)在第1级位图中找到该位(2,0)所对应的两个位(1,0)和(1,1),两个位的值都为0,说明有空闲地址,则选一个位(1,0);1f)在第0级位图中找到该位(1,0)所对应的两个位(0,0)和(1,1),其中(0,0)的值为0,而且已经到了第0级位图,则该位(0,0)所对应的就是一个空闲地址。
占用一个地址,在图7中,如果要占用(0,0)位所对应的地址,则把该位的值置为1;然后,按照前述构造位图的方法逐级更新位图。最后得到图8的位图。
具体过程为2a)第0级位图中位(0,0)的值设为1,因为和该位结合的该位(0,1)的值为1,所以继续更新高一级位图;2b)在第1级位图中找到位(0,0)和(0,1)对应的位为(1,0),并把该位的值设为1,因为与位(1,0)结合的位(1,1)的值为0,所以不用再继续更新位图,于是更新结束。
释放一个地址,在图7中,如果要释放(0,5)位所对应的地址,则把该位的值置为1;然后,按照前述构造位图的方法逐级更新位图。最后得到如图9的位图。
具体过程为3a)第0级位图中位(0,5)的值设为0,因为和该位结合的该位(0,4)的值为1,所以继续更新高一级位图;3b)在第1级位图中找到位(0,4)和(0,5)对应的位为(1,2),并把该位的值设为0,因为与位(1,2)结合的位(1,3)的值为1,所以需要继续更新高一级位图;3c)在第2级位图中找到位(1,2)和(1,3)对应的位为(2,1),并把该位的值设为0,因为与位(2,1)结合的位(2,0)的值为0,所以不用继续更新高一级位图,于是更新结束。
上面结合具体的示例对本发明进行了阐述,技术人员可以很容易的将本发明应用到其他数据处理的领域,如交换机中线路资源的管理,移动交换机中本地用户和访问用户的管理等等。
权利要求
1.一种数据状态管理方法,其特征在于,构造一个位图来表示数据的状态,然后通过对位图的操作来完成数据状态的查找、分配、回收和查询。所述位图的构造为用位图的0级对应数据的状态,高一级位图由低级位图两两相逻辑与生成,低级位图中的最后一位,如果是奇数位,直接在高一级位图中单独占一位,所述位图的最高级位图只有一位。
2.一种IP地址管理的方法,其特征在于,所述方法包括构造位图用位图的状态来表示IP地址的状态信息。在位图的基础上完成IP地址的查找空闲地址、分配、回收、地址状态查询操作。
3.根据权利要求2所述的IP地址管理方法,其特征在于,所述的构造位图方法为为每一个IP地址分配一个0级对应位来表示状态,然后两两相逻辑与生成高一级的位图,不能与别的位结合的,在高一级位图中单独占一位,直到最后只有一位为止,在第0级位图中,所对应的位的值为1表示该位对应IP地址已经分配,为0表示该位对应IP地址未分配。
4.根据权利要求2所述的IP地址管理方法,其特征在于,所述的IP地址查找空闲地址方法为从最高级位图开始,如果为1,则说明该地址池下已经没有空闲地址;如果为0,则察看该位在低一级位图中所对应的位,如果有一位为0,则察看该位在更低一级位图中所对应的位,直到找到第0级位图中为0的那一位,所对应的地址即为一个空闲地址。
5.根据权利要求2所述的IP地址管理方法,其特征在于,所述的IP地址分配的方法为将该IP地址对应的0级位图中的对应位置为1,然后两两相逻辑与生成高一级的位图,不能与别的位结合的,在高一级位图中单独占一位,直到最后只有一位为止。
6.根据权利要求2所述的IP地址管理方法,其特征在于,所述的IP地址回收的方法为将该IP地址对应的0级位图中的对应位置为0,然后两两相逻辑与生成高一级的位图,不能与别的位结合的,在高一级位图中单独占一位,直到最后只有一位为止。
7.根据权利要求2所述的IP地址管理方法,其特征在于,所述的IP地址状态查询的方法为查询该IP地址对应的0级位图中的对应位置的值,所对应的位的值为1表示该位对应IP地址已经分配,为0表示该位对应IP地址未分配。
全文摘要
本发明涉及IP地址管理,公布了一种IP地址数据状态存储、查询、操作的计算机程序设计方法,使用这种方法,节省了程序运行所需要的空间,降低了查找空闲IP地址、释放IP地址、查询IP地址状态运算的复杂度。这种设计方法,以位图的形式存储IP地址的状态,通过查询和操作位图信息,快速高效的完成IP地址的分配、回收、查询,同时大幅度节省程序运算所须存储空间。
文档编号H04L12/28GK1671114SQ200410030360
公开日2005年9月21日 申请日期2004年3月19日 优先权日2004年3月19日
发明者张昕 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1