节点:DHT 网络上的客户端。
Peers:试图下载特定资源的客户端。
假设 DHT 网络是一个连通图,但没有节点可以访问所有其他节点(这种消耗与 DHT 网络覆盖的 Internet 是完全连通的普遍看法相反)。
覆盖在 DHT 网络上的对等网络是否仍然是一个连通图?为什么?
节点:DHT 网络上的客户端。
Peers:试图下载特定资源的客户端。
假设 DHT 网络是一个连通图,但没有节点可以访问所有其他节点(这种消耗与 DHT 网络覆盖的 Internet 是完全连通的普遍看法相反)。
覆盖在 DHT 网络上的对等网络是否仍然是一个连通图?为什么?
Kademlia 是一种抽象算法,它假设球形奶牛处于真空状态。本文讨论的唯一故障模式是流失和临时图分区。不考虑非对称可达性。
在现实世界中实施的 Kademlia不做任何保证。一切都是在尽力而为的概率-足够好的基础上完成的。
现实世界中的主要问题不是互连集群 A 无法与互连集群 B 通信的节点。NAT 和防火墙不会大规模引入此类集群。他们创建了一组任何人都无法始终访问的二等公民- 没有 NAT 遍历措施 - 因此只能连接到作为任何人都可以与其他人交谈的节点的一等公民。当然存在一些边缘情况,但它们在很大程度上是无关紧要的。
无论如何,由于您甚至没有询问 kademlia,而是询问了 bittorrent,这实际上并不是 kademlia 的覆盖,而是一个单独的网络,它只是从 kademlia 引导其联系信息,事情变得更加复杂。Bittorrent 可以通过 TCP 和 µTP 两种不同的传输机制实现,并且客户端可以支持 TCP、µTP 和 Kademlia-via-UDP 的不同级别的 nat 遍历能力。
Kademlia 节点通常将 bittorrent 的联系信息存储在几个可访问的节点上,因为它们 - 很明显 - 无法访问不可访问的节点以进行存储。他们这样做也有冗余,这确保了存储的联系信息很可能被其他任何人观察到。
基于该联系信息,bittorrent 客户端可以尝试相互连接。只要有一些可访问的 bittorrent 客户端,它们就能够建立直接连接,然后还可以尝试在不可访问的节点之间进行一些 nat 遍历措施。同样,没有任何保证,因此在某些情况下小群可能会失败,但是一旦群变得足够大,概率就会压倒性地倾向于连接图。
另一个小问题是 IPv4 与 IPv6。通常 IPv6 提供更好的连接性,但并非所有客户端都同样很好地实现了 ipv6 扩展,因此可能会阻止一些 v6 边缘的形成,而它们原则上会在相同节点之间提供卓越的连接性。
请注意,ipv4 和 ipv6 DHT 在理论上是独立的 DHT 网络,它们恰好有一些重要的重叠。如何协调多个独立的网络基本上不在 kademlia 的范围内。