在网络设备中对接收数据包进行分类的方法

文档序号:7595327阅读:200来源:国知局
专利名称:在网络设备中对接收数据包进行分类的方法
技术领域
本发明涉及通信网络领域,尤其涉及一种在网络设备中对接收数据包进行分类的方法。
背景技术
目前,基于IP协议的因特网已经发展成为当今世界上规模最大、拥有用户最多、资源最广泛的通信网络。IP协议也因此成为事实上的业界标准,并且,以IP协议为基础的网络由此成为通信网络的主流。
IP地址是用来标识网络中的通信实体,比如主机,或者是路由器的端口,另外,在网络中传输的数据包是使用IP地址来标识的。即,每个被传输的数据包包括一个源IP地址和一个目的IP地址,而网络设备总是能根据目的IP地址,将数据包发送至与该目的IP地址对应的通信实体。
还有,现有网络的使用不是免费的,服务提供商总是采用相应的手段来收取费用。以中国教育科研网(CERNET)为例,很多高校和中学都是通过它接入因特网,而中国教育科研网通过一个流量计费系统进行计费,即按用户(也称为计费对象)实际传输的数据流量进行计数。
当计费对象是一个具有独立IP地址的通信实体时,流量计费系统可根据该IP地址进行计费,而计费对象是一个以学校等为单位的子网时,流量计费系统可以根据该子网对应的子网掩码进行计费。
请参阅图1,其为一个流量计费系统结构示意图。它包括终端11、接入交换机12、计费网关13和服务器14。服务器14包括Radius服务器和日志服务器。
接入交换机12,连接若干终端11,用于快速转发数据包。接入交换机12在转发数据包的同时,可以根据数据包的IP地址线速地将输入或输出的流量镜像出来。
计费网关13,通过一个采集服务器与若干接入交换机12相连,用于对接入交换机12镜像过来的流量实现采集、将每个数据包根据本数据包对应的IP地址分类在对应的计费标准中。
由于一个网络中不同的计费对象采取的计费方式可能不同,所以需要预先获得计费方式的种类。通常在计费网关13中预先设置一张信息表,该信息表保存每个计费对象映射对应的计费方式,计费对象是用IP地址或子网掩码地址来标识;然后,每接收到一个数据包,根据IP地址将数据包按照信息表进行查找,获得对应的计费方式,进行计费。若是发送数据包,根据数据包的源IP地址查找信息表,若是接收数据包,则是根据该数据包的目的IP地址查找信息表。
服务器14,用于根据计费网关13获得的信息统计各个用户终端的费用,并提供用户上网的计费信息。
在上述计费网关13中需要将接收数据包进行分类,根据该数据包源/目的IP地址,查找信息表,获得其分类信息。事实上,在路由器、三层交换机等IP转发设备也需要根据接收数据包的IP地址对数据包进行分类,根据数据包的目的IP地址,获得目的网段或是对应的发送接口。
现有技术中主要是采取以下步骤基于IP地址对数据包进行分类。
首先,获得原IP地址/子网掩码,并根据源IP地址/子网掩码建立信息表。
对于计费网关来说,原IP地址/子网掩码为网络中的每一计费对象的IP地址/子网掩码,对于IP转发设备而言,原IP地址/子网掩码为每一转发对象的IP地址/子网掩码。
该信息表中包括每一原IP地址/子网掩码对应的分类信息,对于IP转发设备来说,该分类信息为目的网段或是对应的发送接口;对于流量计费系统来说,分类信息为计费方式然后,接收需要分类的数据包;
最后,根据该数据包的IP地址查找信息表,获得对应的分类信息进行分类。
每获得数据包的IP地址,需要将该IP地址与信息表中的源IP地址/掩码依次比对,直到找到相同地址的原IP地址/掩码地址。但是,由于IP地址共32位,直接使用IP地址作为查找分类信息的索引值,和每一原IP地址/掩码地址就需比对地址中的每一位,从而造成数据包分类的速度慢。
由此,在此基础上又公开了另一种根据数据包的IP地址对该数据包进行分类的方法,该方法包括以下步骤首先设置哈希函数;接着将每一原IP地址/子网掩码进行哈希运算,并把运算结果与该原IP地址/子网掩码对应的分类信息保存在信息表中,由于存在哈希冲突(不同的原IP地址/子网掩码进行哈希运算,获得相同的运算结果),所以在信息表中存在哈希冲突的运算结果后保存每一产生相同运算结果的原IP地址/子网掩码及其对应的分类信息;然后,获得需要分类的数据包的IP地址;最后,将该IP地址进行哈希运算,获得的值作为索引值检索上述信息表,获得分类信息。
以下针对上述方法举个具体实例。
比如设置的哈希函数为IP地址&0xff(IP地址与OxFF进行“与”运算)。当检索IP地址为1.1.1.1的分类信息时,先计算求出索引值(索引值=1),索引值为1的IP地址较多,如2.1.1.1,3.1.1.1。即不同的IP地址通过哈希运算得到的索引值一样,从而存在着哈希冲突。因此,只能通过根据数据包的IP地址依次检索信息表中运算结果为1的每一个具体的IP地址,才能获得相应的分类信息。
由于需要将数据包的IP地址进行哈希运算,并且存在哈希冲突而使得索引表项增多,从而存在随着索引表项的增多而效率呈线性降低的技术问题。

发明内容
本发明解决的问题是基于IP地址对数据包进行分类时,由于分类过程中需要对IP地址进行数据运算和随着索引表项的增多而存在分类时间长、效率低的技术问题。
为解决上述问题,本发明公开了一种在网络设备中对接收数据包进行分类的方法,所述网络设备用于保存原IP地址/子网掩码对应的分类信息,包括1)将所述原IP地址/子网掩码地址进行分段,每一段地址用于作为每一级索引表中的索引值;2)建立从根节点映射到叶子节点的由多级非节点和一级叶子节点连接组成的索引树,每一非叶子节点中至少包含一级索引表和所述索引表中的每一索引值指向下一级节点的信息,所述叶子节点中包含分类信息,所述索引树反映每一原IP地址/掩码地址根据分段地址逐级映射至对应分类信息的映射关系;3)当接收到数据包时,所述网络设备先获得所述数据包的IP地址,接着将所述IP地址进行分段,然后按照所述分段地址索引所述索引树,从中获得对应的分类信息,进而将所述数据包进行分类。
步骤2)还包括21)确定需要添加至所述索引树中的原IP地址段数N;22)原IP地址中取出第一段地址,判断在所述根节点的第一级索引表中是否存在相同地址的索引值,若是,找到所述索引值指向的下一级节点,否则将所述地址作为索引值保存在所述第一级索引表中,并建立所述地址指向的下一级节点;23)从原IP地址的第二段地址至第N段地址,所述网络设备每获得IP地址的一段地址,先找到上一段地址指向的下一级节点并作为本级节点,再判断在所述本级节点的索引表中是否存在和本段地址相同的索引值,若是,找到所述索引值指向的下一级节点,否则将所述地址作为索引值保存在本级节点的索引表中,并建立所述地址指向的下一级节点;24)将所述原IP地址对应的分类信息保存在第N段地址指向的下一级节点中。
步骤B还包括31)根据需要添加至所述索引树中的子网掩码的长度,确定本子网掩码的地址段数N;32)当所述子网掩码为非跨越掩码时,从掩码地址中取出第一段地址,判断在所述根节点的第一级索引表中是否存在相同地址的索引值,若是,找到所述索引值指向的下一级节点,否则将所述地址作为索引值保存在所述第一级索引表中,并建立所述地址指向的下一级节点;33)从掩码地址的第二段地址至第N段地址,所述网络设备每获得一段地址,先找到上一段地址指向的下一级节点并作为本级节点,再判断在所述本级节点的索引表中是否存在和本段地址相同的索引值,若是,找到所述索引值指向的下一级节点,否则将所述地址作为索引值保存在本级节点的索引表中,并建立所述地址指向的下一级节点;34)将所述掩码地址对应的分类信息和所述掩码长度分别保存在第N段地址指向的下一级节点中。
步骤B还包括41)根据需要添加至所述索引树中的子网掩码的长度,确定本子网掩码的地址段数N;42)当所述子网掩码为跨越掩码时,获得第N段的所有跨越值;43)从掩码地址的第一段地址至第N-1段地址,所述网络设备每获得一段地址,先找到上一段地址指向的下一级节点并作为本级节点,再判断在所述本级节点的索引表中是否存在和本段地址相同的索引值,若是,找到所述索引值指向的下一级节点,否则将所述地址作为索引值保存在本级节点的索引表中,并建立所述地址指向的下一级节点,并且,根节点为第一段的本级节点;44)判断每一跨越值在所述本级节点的索引表中是否存在相同的索引值,若是,找到所述索引值指向的下一级节点,将下一级节点作为本节点,进行步骤45),否则进行步骤46);45)判断所述本级节点中的掩码长度是否大于本子网掩码长度,若是,建立本节点指向的下一级节点,将所述掩码地址对应的分类信息和所述掩码长度分别保存在所述下一级节点,否则,删除所述索引值指向的下一级节点,进行步骤46);46)建立所述索引值指向的下一级节点,将所述掩码地址对应的分类信息和所述掩码长度分别保存在所述下一级节点。
通过判断所述掩码长度是否等于前N段地址的位数之和来判断是跨越掩码还是非跨越掩码,若是,则所述子网掩码是非跨越掩码,否则所述子网掩码是跨越掩码。
通过计算2^P得到所述跨越值的个数,其中,P=前N段地址的位数-掩码长度。
步骤B中还包括51)获得从所述索引树中预删除的原IP地址的每一段地址;51根据所述地址索引所述索引树,找到最后一段地址所指向的节点,删除所述节点。
步骤B中还包括61)当从所述索引树中预删除的掩码地址为非跨越地址时,获得所述掩码地址的分段段数N;62)根据所述地址索引所述索引树,找到第N段地址所指向的节点,判断所述节点是否为叶子节点,若是,删除所述节点,否则删除所述节点中保存的分类信息及掩码长度。
步骤B中还包括71)当从所述索引树中预删除的掩码地址为跨越地址时,获得所述掩码地址的分段段数N;72)计算第N段地址的所有跨越值;73)根据所述地址索引所述索引树,找到第N-1段地址所指向的节点,并找到所述节点的索引表中保存的和所述每一跨越值相同的每一索引值,然后判断所述每一索引值指向的下一级节点中的掩码长度和本子网掩码长度是否相同,若不相同,找到所述下一级节点指向的本节点的下一级节点作为下一级节点,进行步骤74),若相同,直接进行步骤74)74)继续判断所述下一级节点是否存在本节点的下一级节点,若是,删除所述节点中的分类信息和掩码长度,否则,删除所述所述下一级节点所述每一节点的结构包括节点信息、父节点信息、分类信息和索引表信息,所述节点信息中用于存储掩码长度,所述索引表信息用于存储索引值及各个索引值指向下一级节点的指向信息。
与现有技术相比,本发明具有以下优点本发明将地址分成若干段,通过建立索引树,把每一原IP地址/掩码地址根据分段地址逐级映射至对应分类信息中,当获得数据包时,将该IP地址分段,根据分段地址查找对应的分类信息,无需计算就能找到相应的分类信息,提高分类效率。


图1是计费系统的结构示意图;
图2是本发明在网络设备中对接收数据包进行分类的流程图;图3是本发明的实施例中的分段结构示意图;图4是本发明的一个具体实施例中索引树建立的流程图;图5是节点数据结构示意图;图6是例1加入后的索引树结构示意图;图7是例2加入后的索引树结构示意图;图8是例3加入后的索引树结构示意图。
具体实施例方式
以下结合附图,具体说明本发明。
请参阅图2,其为本发明的在网络设备中对接收数据包进行分类的方法的原理流程图。网络设备用于保存原IP地址/子网掩码对应的分类信息,该方法包括以下步骤分段步骤将原IP地址/子网掩码地址进行分段,每一段地址用于作为每一级索引表中的索引值(步骤S110);索引树建立步骤建立从根节点映射到叶子节点的由多级非节点和一级叶子节点连接组成的索引树,每一非叶子节点中至少包含一级索引表和所述索引表中的每一索引值指向下一级节点的信息,所述叶子节点中包含分类信息,所述索引树反映每一原IP地址/掩码地址根据分段地址逐级映射至对应分类信息的映射关系(步骤S120);索引步骤当接收到数据包时,所述网络设备先获得所述数据包的IP地址,接着将所述IP地址按照相同规则进行分段,然后按照所述分段地址索引所述索引树,从中获得对应的分类信息,进而将所述数据包进行分类(步骤S130)。
在分段步骤中,先确定分段段数N,然后将原IP地址/子网掩码从高位至低位或从低位至高位依次分段成第一段…第N段。
在索引树建立步骤中,主要是通过将源IP地址和掩码地址依次添加至索引树中建立该索引树。其中原IP地址添加至索引树包括如下步骤确定需要添加至所述索引树中的原IP地址段数N;从原IP地址中取出第一段地址,判断在索引树的根节点的第一级索引表中是否存在相同地址的索引值,若是,找到所述索引值指向的下一级节点,否则将所述地址作为索引值保存在所述第一级索引表中,并建立所述地址指向的下一级节点;从原IP地址的第二段地址至第N段地址,所述网络设备每获得IP地址的一段地址,先找到上一段地址指向的下一级节点并作为本级节点,再判断在所述本级节点的索引表中是否存在和本段地址相同的索引值,若是,找到所述索引值指向的下一级节点,否则将所述地址作为索引值保存在本级节点的索引表中,并建立所述地址指向的下一级节点;将所述原IP地址对应的分类信息保存在第N段地址指向的下一级节点中。
子网掩码地址添加至索引树包括如下步骤根据需要添加至所述索引树中的子网掩码的长度,确定本子网掩码的地址段数N;然后判断子网掩码是非跨越掩码还是跨越掩码,若是跨越掩码,进行S1过程,否则进行S2过程,网络设备是通过判断所述掩码长度是否等于前N段地址的位数之和来判断是跨越掩码还是非跨越掩码,若是,则所述子网掩码是非跨越掩码,否则所述子网掩码是跨越掩码。
S1过程从掩码地址中取出第一段地址,判断在所述根节点的第一级索引表中是否存在相同地址的索引值,若是,找到所述索引值指向的下一级节点,否则将所述地址作为索引值保存在所述第一级索引表中,并建立所述地址指向的下一级节点;从掩码地址的第二段地址至第N段地址,所述网络设备每获得一段地址,先找到上一段地址指向的下一级节点并作为本级节点,再判断在所述本级节点的索引表中是否存在和本段地址相同的索引值,若是,找到所述索引值指向的下一级节点,否则将所述地址作为索引值保存在本级节点的索引表中,并建立所述地址指向的下一级节点;将所述掩码地址对应的分类信息和所述掩码长度分别保存在第N段地址指向的下一级节点中。
S2过程获得第N段的所有跨越值,其中网络设备是通过计算2∧P得到所述跨越值的个数,其中,P=前N段地址的位数-掩码长度;从掩码地址的第一段地址至第N-1段地址,所述网络设备每获得一段地址,先找到上一段地址指向的下一级节点并作为本级节点,再判断在所述本级节点的索引表中是否存在和本段地址相同的索引值,若是,找到所述索引值指向的下一级节点,否则将所述地址作为索引值保存在本级节点的索引表中,并建立所述地址指向的下一级节点,并且,根节点为第一段的本级节点;判断每一跨越值在所述本级节点的索引表中是否存在相同的索引值,若是,找到所述索引值指向的下一级节点,将下一级节点作为本节点,进行步骤45),否则进行步骤46);45)判断所述本级节点中的掩码长度是否大于本子网掩码长度,若是,建立本节点指向的下一级节点,将所述掩码地址对应的分类信息和所述掩码长度分别保存在所述下一级节点,否则,删除所述索引值指向的下一级节点,进行步骤46);46)建立所述索引值指向的下一级节点,将所述掩码地址对应的分类信息和所述掩码长度分别保存在所述下一级节点。
以下就举个具体的实施例来说明本发明在网络设备中对接收数据包进行分类的方法。
在分段步骤中,是按照以下分类规则进行分段(请参阅图3),确定分类的段数为4段,原IP地址/掩码地址的第16位至第31位设定为第一段地址,作为第一级索引表的索引值;原IP地址/掩码地址的第8位至第15位设定为第二段地址,作为第二级索引表的索引值;原IP地址/掩码地址的第0位至第8位设定为第三段地址,作为第三级索引表的索引值。
每一原IP地址都存在三段地址,但是,子网掩码根据掩码长度确定地址段数,比如掩码地址为1.2.3.4/16(0000 0001 0000 0010 0000 0011 00000100),掩码长度为16,即该子网掩码仅存在第一段地址(0000 0001 00000010)。比如掩码地址为1.2.3.4/18(0000 0001 0000 0010 0000 0011 00000100),该子网掩码的掩码长度为18,即该子网掩码存在第一段地址(0000 00010000 0010)和第二段地址(00** ****),第二段地址的前两位是从掩码地址中获得,而剩余的几位可为任意值。
为了更好说明本实施例中索引树建立步骤,接下来介绍跨越掩码和非跨越掩码这两个概念。当将源子网掩码添加到索引树时,该源子网掩码存在跨越和非跨越两种情况,这两种情况的子网掩码添加到索引树中的步骤是不同的。以下先解释什么是跨越。
假如添加如下地址项至索引树中1.1.1.1/12(0000 0001.0000 0001.0000 0001.0000 0001 掩码长度12位,分类属性为M)
获得的第一段地址为0000 0001.0000 0001。但是路由项的掩码长度是12,而不是第一级索引表支持的16位长度,所以,最后四bit可以是任意值,即0000 0001.0000 xxxx如0000 0001.0000 00010000 0001.0000 00100000 0001.0000 00110000 0001 0000 1111这些地址的个数为2^(16-12)=16个,该些16个地址的分类信息也应该为M,所以在索引树中需要将该些地址对应的节点的分类信息单元中存放M。一个掩码地址在索引树中存在多个节点与其映射,这就是跨越,存在跨越的掩码地址为跨越掩码地址,反之,一个掩码地址在索引树中仅有一个节点与其映射,该掩码地址为非越跨掩码地址。
在本实施例中,当掩码长度小于16的时候,在第一索引表中都会有跨越,跨越的长度为2^(16-masklen),其中,masklen为掩码长度,此子网掩码在第一索引表中跨越了为0x0100~0x010f的16个索引值表项。
同样,在其它各级索引表中也是有跨越的,例如掩码是22,那么它将在第二级索引表中跨越2^(24-22)=4个表项,以此类推。
当加入的掩码地址为不非跨越掩码地址时,即掩码长度为16或24。
请参阅图4,其为本实施例是如何进行索引树建立的流程图。
S210定义节点的数据结构,在本实施例中,不管是根节点,叶子节点还是其它非叶子节点,它们采用相同的数据结构。请参阅图5,其为本发明采用的节点数据结构。
该节点是由节点信息单元、父节点指针单元、分类信息单元和索引表单元四个部分组成。节点信息单元主要用于存储节点类型、掩码长度和本节点的索引表单元中存在有效索引值的数目;父节点指针单元用于存储本节点指向的父节点的指向信息;分类信息单元用于存储本节点对应的子网掩码地址或IP地址的分类信息,当该节点没有对应的子网掩码地址或IP地址时,该分类信息单元为“NULL”,只有当该节点存在对应的子网掩码地址或IP地址时,在该分类信息单元中才会有对应的分类信息;索引表单元用于存储本节点的索引表中的索引值及每一索引值指向的下一级节点的指向信息。
然后进行步骤S220,将每一原IP地址和掩码地址将分段地址从根节点开始依次添加至索引树中。以下就举几个简单的例子,分别说明将IP地址、非跨越掩码地址、跨越掩码地址是如何添加至索引树中。
例1在空索引树中添加地址80.6.0.0/16对应的分类信息A。
第一步,根据该地址的掩码长度(16),确定其地址段数为1且该掩码为非跨越掩码;第二步,从子网掩码中取出第一段地址为0101 0000 0000 0110(0X5006),然后判断在根节点的第一级索引表中是否存在相同地址的索引值,很显然,没有存在相同地址的索引值,将该第一段地址(0X5006)作为索引值保存在第一级索引表中,并建立该地址(0X5006)指向的下一级节点;第三步,该节点的分类信息单元中存放对应的分类信息A,其节点信息单元中存入掩码长度为16的掩码信息。(请参阅图6,为例1添加后的索引树示意图。)例2在例1形成的索引树中又添加IP地址(80.6.0.1)的分类信息为B第一步确定IP地址的分段数为三段,并且确定每一段地址,第一段地址为0X5006,第二段地址为0X0000,第三段地址为0X0001;第二步取出第一段地址(0X5006),判断在根节点的第一级索引表中是否存在相同地址的索引值,很显然,已存在,然后进行第三步;第三步找到该索引值指向的下一级节点,继续判断在该节点的索引表中是否存在和第二段地址相同的索引值,很显然,0X5006所指向的二级节点中没有索引值,在二级节点中保存第二段地址0X0000,并建立该地址0X000所指向的三级节点;第四步将该IP地址的第三段地址0X00001放在三级节点的索引表中,并建立第三段地址0X00001所指向的节点,将分类信息B保存在该节点的分类信息单元中。(请参阅图7,为例2添加后的索引树示意图。)例3,在例2形成的索引树中又添加地址80.6.0.0/12的分类信息C,步骤如下第一步通过计算(子网掩码的长度不等于16)判断出该子网掩码为跨越掩码,获得所有的跨越值(0X5000-0X5000F);第二步判断每一个跨越值在根节点的第一级索引表中是否存在相同的地址,在本例3中,除了0X5006外,其它跨越值在第一级索引表中都不存在相同的。
第三步将该些没有相同地址的索引值添加到第一级索引表中,并建立一节点,将该些索引值全部指向该节点,并把分类信息C和掩码长度12分别写在该节点的分类信息单元和节点信息单元;第四步找到0X5006的索引值指向的节点,从中获得节点的掩码长度,本实施例中,每一节点默认的长度为32,很显然,本掩码长度12<32,所以建立该节点的父节点指向该节点。(请参阅图8,为例3添加后的索引树示意图。)
当接收到数据包时,先获得该数据包的IP地址,比如IP地址为80.6.2.1,并将该IP地址进行分段,第一段地址为0X5006,第二段地址为0X0002,第三段地址为0X0001,然后根据第一段地址检索索引树的根节点,找到其索引值并且该索引值指向的第二级节点,然后在第二级节点的索引表中查找是否有0X0002,很显然没有,获得该节点中存储的分类信息B,根据该分类信息将数据包分类出去。
索引树不是不能变化的,当原IP地址/掩码地址从该网络设备中删除时,也需要将该IP地址/掩码地址从索引树中删除出去,具体地步骤如下从索引树中删除IP地址及其对应的分类信息,步骤如下51)获得从所述索引树中预删除的原IP地址的每一段地址;51根据所述地址索引所述索引树,找到最后一段地址所指向的节点,删除所述节点。
从索引树中删除非跨越掩码地址及其对应的分类信息,步骤如下61)当从所述索引树中预删除的掩码地址为非跨越地址时,获得所述掩码地址的分段段数N;62)根据所述地址索引所述索引树,找到第N段地址所指向的节点,判断所述节点是否为叶子节点,若是,删除所述节点,否则删除所述节点中保存的分类信息及掩码长度。
从索引树中删除跨越掩码地址及其对应的分类信息,步骤如下71)当从所述索引树中预删除的掩码地址为跨越地址时,获得所述掩码地址的分段段数N;72)计算第N段地址的所有跨越值;73)根据所述地址索引所述索引树,找到第N-1段地址所指向的节点,并找到所述节点的索引表中保存的和所述每一跨越值相同的每一索引值,然后判断所述每一索引值指向的下一级节点中的掩码长度和本子网掩码长度是否相同,若不相同,找到所述下一级节点指向的本节点的下一级节点作为下一级节点,进行步骤74),若相同,直接进行步骤74)74)继续判断所述下一级节点是否存在本节点的下一级节点,若是,删除所述节点中的分类信息和掩码长度,否则,删除所述所述下一级节点。
在计费网关上,具体的应用如下计费网关上需要预先配置哪些网段或者哪些IP地址属于哪一类计费地址,因为不同的计费地址类可以采取不同的计费方式。比如网段1.0.0.0/8属于计费地址类1,网段21.1.0.0/16和地址5.5.5.5属于计费地址类2。那么计费网关在统计网络流量时,需要根据网络数据包的目的IP地址来对流量进行分类。使用本发明,可以把计费地址类作为信息节点的外部数据,使用报文的目的地址直接在分类索引数中进行查找,最多进行三次查找,就可以找到目的地址对应的计费地址类信息。
此方法也可以实现路由器的路由表算法。把目的网段或者地址对应的发送接口作为信息节点的外部数据,在报文转发时,通过报文的目的IP地址在索引树中查找,最多进行三次查找,就可以找到发送接口,对报文进行发送。
以上公开的仅为本发明的几个具体实施例,本领域的技术人员能思之的变化都应落在本发明的保护范围内。
权利要求
1.一种在网络设备中对接收数据包进行分类的方法,所述网络设备用于保存原IP地址/子网掩码对应的分类信息,其特征在于,包括1)将所述原IP地址/子网掩码地址进行分段,每一段地址用于作为每一级索引表中的索引值;2)建立从根节点映射到叶子节点的由多级非节点和一级叶子节点连接组成的索引树,每一非叶子节点中至少包含一级索引表和所述索引表中的每一索引值指向下一级节点的信息,所述叶子节点中包含分类信息,所述索引树反映每一原IP地址/掩码地址根据分段地址逐级映射至对应分类信息的映射关系;3)当接收到数据包时,所述网络设备先获得所述数据包的IP地址,接着将所述IP地址进行分段,然后按照所述分段地址索引所述索引树,从中获得对应的分类信息,进而将所述数据包进行分类。
3.如权利要求1所述的在网络设备中对接收数据包进行分类的方法,其特征在于,步骤2)还包括21)确定需要添加至所述索引树中的原IP地址段数N;22)原IP地址中取出第一段地址,判断在所述根节点的第一级索引表中是否存在相同地址的索引值,若是,找到所述索引值指向的下一级节点,否则将所述地址作为索引值保存在所述第一级索引表中,并建立所述地址指向的下一级节点;23)从原IP地址的第二段地址至第N段地址,所述网络设备每获得IP地址的一段地址,先找到上一段地址指向的下一级节点并作为本级节点,再判断在所述本级节点的索引表中是否存在和本段地址相同的索引值,若是,找到所述索引值指向的下一级节点,否则将所述地址作为索引值保存在本级节点的索引表中,并建立所述地址指向的下一级节点;24)将所述原IP地址对应的分类信息保存在第N段地址指向的下一级节点中。
3.如权利要求1或2所述的在网络设备中对接收数据包进行分类的方法,其特征在于,步骤B还包括31)根据需要添加至所述索引树中的子网掩码的长度,确定本子网掩码的地址段数N;32)当所述子网掩码为非跨越掩码时,从掩码地址中取出第一段地址,判断在所述根节点的第一级索引表中是否存在相同地址的索引值,若是,找到所述索引值指向的下一级节点,否则将所述地址作为索引值保存在所述第一级索引表中,并建立所述地址指向的下一级节点;33)从掩码地址的第二段地址至第N段地址,所述网络设备每获得一段地址,先找到上一段地址指向的下一级节点并作为本级节点,再判断在所述本级节点的索引表中是否存在和本段地址相同的索引值,若是,找到所述索引值指向的下一级节点,否则将所述地址作为索引值保存在本级节点的索引表中,并建立所述地址指向的下一级节点;34)将所述掩码地址对应的分类信息和所述掩码长度分别保存在第N段地址指向的下一级节点中。
4.如权利要求1至3中任何一项所述的在网络设备中对接收数据包进行分类的方法,其特征在于,步骤B还包括41)根据需要添加至所述索引树中的子网掩码的长度,确定本子网掩码的地址段数N;42)当所述子网掩码为跨越掩码时,获得第N段的所有跨越值;43)从掩码地址的第一段地址至第N-1段地址,所述网络设备每获得一段地址,先找到上一段地址指向的下一级节点并作为本级节点,再判断在所述本级节点的索引表中是否存在和本段地址相同的索引值,若是,找到所述索引值指向的下一级节点,否则将所述地址作为索引值保存在本级节点的索引表中,并建立所述地址指向的下一级节点,并且,根节点为第一段的本级节点;44)判断每一跨越值在所述本级节点的索引表中是否存在相同的索引值,若是,找到所述索引值指向的下一级节点,将下一级节点作为本节点,进行步骤45),否则进行步骤46);45)判断所述本级节点中的掩码长度是否大于本子网掩码长度,若是,建立本节点指向的下一级节点,将所述掩码地址对应的分类信息和所述掩码长度分别保存在所述下一级节点,否则,删除所述索引值指向的下一级节点,进行步骤46);46)建立所述索引值指向的下一级节点,将所述掩码地址对应的分类信息和所述掩码长度分别保存在所述下一级节点。
5.如权利要求3或4所述的在网络设备中对接收数据包进行分类的方法,其特征在于,是通过判断所述掩码长度是否等于前N段地址的位数之和来判断是跨越掩码还是非跨越掩码,若是,则所述子网掩码是非跨越掩码,否则所述子网掩码是跨越掩码。
6.如权利要求5所述的在网络设备中对接收数据包进行分类的方法,其特征在于,通过计算2^P得到所述跨越值的个数,其中,P=前N段地址的位数-掩码长度。
7.如权利要求1所述的在网络设备中对接收数据包进行分类的方法,其特征在于,步骤B中还包括51)获得从所述索引树中预删除的原IP地址的每一段地址;51根据所述地址索引所述索引树,找到最后一段地址所指向的节点,删除所述节点。
8.如权利要求1或7所述的在网络设备中对接收数据包进行分类的方法,其特征在于,步骤B中还包括61)当从所述索引树中预删除的掩码地址为非跨越地址时,获得所述掩码地址的分段段数N;62)根据所述地址索引所述索引树,找到第N段地址所指向的节点,判断所述节点是否为叶子节点,若是,删除所述节点,否则删除所述节点中保存的分类信息及掩码长度。
9.如权利要求1所述的在网络设备中对接收数据包进行分类的方法,其特征在于,步骤B中还包括71)当从所述索引树中预删除的掩码地址为跨越地址时,获得所述掩码地址的分段段数N;72)计算第N段地址的所有跨越值;73)根据所述地址索引所述索引树,找到第N-1段地址所指向的节点,并找到所述节点的索引表中保存的和所述每一跨越值相同的每一索引值,然后判断所述每一索引值指向的下一级节点中的掩码长度和本子网掩码长度是否相同,若不相同,找到所述下一级节点指向的本节点的下一级节点作为下一级节点,进行步骤74),若相同,直接进行步骤74)74)继续判断所述下一级节点是否存在本节点的下一级节点,若是,删除所述节点中的分类信息和掩码长度,否则,删除所述所述下一级节点
10.如权利要求1所述的在网络设备中对接收数据包进行分类的方法,其特征在于,所述每一节点的结构包括节点信息、父节点信息、分类信息和索引表信息,所述节点信息中用于存储掩码长度,所述索引表信息用于存储索引值及各个索引值指向下一级节点的指向信息。
全文摘要
本发明公开了一种在网络设备中对接收数据包进行分类的方法,网络设备用于保存原IP地址/子网掩码对应的分类信息,包括1)将原IP地址/子网掩码地址进行分段,每一段地址用于作为每一级索引表中的索引值;2)建立从根节点映射到叶子节点的由多级非节点和一级叶子节点连接组成的索引树,每一非叶子节点中至少包含一级索引表和索引表中的每一索引值指向下一级节点的信息,叶子节点中包含分类信息,索引树反映每一原IP地址/掩码地址根据分段地址逐级映射至对应分类信息的映射关系;3)当接收到数据包时,网络设备先获得所述数据包的IP地址,接着将IP地址进行分段,然后按照分段地址索引所述索引树,从中获得对应的分类信息,进而将数据包进行分类。
文档编号H04L12/00GK1719769SQ20041006237
公开日2006年1月11日 申请日期2004年7月9日 优先权日2004年7月9日
发明者杨磊 申请人:杭州华为三康技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1