一种物联网中的对象名字解析系统及其解析方法转让专利

申请号 : CN201010265942.4

文献号 : CN102378407B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 何力樊华贾焰方滨兴殷丽华韩伟红杨树强谭霜刘文懋于海宁陈娟

申请人 : 中国人民解放军国防科学技术大学北京哈工大计算机网络与信息安全技术研究中心北京合天智汇信息技术有限公司

摘要 :

本发明提供一种物联网中的对象名字解析系统和方法,包括:普通节点将对象查询名字解析请求发送给超级节点对应的向量组中的一个超级节点;该超级节点根据厂商标识码在第一级Chord中确定第二级Chord中的分组;在该分组中查询对应于产品标识码的URL,URL对应的目标节点向用户返回对象名字服务地址;第一级Chord是基于分布式散列表由各个分组的超级节点组构成的网络;第二级Chord是各个独立分组,每个分组负责一个组织的对象名字服务,第一级Chord和第二级Chord通过各分组的超级节点组相关联。本发明解决了现有高层性能瓶颈、抗攻击性弱、配置错误频繁和负载不均衡等问题,并支持多种编码方式。

权利要求 :

1.一种物联网中的对象名字解析系统,包括两级Chord网络,其中,第一级Chord是基于分布式散列表由各个分组的超级节点组构成的网络;第二级Chord是由各个分组单独构成的子网络,每个分组负责一个组织的对象名字服务,第一级Chord和第二级Chord通过各分组的超级节点组相关联;

其中,用户通过普通节点将对象查询名字解析请求发送给超级节点对应的向量组中的一个超级节点;该超级节点根据厂商标识码C1在第一级Chord中确定对应的第二级Chord的分组;在该分组中查询对应于产品标识码的URL,URL对应的目标节点向用户返回对象名字服务地址。

2.权利要求1的系统,其中,所述分组包括一个企业或组织的所有对象名字服务节点构成的网络。

3.权利要求1的系统,其中,所述超级节点包括最早加入该分组的节点,并且作为第二级Chord的分组中节点访问其他分组的入口。

4.权利要求1的系统,其中,所述分组中的普通节点存储当前分组中其他节点的路由表信息和当前分组ID,维护所在分组的超级节点组的地址向量。

5.权利要求1的系统,其中,第一级Chord中指针表中每个表项包含的节点地址信息包括超级节点组对应的地址向量。

6.权利要求1的系统,其中,第一级Chord中,路由一个查询请求到目标分组,从目标分组中的地址向量中随机选择IP地址,将查询请求发送到该IP地址对应的超级节点。

7.权利要求1的系统,其中,新节点根据其组织标识码加入对应的第二级Chord的分组或者新建第二级Chord的分组作为超级节点加入。

8.一种物联网中的对象名字解析方法,包括:

用户通过普通节点将对象查询名字解析请求发送给超级节点向量组中的一个超级节点;

该超级节点根据厂商标识码C1在第一级Chord中确定对应的第二级Chord中的分组;

在该分组中查询对应于产品标识码的URL,URL对应的目标节点向用户返回对象名字服务地址;

其中,第一级Chord是基于分布式散列表由各个分组的超级节点组构成的网络;第二级Chord是由各个分组单独构成的子网络,每个分组负责一个组织的对象名字服务,第一级Chord和第二级Chord通过各分组的超级节点组相关联。

9.权利要求8的方法,其中,所述分组包括一个企业或组织的所有对象名字服务节点构成的网络。

10.权利要求8的方法,其中,所述超级节点包括最早加入分组的节点,并且作为第二级Chord的分组中节点访问其他分组的入口。

11.权利要求8的方法,其中,所述分组中的普通节点存储当前分组中其他节点的路由表信息和当前分组ID,维护所在分组的超级节点组的地址向量。

12.权利要求8的方法,其中,第一级Chord中,路由一个查询请求到目标分组,从目标分组中的地址向量中随机选择IP地址,将查询请求发送到该IP地址对应的超级节点。

13.权利要求8的方法,其中,第一级Chord中指针表中每个表项包含的节点地址信息包括超级节点组对应的地址向量。

14.权利要求8的方法,其中,新节点根据其组织标识码加入对应的第二级Chord的分组或者新建第二级Chord的分组作为超级节点加入。

15.权利要求8的方法,其中,所述确定对应的第二级Chord中的分组还包括:如果该超级节点对应的分组就是负责该对象名字服务的分组,则由该超级节点在该分组内发起查询;

否则,将该查询请求发到该对象名字服务对应的分组的超级节点,该超级节点根据组织标识码和产品标识码在分组内发起查询,获取匹配的URL。

说明书 :

一种物联网中的对象名字解析系统及其解析方法

技术领域

[0001] 本发明涉及物联网对象名字服务技术领域,更具体地,涉及一种物联网中的对象名字解析系统及其解析方法。

背景技术

[0002] 在物联网技术中,对象名字解析服务用于将对象名字映射到物品制造商提供的信息服务地址(IS URL),为用户提供关于这个物品的相关信息。
[0003] 现有EPC(Electronic Product Code,产品电子代码,提供对物理世界对象的唯一标识)网络的ONS(Object Naming Service,对象名字服务)系统中应用了物联网的对象名字解析服务技术,ONS系统将EPC码映射到一个或多个URL(统一资源定位符),通过这些URL查找到在EPC IS服务器上关于此产品的详细信息,例如物品制造商提供的信息服务。EPC-ONS是一个类似于DNS的分布式层次结构,包括映射信息、根ONS服务器、ONS服务器、ONS本地缓存和本地ONS解算器。其中,ONS服务器用于回应本地软件的ONS查询;根ONS服务器处于ONS层次结构最高层,拥有EPC名字空间中的最高层域名;ONS本地缓存保存经常查询和最近查询的“EPC-URL”值,作为ONS查询的第一入口点;本地ONS解算器负责ONS查询前的编码和查询语句格式化工作;映射信息是ONS系统提供服务的实际内容,制定EPC编码与URI的映射关系,并且存储在不同层次的ONS服务器中。
[0004] EPC-ONS利用了DNS现有的体系结构,ONS查询过程可以分为查询本地服务器(ONS Cache)和查询ONS服务器两部分,前一部分工作是利用一个与DNS相同结构的系统完成的,后一部分查询工作完全是由现有的DNS系统完成的。
[0005] 总之,现有的方法都是采用类似DNS的层次树状结构实现物联网中对象名称服务,这种结构不支持多种编码方式,并且存在高层性能瓶颈、抗攻击性弱、配置错误频繁和负载不均衡的问题。

发明内容

[0006] 为克服现上述各种缺陷,本发明提供一种物联网中的对象名字解析系统及其解析方法。
[0007] 根据本发明的一个方面,本发明提供一种物联网中的对象名字解析系统,包括两级Chord网络,其中,第一级Chord是基于分布式散列表由各个分组的超级节点组构成的网络;第二级Chord是由各个分组单独构成的子网络,每个分组负责一个组织的对象名字服务,第一级Chord和第二级Chord通过各分组的超级节点组相关联;其中,第一级Chord根据组织标识码C1将对象名字解析请求发送到对应的第二级Chord。
[0008] 根据本发明的另一个方面,本发明提供一种物联网中的对象名字解析方法,包括:用户通过普通节点将对象查询名字解析请求发送给超级节点向量组中的一个超级节点;该超级节点根据厂商标识码C1在第一级Chord中确定对应的第二级Chord中的分组;在该分组中查询对应于产品标识码的URL,URL对应的目标节点向用户返回对象名字服务地址;其中,第一级Chord是基于分布式散列表由各个分组的超级节点组构成的网络;第二级Chord是由各个分组单独构成的子网络,每个分组负责一个组织的对象名字服务,第一级Chord和第二级Chord通过各分组的超级节点组相关联。
[0009] 本发明提供了一种分布的、自组织和自配置的对象名字解析网络和方法,解决了现有方法中的高层性能瓶颈、抗攻击性弱、配置错误频繁和负载不均衡等问题,并且支持多种编码方式。

附图说明

[0010] 图1是根据本发明的基于层次式Chord网络的对象名字解析系统结构图;
[0011] 图2是根据本发明的基于层次式Chord网络的对象名字解析方法流程图;
[0012] 图3是根据本发明的层次式Chord路由表结构和路由过程示意图。

具体实施方式

[0013] 下面结合附图和具体实施方式对本发明提供的一种物联网中的对象名字解析系统及其解析方法进行详细描述。
[0014] 总的来说,本发明的技术方案是利用层次式P2P网络思想,构建两级Chord网络来进行对象名字解析。第一级Chord由所有分组的超级节点组构成,用于根据组织标识码C1将一个对象名字解析请求发送到负责该名字服务的分组;第二级Chord是各个独立分组的子网络,每个分组负责一个组织的对象名字服务,将每个分组都分别组织为Chord子网络。
[0015] 在对本发明具体描述前,对本发明涉及的概念加以介绍,以方便理解。
[0016] 物联网:物联网就是把传感器与传感器网络技术、通信网与互联网技术、智能运算技术等融为一体,实现全面感知、可靠传送、智能处理为特征的并且连接物理世界的网络。
[0017] 对象名字服务:将物品的电子编码映射到一个或者多个URL,在这些URL中可以查找到关于这个物品的详细信息,通常是物品制造商提供的信息服务。
[0018] 对象名字:按照某种编码规则赋予物品唯一的电子编码表示,现有的物品编码格式将物品编码分为产品制造厂商标识码或者组织标识码C1(ManagerNumber)和产品标识码C2(Serial Number)两部分。
[0019] 分组(group):一个企业或组织的所有对象名字服务节点构成的网络,用Gi表示分组,用gi表示分组的ID。
[0020] 节点(peer):P2P网络中的对等端,分为超级节点(super peer)和普通节点(regular peer),分别记作s和r。超级节点和普通节点只是逻辑上的区别,各个分组中一个或多个超级节点组建成上层Chord网络,同时作为下层分组中节点访问其他分组的入口节点。因此,超级节点相比普通节点,除了维护所在分组的Chord指针表外,还需要维护一张上级Chord网络的指针表。
[0021] 超级节点组(superpeers):同一分组中的一组超级节点,用来连接上下两层P2P网络,记作Si,普通节点集Ri=Gi-Si。
[0022] 负责(responsibility):如果分组gi是所有分组中距离关键字key最近的后继,即gi为successor(key),就说gi负责key的名字服务。
[0023] Chord:美国MIT大学的研究人员提出的结构化P2P覆盖网,Chord采用环来组织地址空间,是一个存储关键字-值对的分布式散列表。关键字被散列到一个m位的标识符环。节点按ID从小到大排列在一个逻辑环上,每一节点维护一个路由表,即指针表(finger table)。一个节点将查找关键字k的请求转发到k的最近先驱,当请求到达一个节点n,满足k位于n及标识符环上n的后继之间时,节点n汇报其后继作为请求的应答。
[0024] 指针表(finger table):每个节点维护一个路由表,即指针表,指向标识符环上的其他节点。给定一个环,具有m位的标识符,一个指针表最多有m个表项。在节点n上,在i i行i的表项标识n后至少2-1远的第一个节点,即successor(n+2-1),其中1≤i≤m。
每条指针表项由一个节点ID、一个IP地址和端口对及可能的一些记录信息组成;该指针表概念是指Chord系统指针表。
[0025] 在清楚本发明的一些具体概念之后,下面对本发明的实现过程做详细说明。
[0026] 层次式Chord网络结构
[0027] 图 1 示 出 根 据 本 发 明 实 施 例 的 基 于 层 次 Chord 的P2P(HierarchicalPeer-to-Peer)式对象名字解析系统,图1中将物联网中的对象名字解析系统组织为两级Chord网络。上层网络TChord是基于DHT(Distributed Hash Table,分布式散列表)的结构化P2P网络,DHT允许节点基于对象的关键字key来访问对象,是分布式系统中的一种底层基础,其采用Chord协议,TChord中的每个节点是由一个超级节点组构成的虚节点,所有分组中的超级节点组构成TChord。TChord根据组织标识码C1将一个对象名字解析请求发送到负责该名字服务的分组。节点通过维护一个TChord算法的指针向量表,将一个对象名字解析请求迅速发送到负责该名字服务的超级节点。
[0028] Chord协议查询效率高并且支持负载均衡,还具有简单、可靠等其他DHT模型所不具备的特点,所以上层网络采用Chord协议。
[0029] 第二层包括各个相互独立的分组,根据各个生产厂商或组织的对象名字服务的具体情况,按照节点规模的大小,将其组织为Chord系统或者非结构化P2P系统。本实施例只考虑分组中节点数目超过1000的大规模网络,将分组组织为Chord系统。但对于节点数目较小的网络,不排除使用非结构化P2P系统。
[0030] 每个分组按照一定的规则选出一组超级节点,目前PC机的处理能力已经比较强大,对于一般的P2P应用可以满足要求,因此选择最早加入分组的节点,即在线时间最长的节点作为超级节点,每一个超级节点组作为TChord中一个虚节点,构成上级TChord网络。
[0031] 分组网络存储的信息是,分组中的普通节点需要存储当前分组中其他节点的路由表信息和当前分组ID,并且维护所在分组的超级节点组的地址向量Vector[S]。
[0032] 对象名字解析流程
[0033] 假定节点ri∈Gi,用户向分组gi中的节点ri发送一个名字查询请求,下面结合图2描述基于层次式Chord名字服务的解析流程。
[0034] (1)对于对象名字编码(C1+C2)查询,收到该查询请求的普通节点ri发起查询,首先从Vector[Si]中随机选取一个IP地址,将该请求发给该IP对应的超级节点si;
[0035] (2)确定厂商标识码C1对应的分组。si根据厂商标识码C1在第一级解析网络TChord中查找负责该厂商物品名字服务的分组gj,确定标识码对应的分组;
[0036] (3)如果gi=gj,即gi就是负责该对象名字服务的分组,则由si在组内发起查询;否则,将该查询请求发到分组gj的超级节点sj;
[0037] (4)sj根据物品完整编码C1+C2在gj分组内发起查询,根据分组的网络结构,采取相应分组的查找算法,查询匹配C1+C2的URL。
[0038] (5)目标节点向用户返回对象名字服务地址,即厂商发布的IS-URL。
[0039] 上层Chord环(TChord)
[0040] 下面结合图3介绍TChord(Top-level Chord)的网络结构和路由过程。在TChord网络中,每个节点包括一个超级节点组,通过超级节点组中的节点冗余,以提高TChord网络的可靠性。
[0041] 首先对Chord系统进行简单介绍,Chord算法在2001年由Stoica等人发表,它的m完美性源自于它的简单性。DHT的关键字是一个m位的标识符,即在[0,2-1]区间中的整m m
数。标识符形成一个一维的对2 取模的标识符环,范围为(2-1)~0。标识符可以通过对一个节点的名字进行散列获得,例如标识符P=hash(IP)。关键字K(key)是一个对象独一无二的标识符,它可以通过对对象名进行散列来获得,K=hash(V)。标识符分为节点ID和关键字,分别标识节点和对象,对象即数据项目,在本申请中可以是物品的信息服务地址URL。
[0042] 在Chord中,对象被关联到Key,节点由节点ID标识,每个节点拥有一部分散列空间,负责保存某个范围的key。节点按ID从小到大排列在一个逻辑环上,值对存储在k的后继结点successor(k)上,successor(k)是从K开始顺时针方向距离K最近的节点,即在一个Chord环中具有顺时针增长ID的一个节点负责其逆时针方向之前的所有关键字。
[0043] 每一节点维护一个路由表,即指针表(finger table),指针表的路由信息提供了邻近节点和远距离连接粗粒度视图的信息,其中远距离连接是以2的次幂为间隔增长的。
[0044] Chord路由算法的基本原理:根据存储于每个节点指针表中的信息,一个节点将查找关键字k的请求转发到k的最近先驱,该先驱根据节点的指针表来确定标识符环上的k的先驱。当请求到达一个节点n,满足k位于n及标识符环上n的后继之间时,节点n汇报其后继作为请求的应答。由于以指针ID的2的次幂的距离间隔,每一跳至少覆盖标识符环上当前节点和目的标示符之间剩余距离的一半。对于具有N个参与节点的Chord环,会产生平均log2N个路由跳。
[0045] TChord针对分组group的特点在Chord上做了一些修改,如图3所示,TChord中的每个虚节点包含一个超级节点组Si,因此指针表需要做相应的修改。原指针表中第i行i i表项标识n后至少2-1远的第一个节点,TChord指针表中第i行表项标识n后至少2-1远的第一个虚节点,即TChord指针表中每个表项所包含的节点地址信息不再是一个节点的地址信息,而是一个指向超级节点组Sid的地址向量。例如指向节点Si的表项所包含的Si的地址信息是一个地址向量Vector[Si],向量Vector[Si]中各个元素依次是指向Si中各个超级节点的地址。
[0046] 下面具体详细介绍TChord的查找、加入和稳定算法。
[0047] ◆查找
[0048] Chord节点查找算法是利用各个节点的指针表在标识符环上寻找距离关键字key最近的后继节点。本算法是TChord的查找算法,它同Chord查找算法基本相同,区别在于TChord采用图3中指针向量表的结构,该指针向量表中,路由一个查询请求到目标分组,从目标分组中的地址向量中随机选择一个IP地址,将查询请求发送到该超级节点,在超级节点之间实现负载均衡。
[0049] TChord查找算法实现了搜索指针表的功能,其具体实现与原Chord算法的不同之处在于节点地址的返回上。它相对于原来的Chord算法增加了地址向量的随机选择过程,只要一个地址向量中的对等端没有全部失效,就能保证算法查找的有效性。另外,通过在地址向量中随机选择一个返回地址实现了超级节点间的负载均衡。
[0050] 下面是TChord查找算法的伪代码:
[0051] TChord查找算法find_successor()
[0052] 输入:查找关键字-id
[0053] 输出:负责关键字名字解析的节点
[0054] 1:n.find_successor(id)
[0055] 2:{
[0056] 3:if(id∈(n,n,successor])
[0057] //n.successor(random_address)从虚节点n.successor的超级节点组中随机选择一个节点,作为n.successor的返回地址
[0058] 4:returnn.successor(random_address);
[0059] 5:else
[0060] 6:{
[0061] 7:n′=n.closest_preceding_finger(id);
[0062] 8:return n′.find_successor(id);
[0063] 9:}
[0064] 10:}
[0065] 11:n.closest_preceding_finger(id)
[0066] 12:for i=m downto 1
[0067] 13:if(finger[i].node∈(n,id))
[0068] 14:return finger[i].node(random_address);
[0069] 15:return n;
[0070] ◆节点加入
[0071] TChord中的一个虚节点代表包括g个超级节点(超级节点组中的节点可以为空)的一个超级节点组Si,当分组中有节点加入时,可能引起TChord中一个新虚节点的加入。假设n为加入节点,n′=n.find_successor()(n′∈Si),即n′是n的后继节点。当节点n请求加入分组Gi时,有以下三种可能情况:
[0072] (1)如果n.C1=n′.C1并且Si.length=g,即Gi就是n应当加入的分组并且Si已满,此时n作为一个普通节点(regularpeer)加入Gi,调用函数join_as_regularpeer()。
[0073] (2)若n.C1=n′.C1并且Si.length<g,即Gi就是n应当加入的分组并且Si未满,此时首先调用join_as_regularpeer()将n加入分组。然后调用超级节点插入函数insert()将节点n加入到Si中,更新地址向量Vector[Si],即在Vector[Si]增加一个新元素n。
[0074] (3)如果n.C1≠n′.C1,即n不属于TChord中的任意一个分组,此时需要调用creategroup()创建一个新分组Gj,初始化超级节点集Sj、地址向量Vector[Sj]。然后调用虚节点加入函数join_in_TChord(),向TChord中加入一个新的虚拟接点。
[0075] 下面是节点加入算法的伪代码:
[0076] 节点加入算法join()
[0077] 输入:加入节点n
[0078] 输出:空
[0079] 1:n.join(n′)
[0080] 2:{
[0081] 3:predecessor=nil;
[0082] 4:successor=n′.find_successor(n);
[0083] 5:if(n.cl==successor.cl)
[0084] 6:n.join_in_group(successor);
[0085] 7:else
[0086] //n.creategroup(successor)--创建一个新分组Gj,包括初始化Gj的超级节点组Sj、地址向量Vector[Sj]
[0087] 8:Gi=n.creategroup(successor);
[0088] 9:Gi.join_in_TChord(n′);
[0089] 10:}
[0090] //n.join_in_group(n′)--节点n通过超级节点n′加入n′所在的分组[0091] 11:n.join_in_group(n′)
[0092] 12:{
[0093] 13:Si=n′.S;
[0094] 14:if(Si.length==g)
[0095] //n.join_as_regularpeer(n′)--节点n通过超级节点n′,作为一个普通节点加入n′所在的分组
[0096] 15:n.join_as_regularpeer(n′);
[0097] 16:else
[0098] 17:n.join_as_regularpeer(n′);
[0099] //n.insert(Si)--将n加入到超级节点组Si,从Si中的超级节点n′复制TChord层的信息(包括TChord指针向量表等信息)到节点n
[0100] 18:n.insert(Si);
[0101] //n′.updateVector()--更新地址向量Vector[Si],将n的地址信息加入Vector[Si]
[0102] 19n′.updateVector();
[0103] 20:}
[0104] ◆分组的加入和稳定
[0105] join_in_TChord()分组加入函数向TChord标识符环加入一个虚拟接点,Sj作为一个虚节点加入TChord的过程和Chord的节点加入过程相同。
[0106] 为了当节点加入和离开系统时校验和更新后继指针,Chord引入了一个稳定化协议。稳定化要求在每一个节点上添加一个额外的先驱指针并周期性地执行该过程。在一个节点k上的stabilize()函数请求k的后继返回其先驱p。如果p位于k和其后继之间,表明p作为k的后继是最近加入到标识符环的,因此,节点k将其后继指针更新为p,并通知p以k作为它的先驱。
[0107] TChord的稳定化算法Chord相似,只不过TChord中的节点代表一个超级节点组。
[0108] 下面是节点n从节点n′加入TChord算法的伪代码,其中n是一个虚节点,代表分组Gi的超级节点组Si:
[0109] 分组加入算法join_in_TChord()
[0110] 输入:加入分组Gi
[0111] 输出:空
[0112] //Gi.join_in_TChord(n′)--将Gi的超级节点组按照一个虚节点加入到Tchord,和Chord节点加入算法相同,区别只是虚节点的地址信息是一个地址向量。
[0113] 1:Gi.join_in_TChord(n′)
[0114] 2:predecessor=nil;
[0115] 3:successor=n′.find_successor(Gi);
[0116] 4:n.stabilize()
[0117] 5:x=successor.predecessor;
[0118] 6:if(x∈(n,successor)
[0119] 7:successor=x;
[0120] 8:successor.notify(n);
[0121] 9:n.notify(n′)
[0122] 10:if(predecessor is nil or n′∈(predecessor,n))
[0123] 11:predecessor=n′;
[0124] 12:n.fix_fingers()
[0125] 13:i=random index>1into finger[];
[0126] 14:finger[i].node=find_successor(finger[i].start);
[0127] 分组:采用Chord网络结构,其路由算法和系统维护策略与Chord相同,此处不再详细介绍。
[0128] 最后应说明的是,以上实施例仅用以描述本发明的技术方案而不是对本技术方法进行限制,本发明在应用上可以延伸为其他的修改、变化、应用和实施例,并且因此认为所有这样的修改、变化、应用、实施例都在本发明的精神和教导范围内。