http://book.51cto.com/art/201212/375279.htm
另一种DHT对等网络是Kademlia,它由Maymounkov和Mazières设计。与Pastry类似,Kademlia基于结点距离来路由报文,但是正如下文所述,Kademlia中的距离度量与Pastry中不同。在这个网络中,两个标识符(结点或关键字)之间的距离是通过位异或(XOR)来度量的。换言之,如果x和y是两个标识符,我们有
当我们度量两点间的几何距离时,XOR有以下四个特性:
标识符空间
在Kademlia中,结点和数据项是m位标识符,它们创建了含有2m个点的标识符空间,这些点分布在二叉树叶子结点上。此协议使用SHA-1散列算法,其中m = 160。
例2.23 为方便起见,我们假设m = 4。在这个空间中有16个分布在二叉树叶子结点上的标识符。图2-55给出的情况只有8个活动结点以及5个关键字。
如图2-55所示,由于3 ( 3 = 0,因此关键字k3存储在结点N3上。尽管关键字k7看起来与N6和N8在数字上等距,但是,它却存储在N6上,因为6 ( 7 = 1而6 ( 8 = 14。另一个有趣的点是关键字k12,它与N11在数字上更接近,但它却存储在N15上,因为11 ( 12 = 7但是15 ( 12 = 3。
(点击查看大图)图2-55 例2.23 |
路由表
Kademlia仅为每一个结点维护一个路由表;且没有叶子结点集。网络中每个结点将二叉树分成m棵子树,这些子树并不包含结点自身。子树i包含了那些与相应结点共享最左i位数字(公共前缀)的结点。路由表有m行但只有1列。在我们的讨论中,我们假设每一行存储了相应子树中的一个结点的标识符,但是之后我们展示出Kademlia允许每行有多达k个结点。这个思想和Pastry相同,但是公共前缀的长度是基于比特位的个数,而不是基于2b的数字个数。表2-21给出了路由表。
例2.24 让我们来找例2.23中的路由表。为简便起见,我们假设每行仅使用一个标识符。因为m = 4,每个结点有四个子树,这些子树对应路由表中的四行。每行的标识符代表在相应子树中与当前结点距离最近的点。图2-56给出所有的路由表,但是只有三棵子树。为了使图例更小,我们选择出8棵树。
我们以结点6举例,使用相应的子树来解释一下如何构造路由表。对于其他结点的解释是类似的。
a.在第0行,我们需要插入一个结点标识符,这个结点在子树中公共前缀长度p = 0且距离最近。在这棵子树中有三个结点(N8、N11以及N15),然而,N15与N6最近,因为N6 ( N8 = 14,N6 ( N11 = 13并且N6 ( N15 = 9。N15就被插入到第0行。
(点击查看大图)图2-56 例2.24 |
相关推荐
受二叉树思想的启发,在P2P网络拓扑管理协议T-Man和Kademlia网络快速构建算法的基础上,提出了从非结构化P2P网络快速构建CAN网络的算法。Kademlia网络为二叉树拓扑结构,CAN网络基于空间划分,由于已经提出了...
节点ID的生成方式因具体应用而异,常见的做法是对用户IP地址或其他唯一值进行SHA-1哈希计算。节点ID的结构允许将整个网络视作一棵巨大的二叉树,其中每个节点都是树上的叶子,且其位置由ID值的最短前缀唯一确定。 #...
eDonkey网络是一种分布式文件共享系统,它通过哈希算法对文件进行标识,确保文件的唯一性,并使用Kademlia网络结构来快速定位文件来源。而电驴链接(ed2k链接)是eDonkey网络特有的文件标识方式,包含了文件的哈希值...
1. 分布式哈希表(DHT):P2P聊天系统常利用DHT技术,如Kademlia,存储和查找其他节点的联系信息。这使得节点能快速找到并连接到聊天伙伴。 2. 数据同步:在P2P环境中,当节点离线再上线时,需要同步聊天记录。一种...
1. **网络基础**:理解TCP/IP协议栈是至关重要的,包括IP地址、端口号、TCP与UDP协议,以及它们在网络通信中的作用。C#中的System.Net命名空间提供了许多类和方法来处理网络连接。 2. **套接字编程**:C#中的Socket...
首先,我们要了解电驴(eMule)是一个开源的P2P文件分享软件,它使用了Kademlia分布式哈希表协议,实现了高效的数据交换。在进行代码编译之前,我们需要获取到电驴的源代码,这通常可以在项目的官方仓库或者第三方...
1. P2P流式传输:在P2P网络中,每个参与的客户端既是内容的消费者,也是内容的提供者。通过共享带宽资源,系统能有效应对大规模用户并发访问。常见的P2P流媒体协议有BitTorrent、Gnutella等。它们通过智能路由算法,...
1. **网络通信协议**: - **TCP/IP协议**:传输控制协议/因特网协议是互联网的基础,确保数据可靠传输。 - **UDP协议**:用户数据报协议用于实时通信,速度较快但不保证数据顺序和可靠性,适用于部分聊天场景。 -...
1. **eMule基础介绍**:eMule的核心理念是公平分享,用户在下载的同时也在为其他人提供上传服务。它具有高效稳定的下载机制,包括ed2k链接、Source Exchange (SourceX) 和Kademlia (KAD) 网络。 2. **0.50a-Xtreme ...
1. **P2P网络结构**: - 在P2P网络中,节点之间的关系是对等的,没有中心节点控制整个网络。所有节点共同分担网络的负载,这使得系统具有较高的容错性,因为即使部分节点离线,其他节点仍能继续工作。 2. **P2P...
这通常通过DHT(分布式哈希表)或Kademlia算法来实现,使得节点能高效地查找并连接到其他节点。 2. **数据分发策略**:如BitTorrent的Choking/Unchoking策略,用于控制数据的上传和下载速度,平衡网络中的带宽资源...
2. **分布式哈希表**:为了高效地查找和连接其他节点,可以引入分布式哈希表(DHT)技术,如Kademlia。 3. **安全通信**:为了保护数据的安全,可以考虑使用加密算法,如AES,以及认证机制,如SSL/TLS。 总之,基于...
Kadmelia(Kademlia)等分布式哈希表(DHT)算法常用于节点查找和路由,它们通过节点ID进行寻址,并利用 XOR 距离来计算最短路径。 6. **数据分块与校验**:大型文件在P2P网络中通常被分成小块进行传输,以提高效率...
7. **分布式散列表(DHT)**:对于大规模的P2P网络,分布式散列表如Kademlia可以帮助快速查找和存储节点信息,提高系统的扩展性。 在提供的压缩包中,`ToStudents`可能包含了给初学者的学习资料,比如教程或代码...
1. **NAT穿透**:由于许多家庭用户在网络中被NAT(网络地址转换)设备隔离,因此需要通过STUN(简单Traversal of UDP over NAT)、TURN(Traversal Using Relays around NAT)或ICE(Interactive Connectivity ...
1. **网络编程基础**:首先,你需要了解TCP/IP协议栈,包括套接字(Socket)编程,它是C#进行网络通信的基础。在P2P系统中,套接字用于建立和维护节点间的连接。 2. **多线程**:P2P通信通常需要同时处理多个并发...
1. **去中心化**:P2P网络没有中心化的控制点,所有参与者地位平等,降低了对单一服务器的依赖,提高了系统的健壮性和可靠性。 2. **负载均衡**:每个节点既是服务提供者也是消费者,这使得网络资源分布更加均匀,...
1. **P2P网络基础** - **定义**:P2P网络是一种去中心化的架构,其中每个节点既是客户端也是服务器,可以相互通信并共享资源。 - **结构**:与传统的客户端-服务器模型不同,P2P网络中没有单一的中心控制点,所有...
这种模式摒弃了传统的客户端-服务器结构,转而采用分布式的方式,使得网络中的资源,如计算能力、数据存储、内容分发以及网络带宽,能够以非集中化的方式被所有参与者共同利用。P2P系统通常部署在互联网边界或者自...
1. **Java网络编程基础**:首先,你需要熟悉Java的Socket编程,包括ServerSocket和Socket类。这些类提供了TCP/IP通信的基础,用于创建服务器端和客户端的连接。同时,了解DatagramSocket和DatagramPacket类对于UDP...