一种Kademlia网络的节点标识符生成方法

文档序号:9711626阅读:224来源:国知局
一种Kademlia网络的节点标识符生成方法
【技术领域】
[0001]本发明涉及网络通信技术领域,特别是指一种Kademlia网络的节点标识符生成方法。
【背景技术】
[0002]Kademlia技术的其中一个重要组成要素是节点标志符(Node ID)与节点间的“距离”,节点间的距离是通过两个节点标符识的异或(X0R)计算出来。
[0003]现有的节点标志符是采用随机算法结合安全哈希算法(Secure Hash Algorithm,简称SHA1算法)生成。国内的eMule米用的是128bit的节点标志符,也是米用随机算法生成的。
[0004]传统的节点标志符生成机制在进行“距离”计算时,其“距离”跟现实网络环境中节点之间的“距离”没有任何联系,带来的是效率问题。典型的例子是在同一局域网内的两个节点(假设两个节点分别定义为Na、Nb),计算出来的距离具有不确定性,有可能是非常远的(两个节点标识符异或后的值非常大),这样节点Na可能永远不知道节点Nb的存在。在实际应用中,在同一局域网内的两个节点之间的网络速度,远远要大于互联网中两个节点之间的网络速度。假如节点Na需要某一资源R,资源R同时存在于节点Nb与节点Nc(Nc与Na不在同一局域网内),则Na使用Kademlia网络搜索算法找到的资源R的存储位置可能是Nc而不是Nb。造成这个问题的主要原因就是上面所述的节点标志符是随机性的,所计算出来的“距离”并不能代表两个节点在现实网络环境中的“距离”。
[0005]以上所说的现实网络环境中的“距离”是这样一种概念,在同一局域网内的两个节点之间的“距离”较近,不同局域网内的两个节点之间的“距离”较远;处于同一 ICP(如电信)的两个节点之间的“距离”比处于不同ICP(如一个在电信,一个在网通)的两个节点之间的“距离”要近;在同一ICP情况下,处于同一城市的两节点之间的“距离”比处理不同城市的两节点之间的“距离”要近。

【发明内容】

[0006]本发明提出一种Kademlia网络的节点标识符生成方法,节点之间计算出来的距离跟现实网络环境更为接近,从而提高效率。
[0007]本发明的技术方案是这样实现的:
[0008]一种Kademl ia网络的节点标识符生成方法,具体包括以下步骤:
[0009](1)在Kademlia网络设置若干节点,获取节点的内网IP地址和占用的内网端口 ;
[0010](2)获取节点的公网IP地址和NAT类型;
[0011](3)判断节点是否处于内网,得出节点的内网标志;
[0012](4)判断节点是否处于防火墙后,得出节点的防火墙标志;
[00?3] (5)对公网IP地址进行SHA1运算,得到节点的原始节点标识符,原始节点标识符占用160bit;
[0014](6)根据公网IP地址从公网IP地址数据库查询该公网IP地址所属的ICP信息和区域信息;
[0015](7)测试节点分别到各网络运营商的节点的网速,得到节点的路由信息;
[0016](8)设定节点的级别信息;
[0017](9)将级别信息、内网IP地址、内网端口、公网IP地址、NAT类型、I CP信息、内网标志、防火墙标志、区域信息和路由信息与原始节点标识符进行或运算,得到节点的节点标识符。
[0018]进一步的,节点标识符包括依次排列的ICP信息、区域信息、路由信息、级别信息、内网标志、公网IP地址、NAT类型、内网IP地址和内网端口,节点标识符占用160bit,ICP信息占用2bi t,区域彳目息占用10bit,路由彳目息占用3bi t,级别彳目息占用2bi t,内网标志占用lbit,公网IP地址占用90bit,NAT类型占用3bit,内网IP地址占用32bit,内网端口占用16bit0
[0019]进一步的,步骤(2)中获取节点的NAT类型具体包括以下步骤:
[0020](201)节点所处的公网中设有一个Stun服务器,Stun服务器设有两个公网IP地址;[0021 ] (202)判断节点是否能够进行UDP通信,若节点不能进行UDP通信,则停止流程;否贝1J,进入下一步;
[0022](203)判断节点是否位于NAT后,若否,则停止流程,若是,则进入下一步;
[0023](204)判断节点的NAT类型是否是全通型NAT,若是,则停止流程,若否,则进入下一步;
[0024](205)判断节点的NAT类型是否是对称型NAT,若是,则停止流程,若否,则进入下一步;
[0025](206)判断节点的NAT类型是受限型NAT还是端口受限型NAT。
[0026]进一步的,步骤(202)中,若节点不能进行UDP通信,则节点的NAT类型为未知类型。
[0027]进一步的,步骤(203)中,停止流程后,得出节点的NAT类型为公网型。
[0028]进一步的,步骤(202)、(203)、(204)、(205)和(206)中,节点通过建立UDPsocket进行判断。
[0029]进一步的,步骤(3)中判断节点是否处于内网的步骤为,比较内网IP地址和公网IP地址是否相同,若是,则处于公网,若否,则处于内网。
[0030]进一步的,步骤(7)具体包括以下步骤:
[0031](701)从节点的路由表中选出Μ个已知节点,Μ为整数,Μ大于等于3,已知节点是各网络运营商的节点;
[0032](702)节点分别向已知节点发送RCP TEST指令;
[0033](703)已知节点收到RCP TEST指令后,向节点返回一个响应命令;
[0034](703)节点在有效时间内,根据接收到的响应命令,得出到已知节点的网速与带宽;
[0035](704)根据节点到已知节点的网速和带宽确定路由信息。
[0036]本发明的有益效果在于:节点之间计算出来的距离跟现实网络环境更为接近,从而提尚效率。
【附图说明】
[0037]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0038]图1为本发明一种Kademlia网络的节点标识符生成方法的流程图;
[0039]图2为图1中节点标识符的结构示意图。
【具体实施方式】
[0040]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0041]—、主流程
[0042]如图1所示,本发明提出了一种Kademlia网络的节点标识符生成方法,具体包括以下步骤:
[0043](1)在Kademlia网络设置若干节点,获取节点的内网IP地址和占用的内网端口;内网端口是用于将节点连接Kademlia网络的UDP端口 ;
[0044](2)获取节点的公网IP地址和NAT类型;
[0045 ]步骤(2)中获取节点的NAT类型具体包括以下步骤:
[0046](201)节点所处的公网中设有一个Stun服务器,Stun服务器设有两个公网IP地址;Stun服务器做UDP监听(IP-1,Port-1),(IP-2,Port-2)并根据客户端的要求进行应答。
[0047](202)判断节点是否能够进行UDP通信,若节点不能进行UDP通信,则停止流程;否贝1J,进入下一步;
[0048](203)判断节点是否位于NAT后,若否,则停止流程,若是,则进入下一步;
[0049]节点建立UDP socket然后用这个socket向Stun服务器的(IP-1,Port-l)发送数据包要求Stun服务器返回节点的IP和Port,节点发送请求后立即开始接收数据包,要设定socket Timeout(200ms),防止无限堵塞.重复这个过程若干次。如果每次都超时,无法接收到Stun服务器的回应,则说明节点无法进行UDP通信,可能是防火墙或NAT阻止UDP通信,
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1