一种数据包的起始查找节点确定方法及装置与流程

文档序号:11959855阅读:216来源:国知局
一种数据包的起始查找节点确定方法及装置与流程

本发明涉及内容中心网络技术领域,特别涉及一种数据包的起始查找节点确定方法及装置。



背景技术:

当今互联网迅速从端到端的信息传播发展到内容的传播,内容中心网络(Content Centric Networking,简称CCN)作为一种新型的未来网络架构,在网络中通过增加内容缓存来迎合这个趋势。CCN通过在路由器中内置缓存能力,以这种方式,部分的内容请求能够直接在网络中被满足而无需去远距离的服务器中请求,从而提高内容的交付效率,减少网络拥塞。

在一种名为NFD(NDN Forwarding Daemon)的CCN路由器原型中,采用跳跃列表作为内容缓存(CS)的底层数据结构。跳跃列表是一种基于概率选择的平衡树,查找的内容存储在节点内。节点是组成跳跃列表的结构单元,每个节点包括key和value,可以认为key是节点的名字,value中可以存储内容,也可以存储一个指向内容(数据包)的指针。内容的名字为层次化结构,由内容的名字前缀和ID字段组成。其中,待查找节点的key与内容的名字、数据请求包的名字相同。

现有查找算法为数据请求包从头节点开始查找,找到存储数据包的节点后,即可找到节点中存储的数据包。查找到请求的数据包后,在下一次查找包含相同名字前缀的节点中存储的数据包时,仍然需要以跳跃列表中的头节点作为起始查找节点,实际上进行了重复查找,且查找范围遍布整个跳跃列表,无法快速找到待查找节点中存储的内容,导致数据包的查找效率不高。



技术实现要素:

本发明实施例的目的在于提供一种数据包的起始查找节点确定方法及装置,以提高数据包的查找效率。

为达到上述目的,本发明实施例公开了一种数据包的起始查找节点确定方法,应用于内容中心网络,方法包括:

接收数据请求包,所述数据请求包中包含目标数据包的第一名字前缀和第一身份字段序号;

根据所述数据请求包和当前内容索引缓存表,确定所述目标数据包的起始查找节点,其中,所述内容索引缓存表中至少包含数据包的第二名字前缀、第一节点的第二身份字段序号和第二节点的身份字段序号组,其中,第一节点为最近一次查找到的、所述第二名字前缀的数据包的节点;第二节点为比所述第二身份字段序号小的节点所指向的节点。

较佳的,所述第二节点为:

比所述第二身份字段序号小的节点所指向的节点中、身份字段序号不小于所述第二身份字段序号的节点。

较佳的,所述根据所述数据请求包和当前内容索引缓存表,确定所述目标数据包的起始查找节点,包括:

判断当前内容索引缓存表中是否存在与所述第一名字前缀相同的第二名字前缀;

如果存在,判断所述第一身份字段序号是否不小于与所述第一名字前缀相同的第二名字前缀对应的第二身份字段序号;

如果不小于,将与所述第一名字前缀相同的第二名字前缀对应的身份字段序号组中,不大于且最接近所述第一身份字段序号的身份字段序号所对应的第二节点,确定为所述目标数据包的起始查找节点。

较佳的,所述方法还包括:

在当前内容索引缓存表中不存在与所述第一名字前缀相同的第二名字前缀,或所述第一身份字段序号小于与所述第一名字前缀相同的第二名字前缀对应的第二身份字段序号的情况下,将头节点确定为所述目标数据包的起始查找节点。

较佳的,所述方法还包括:

根据所述第一名字前缀和所述第一身份字段序号,更新所述内容索引缓存表。

较佳的,所述方法还包括:

接收针对所述内容中心网络的跳跃列表中的节点的更新指令;

确定所述更新指令对应的名字前缀;

根据所述名字前缀,更新所述内容索引缓存表。

为达到上述目的,本发明实施例公开了一种数据包的起始查找节点确定装置,应用于内容中心网络,装置包括:

第一接收模块,用于接收数据请求包,所述数据请求包中包含目标数据包的第一名字前缀和第一身份字段序号;

第一确定模块,用于根据所述数据请求包和当前内容索引缓存表,确定所述目标数据包的起始查找节点,其中,所述内容索引缓存表中至少包含数据包的第二名字前缀、第一节点的第二身份字段序号和第二节点的身份字段序号组,其中,第一节点为最近一次查找到的、所述第二名字前缀的数据包的节点;第二节点为比所述第二身份字段序号小的节点所指向的节点。

较佳的,所述第二节点为:

比所述第二身份字段序号小的节点所指向的节点中、身份字段序号不小于所述第二身份字段序号的节点。

较佳的,所述第一确定模块,包括:

第一判断单元,用于判断当前内容索引缓存表中是否存在与所述第一名字前缀相同的第二名字前缀;

第二判断单元,用于在当前内容索引缓存表中存在与所述第一名字前缀相同的第二名字前缀的情况下,判断所述第一身份字段序号是否不小于与所述第一名字前缀相同的第二名字前缀对应的第二身份字段序号;

第一确定单元,用于在所述第一身份字段序号不小于与所述第一名字前缀相同的第二名字前缀对应的第二身份字段序号的情况下,将与所述第一名字前缀相同的第二名字前缀对应的身份字段序号组中,不大于且最接近所述第一身份字段序号的身份字段序号所对应的第二节点,确定为所述目标数据包的起始查找节点。

较佳的,所述第一确定模块,还包括:

第二确定单元,用于在当前内容索引缓存表中不存在与所述第一名字前缀相同的第二名字前缀,或所述第一身份字段序号小于与所述第一名字前缀相同的第二名字前缀对应的第二身份字段序号的情况下,将头节点确定为所述目标数据包的起始查找节点。

较佳的,所述装置还包括:

第一更新模块,用于根据所述第一名字前缀和所述第一身份字段序号,更新所述内容索引缓存表。

较佳的,所述装置还包括:

第二接收模块,用于接收针对所述内容中心网络的跳跃列表中的节点的更新指令;

第二确定模块,用于确定所述更新指令对应的名字前缀;

第二更新模块,用于根据所述名字前缀,更新所述内容索引缓存表。

由上述的技术方案可见,本发明实施例提供的一种数据包的起始查找节点确定方法及装置,应用于内容中心网络,接收数据请求包,所述数据请求包中包含目标数据包的第一名字前缀和第一身份字段序号;根据所述数据请求包和当前内容索引缓存表,确定所述目标数据包的起始查找节点,其中,所述内容索引缓存表中至少包含数据包的第二名字前缀、第一节点的第二身份字段序号和第二节点的身份字段序号组,其中,第一节点为最近一次查找到的、所述第二名字前缀的数据包的节点;第二节点为比所述第二身份字段序号小的节点所指向的节点。

可见,在先到达的数据请求包查找完目标数据包后,在后来的数据请求包查找包含相同名字前缀的数据包内容时,不需要以头节点作为数据包的起始查找节点,查找范围无需遍布整个跳跃列表,避免了节点的重复查找,从而提高了数据包的查找效率。

当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种数据包的起始查找节点确定方法的流程示意图;

图2为本发明实施例提供的一种数据包的起始查找节点确定装置的结构示意图;

图3为本发明实施例提供的跳跃列表的基本查找过程的流程示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

下面首先对本发明实施例提供的一种数据包的起始查找节点确定方法进行详细说明。

参见图1,图1为本发明实施例提供的一种数据包的起始查找节点确定方法的流程示意图,应用于内容中心网络,可以包括如下步骤:

S101,接收数据请求包,所述数据请求包中包含目标数据包的第一名字前缀和第一身份字段序号;

具体的,当今互联网的发展迅速从端到端的信息传播发展到内容的传播,内容中心网络(CCN)作为一种新型的未来网络架构,在网络中通过增加内容缓存来迎合这个趋势。CCN通过在路由器中内置缓存能力,以这种方式,部分的内容请求能够直接在网络中被满足而无需去远距离的服务器中请求,从而提高内容的交付效率,减少网络拥塞。在CCN中,关注内容本身而非其存储位置。不同的内容以名字区分,内容的名字为层次化结构,由多个具体的分层的名字前缀和身份字段序号(ID字段)组成。以内容名字“baidu.com/news/guonei/1”为例,其中“baidu.com/news/guonei”为该内容的名字前缀,“1”则为ID字段。在实际应用中,内容可以为数据包。

具体的,数据包可以存储在CCN路由器的内容缓存(CS)中,以跳跃列表(简称跳表)作为CS的底层数据结构。跳表是一个快速索引结构,用于快速找到数据包。数据包可以直接存储在跳表的节点中,跳表的节点中也可以携带一个数据包在内容缓存中的地址。在基本的跳表中,每个节点包含key及其对应的value和一个指向同层链表的下个节点的指针数组,key可以为节点的名字,value中可以存储数据包,也可以存储一个指向数据包的指针。例如,对于数据包A,它的名字是aaa/bbb/ccc/13,那么它的名字前缀是aaa/bbb/ccc/,它的ID字段是13。数据包A在内容缓存中的地址是0x898,然后跳表中的节点B用来存储这个数据包A,该节点的地址是0x999。事实上跳表中的节点B包含两个域,其中的key就是aaa/bbb/ccc/13,value就是指向数据包A的指针,即0x898。当携带内容名字即数据包名字aaa/bbb/ccc/13的数据请求包到达时,就可以用该数据请求包在跳表中进行查找,找到key为aaa/bbb/ccc/13的节点。查找到这个节点,即可找到数据包A。

示例性的,接收数据请求包“baidu.com/news/guonei/37”,其中,该数据请求包包含目标数据包的第一名字前缀为“baidu.com/news/guonei”,第一身份字段序号为“37”。

S102,根据所述数据请求包和当前内容索引缓存表,确定所述目标数据包的起始查找节点,其中,所述内容索引缓存表中至少包含数据包的第二名字前缀、第一节点的第二身份字段序号和第二节点的身份字段序号组,其中,第一节点为最近一次查找到的、所述第二名字前缀的数据包的节点;第二节点为比所述第二身份字段序号小的节点所指向的节点。

具体的,第二节点可以为:比所述第二身份字段序号小的节点所指向的节点中、身份字段序号不小于所述第二身份字段序号的节点。

具体的,在实际应用中,可以判断当前内容索引缓存表中是否存在与所述第一名字前缀相同的第二名字前缀;如果存在,判断所述第一身份字段序号是否不小于与所述第一名字前缀相同的第二名字前缀对应的第二身份字段序号;如果不小于,将与所述第一名字前缀相同的第二名字前缀对应的身份字段序号组中,不大于且最接近所述第一身份字段序号的身份字段序号所对应的第二节点,确定为所述目标数据包的起始查找节点。

示例性的,如图3所示,图3为本发明实施例提供的跳跃列表的基本查找过程的流程示意图。其中,头指针所在的头节点的地址为0x0,身份字段序号为3、7、14、17、21、32、37、41、55、NIL的节点的地址分别为0x1、0x2、0x3、0x4、0x5、0x6、0x7、0x8、0x9和0xA。接收到的数据请求包为“baidu.com/news/guonei/37”,该数据请求包包含目标数据包x的第一名字前缀为“baidu.com/news/guonei”,第一身份字段序号为“37”。当前内容索引缓存表中包含:数据包的第二名字前缀“baidu.com/news/guonei”,该名字前缀对应的第一节点的第二身份字段序号为“14”,第二节点的身份字段序号组为“NIL,41,17,14”(NIL为空,表示无穷大,在实际应用中,在第二节点的身份字段序号组中可存可不存),还可以包含第二节点的节点地址“0xA,0x8,0x4,0x3”;数据包的第二名字前缀“www.fnlab.net/research”,该名字前缀对应的第一节点的第二身份字段序号为“6”,第二节点的身份字段序号组为“NIL,31,20,6”,还可以包含第二节点的节点地址“0xA,0x9,0xB,0xE”。判断得出当前内容索引缓存表中存在与第一名字前缀相同的第二名字前缀“baidu.com/news/guonei”,再进行判断得到第一身份字段序号“37”不小于与第一名字前缀相同的第二名字前缀对应的第二身份字段序号“14”。将与第一名字前缀相同的第二名字前缀对应的身份字段序号组“NIL,41,17,14”中,不大于且最接近所述第一身份字段序号的身份字段序号“17”所对应的第二节点,确定为目标数据包的起始查找节点。从该起始查找节点开始查找,即可查找到目标数据包x。在实际应用中,可以在基于内容中心网络的路由器中,定义名为“内容索引缓存”的数据结构,从而得到内容索引缓存表。

具体的,在实际应用中,可以在当前内容索引缓存表中不存在与所述第一名字前缀相同的第二名字前缀,或所述第一身份字段序号小于与所述第一名字前缀相同的第二名字前缀对应的第二身份字段序号的情况下,将头节点确定为所述目标数据包的起始查找节点。

示例性的,对于数据请求包“baidu.com/news/yule/37”,该数据请求包包含目标数据包y的第一名字前缀为“baidu.com/news/yule”,第一身份字段序号为“37”。当前内容索引缓存表中包含的数据包的第二名字前缀分别为“baidu.com/news/guonei”和“www.fnlab.net/research”,可见不存在与第一名字前缀为“baidu.com/news/yule”相同的第二名字前缀,则将头节点确定为目标数据包y的起始查找节点。或者,对于数据请求包“baidu.com/news/guonei/7”,该数据请求包包含目标数据包z的第一名字前缀为“baidu.com/news/guonei”,第一身份字段序号为“7”,当前内容索引缓存表中包含的数据包的第二名字前缀分别为“baidu.com/news/guonei”和“www.fnlab.net/research”,其中与第一名字前缀相同的第二名字前缀“baidu.com/news/guonei”对应的第一节点的第二身份字段序号为“14”,大于目标数据包z的第一身份字段序号“7”,则将头节点确定为目标数据包z的起始查找节点。

具体的,在实际应用中,可以根据所述第一名字前缀和所述第一身份字段序号,更新所述内容索引缓存表。

示例性的,当前内容索引缓存表中包含:数据包的第二名字前缀“baidu.com/news/guonei”,该名字前缀对应的第一节点的第二身份字段序号“14”,第二节点的身份字段序号组为“NIL,41,17,14”,还可以包含第二节点的节点地址“0xA,0x8,0x4,0x3”;数据包的第二名字前缀“www.fnlab.net/research”,该名字前缀对应的第一节点的第二身份字段序号“6”,第二节点的身份字段序号组为“NIL,31,20,6”,还可以包含第二节点的节点地址“0xA,0x9,0xB,0xE”。对于数据请求包“baidu.com/news/guonei/37”,在查找到对应的目标数据包x后,将该名字前缀对应的第一节点的第二身份字段序号更新为“37”,第二节点的身份字段序号组更新为“NIL,41,41,37”,第二节点的节点地址更新为“0xA,0x8,0x8,0x7”;对于数据请求包“baidu.com/news/yule/37”,在查找到对应的目标数据包y后,将名字前缀“baidu.com/news/yule”、该名字前缀对应的第一节点的第二身份字段序号“37”、该名字前缀对应的第二节点的身份字段序号组“NIL,55,41,37”和对应的第二节点的节点地址“0xA,0x9,0x8,0x7”添加到当前内容索引缓存表中;对于数据请求包“baidu.com/news/guonei/7”,在查找到对应的目标数据包z后,将该名字前缀对应的第一节点的第二身份字段序号更新为“7”,第二节点的身份字段序号组更新为“7,7,7,7,”,第二节点的节点地址更新为“0x2,0x2,0x2,0x2”。

具体的,在实际应用中,可以接收针对所述内容中心网络的跳跃列表中的节点的更新指令;确定所述更新指令对应的名字前缀;根据所述名字前缀,更新所述内容索引缓存表。

具体的,更新指令可以为插入节点和删除节点。跳表的插入和删除操作需要保证插入和删除后节点结构的正确性以及内容索引缓存表的正确性。插入和删除节点后,内容索引缓存表也会相应发生改变。在现有的基本跳表的插入技术中,插入过程首先要通过搜索算法找到要插入节点的位置,接着产生随机层数开始进行插入操作并对节点进行更新。在本发明实施例中,需要对内容索引缓存表也进行更新。

示例性的,接收插入节点的指令,确定该指令对应的名字前缀为“baidu.com/news/guonei”。根据该名字前缀,将内容索引缓存表中与该名字前缀相同的第二名字前缀、该名字前缀对应的第一节点的第二身份字段序号和第二节点的身份字段序号组设为无效,即设置为不可用状态。在插入节点后,第一次查找名字前缀为“baidu.com/news/guonei”的数据包时,将头节点确定为目标数据包的起始查找节点。在查找到目标数据包后,可以如上所述,根据目标数据包的第一名字前缀和第一身份字段序号,更新当前内容索引缓存表,并且将内容索引缓存表中与该名字前缀相同的第二名字前缀、该名字前缀对应的第一节点的第二身份字段序号和第二节点的身份字段序号组重新设为可用状态。基本跳表的删除操作类似地先找到要删除节点的位置,找到后对该节点进行删除操作并对相关节点进行更新,同时对内容索引缓存表进行更新。删除节点的操作与插入节点的操作类似,本发明实施例在此不对其赘述。

可见,在先到达的数据请求包查找完目标数据包后,在后来的数据请求包查找包含相同名字前缀的数据包内容时,不需要以头节点作为数据包的起始查找节点,查找范围无需遍布整个跳跃列表,避免了节点的重复查找,从而提高了数据包的查找效率。

参见图2,图2为本发明实施例提供的一种数据包的起始查找节点确定装置的结构示意图,与图1所示的流程相对应,应用于内容中心网络,该确定装置可以包括:第一接收模块201、第一确定模块202。

第一接收模块201,用于接收数据请求包,所述数据请求包中包含目标数据包的第一名字前缀和第一身份字段序号;

第一确定模块202,用于根据所述数据请求包和当前内容索引缓存表,确定所述目标数据包的起始查找节点,其中,所述内容索引缓存表中至少包含数据包的第二名字前缀、第一节点的第二身份字段序号和第二节点的身份字段序号组,其中,第一节点为最近一次查找到的、所述第二名字前缀的数据包的节点;第二节点为比所述第二身份字段序号小的节点所指向的节点。

具体的,在实际应用中,所述第二节点可以为:

比所述第二身份字段序号小的节点所指向的节点中、身份字段序号不小于所述第二身份字段序号的节点。

具体的,第一确定模块202,可以包括:第一判断单元、第二判断单元和第一确定单元(图中未示出);

第一判断单元,用于判断当前内容索引缓存表中是否存在与所述第一名字前缀相同的第二名字前缀;

第二判断单元,用于在当前内容索引缓存表中存在与所述第一名字前缀相同的第二名字前缀的情况下,判断所述第一身份字段序号是否不小于与所述第一名字前缀相同的第二名字前缀对应的第二身份字段序号;

第一确定单元,用于在所述第一身份字段序号不小于与所述第一名字前缀相同的第二名字前缀对应的第二身份字段序号的情况下,将与所述第一名字前缀相同的第二名字前缀对应的身份字段序号组中,不大于且最接近所述第一身份字段序号的身份字段序号所对应的第二节点,确定为所述目标数据包的起始查找节点。

具体的,在实际应用中,第一确定模块202,还可以包括:

第二确定单元,用于在当前内容索引缓存表中不存在与所述第一名字前缀相同的第二名字前缀,或所述第一身份字段序号小于与所述第一名字前缀相同的第二名字前缀对应的第二身份字段序号的情况下,将头节点确定为所述目标数据包的起始查找节点。

具体的,在实际应用中,所述装置还可以包括:

第一更新模块,用于根据所述第一名字前缀和所述第一身份字段序号,更新所述内容索引缓存表。

具体的,在实际应用中,所述装置还可以包括:

第二接收模块,用于接收针对所述内容中心网络的跳跃列表中的节点的更新指令;

第二确定模块,用于确定所述更新指令对应的名字前缀;

第二更新模块,用于根据所述名字前缀,更新所述内容索引缓存表。

可见,在先到达的数据请求包查找完目标数据包后,在后来的数据请求包查找包含相同名字前缀的数据包内容时,不需要以头节点作为数据包的起始查找节点,查找范围无需遍布整个跳跃列表,避免了节点的重复查找,从而提高了数据包的查找效率。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本领域普通技术人员可以理解实现上述方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读取存储介质中,这里所称得的存储介质,如:ROM/RAM、磁碟、光盘等。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1