Networking 为什么Kademlia使用UDP?

Networking 为什么Kademlia使用UDP?,networking,udp,dht,kademlia,Networking,Udp,Dht,Kademlia,为什么使用UDP作为其网络传输协议,即使它不可靠?为什么使用UDP?因为它是一种简单、有效、低成本的协议。它不保证包裹的交付,也不需要建立固定连接。所有这些特性使UDP适合向多个收件人快速传递数据。这就是P2P应用程序所需要的一切 根据Kademlia的设计规范: Kademlia的设计者似乎没有考虑使用IPv6地址或TCP/IP代替UDP,或者Kademlia节点具有多个IP地址的可能性 我必须承认我没有使用过这个产品,但研究它让我觉得我可以回答这个问题 这似乎是一个最终连贯的系统。它似乎也是

为什么使用UDP作为其网络传输协议,即使它不可靠?

为什么使用UDP?因为它是一种简单、有效、低成本的协议。它不保证包裹的交付,也不需要建立固定连接。所有这些特性使UDP适合向多个收件人快速传递数据。这就是P2P应用程序所需要的一切

根据Kademlia的设计规范:

Kademlia的设计者似乎没有考虑使用IPv6地址或TCP/IP代替UDP,或者Kademlia节点具有多个IP地址的可能性


我必须承认我没有使用过这个产品,但研究它让我觉得我可以回答这个问题


这似乎是一个最终连贯的系统。它似乎也是一个高性能系统。有鉴于此,udp将起作用。没有像tcp那样的握手,所以速度很快。还有一种纠正机制,可以处理协议可能出现的损坏。

主要原因是您可以快速查询许多以前从未联系过的节点,并且在查找过程中可能再也看不到这些节点

Kademlia查找是迭代的,即不会转发请求。转发DHT更适合于长期TCP连接

也就是说,很大一部分流量由网络节点之间的请求和响应的短期交换组成,可能范围达数百万。快速建立数千个TCP连接的开销将是巨大的。

我们版本的Kademlia(OpenKad)可以使用TCP或UDP

Kademlia是一种高级路由协议,因此在两种传输级协议中的工作原理相同。
由于失败、丢包和超时,Kademlia部署中的查找时间不太好。因此,性能不是最好的答案

我知道这可能会引起很多争论,但UDP并不是专门设计为不可靠的,它只是缺少使其可靠的功能。从更高的角度来看(如套接字编程),UDP和TCP看起来和感觉非常相似,但实际上不可比较。TCP被设计来处理大多数与传输相关的问题,其中UDP只在底层IP数据包中附加端口头和checksome,这几乎是协议的全部内容

当然,您可以构建和扩展这两个协议。扩展UDP通常不是正确的解决方案,因为TCP通常可以处理网络中的所有需要,但少数例外情况之一是TCP的连接模型过于有限。在p2p网络中就是这种情况,因为TCP的设计基本上模拟了两个端点之间的独占一对一管道,其中p2p连接通常共享更多的全对全特性

长话短说,在这一点上,您将通过向UDP添加“可靠性”或通过创建全对全TCP实现来“重建轮子”

为了回答你的问题(为什么在Kademlia中使用UDP),我不认为规范实际上解释了为什么使用UDP(或者不使用TCP),因此我认为没有权威的答案,但我的猜测是,作者们认为,与试图将TCP扩展到它不是专门为之设计的方向相比,基于UDP的构建将增加更多的灵活性。换言之,添加到一个几乎没有任何形式的特性的库中,而不是围绕和/或扩展另一个库的现有特性