Kademlia 协议如何保证节点形成连通图?

How does Kademlia protocol guarantee peers forming a connected graph?

节点:DHT 网络上的客户端。
Peers:尝试下载特定资源的客户端。

假设DHT网络是一个连通图,但是没有节点可以访问所有其他节点(这种消耗与人们普遍认为的DHT网络覆盖的互联网是完全连接的相反)。

叠加在DHT网络上的Peer-network还是连通图吗?为什么?

Kademlia 是一种抽象算法,假设牛在真空中是球形的。本文讨论的唯一故障模式是流失和临时图分区。不考虑非对称可达性。

在现实世界中实施的 Kademlia 没有保证。一切都是在尽力而为的基础上完成的。

现实世界中的主要问题不是互连集群 A 无法与互连集群 B 通信的节点。NAT 和防火墙不会大规模引入此类集群。他们创建了一组 second-class 公民,任何人 都无法始终访问这些公民 - 缺少 NAT 遍历措施 - 因此只能连接到 first-class公民是任何人都可以与其他人交谈的节点。当然存在一些边缘情况,但它们在很大程度上是无关紧要的。

无论如何,由于您甚至不是在询问 kademlia,而是在询问 bittorrent,它实际上并不是 kademlia 的覆盖层,而是一个单独的网络,它只是从 kademlia 引导其联系信息,事情变得更加复杂。 Bittorrent 可以通过两种不同的传输机制实现,TCP 和 µTP,客户端可以支持 TCP、µTP 和 Kademlia-via-UDP 的不同级别的 nat 遍历功能。

Kademlia 节点通常将 bittorrent 的联系信息存储在几个可访问的节点上,因为它们 - 很明显 - 无法访问无法访问的节点以进行存储。他们这样做也是有冗余的,这确保了存储的联系信息很可能被其他任何人看到。

基于该联系信息,bittorrent 客户端随后可以尝试相互连接。只要有一些可访问的 BT 客户端,它们就能够建立直接连接,然后还可以在不可访问的节点之间尝试一些 nat 遍历措施。同样,没有任何保证,因此在某些情况下小群可能会失败,但一旦群变得足够大,概率就会压倒性地倾向于有利于图形连接。

另一个小问题是 IPv4 与 IPv6。通常 IPv6 提供更好的连接性,但并非所有客户端都同样好地实现 ipv6 扩展,因此可能会阻止一些 v6 边缘的形成,而它们原则上会在相同节点之间提供更好的连接性。

请注意,ipv4 和 ipv6 DHT 理论上是独立的 DHT 网络,它们只是碰巧有一些重要的重叠。如何协调多个独立的网络,基本不在kademlia的范围内。