为什么Kademlia Distributed Hash Table使用UDP作为其网络传输协议,即使它不可靠?
答案 0 :(得分:10)
主要原因是您快速查询之前从未建立过联系的许多节点,并且在查找过程中可能永远不会再查看。
Kademlia查找是迭代的,即不会转发请求。转发DHT更适合长期存在的TCP连接。
即。大量流量包括在网络节点之间短时间交换请求和响应,可能数百万。快速建立数千个TCP连接的开销将是令人望而却步的。
答案 1 :(得分:5)
为何选择UDP?因为,它是简单,有效和低成本的协议。它不保证包的交付,也不需要建立连续的连接。所有这些功能使UDP适合快速向多个收件人传送数据。这就是P2P应用程序所需要的一切。
来自Kademlia的设计规范:
Kademlia的设计人员似乎没有考虑使用IPv6地址或TCP / IP而不是UDP,或者Kademlia节点有多个IP地址的可能性。
答案 2 :(得分:3)
我必须承认我没有使用过这个产品,但研究它让我觉得我可以回答这个问题。
它似乎是一个最终连贯的系统。它似乎也是一个高性能系统。鉴于此,udp将起作用。没有像tcp那样的握手所以它很快。还有一种纠正机制,因此可以处理协议中可能的损坏。
答案 3 :(得分:2)
我们的Kademlia(OpenKad)版本可以使用TCP或UDP。
Kademlia是一种高级路由协议,因此与两种传输级协议的工作方式相同。 由于故障丢失数据包和超时,Kademlia部署中的查找时间不是那么好。因此,性能不是最好的答案。
答案 4 :(得分:0)
我知道这可能会引起很多争论,但UDP并非专门设计为不可靠,它只是缺乏使其可靠的功能。从更高层次的前瞻性(如套接字编程)UDP和TCP的外观和感觉非常相似,但实际上却无法比较。 TCP旨在处理开箱即用的大多数传输相关问题,其中UDP仅将端口头和校验和附加到底层IP数据包,而这几乎是作为协议的全部范围。
当然,您可以构建并扩展这两种协议。扩展UDP通常不是正确的解决方案,因为TCP通常会处理网络中所需的全部内容,但少数例外情况之一是TCP的连接模型过于局限。 p2p网络就是这种情况,因为TCP的设计基本上是模拟两个端点之间的独占一对一管道,其中p2p连接通常共享更多的全部性质。
总而言之,通过向UDP添加“可靠性”或创建全面的TCP实现,您将在此时“重建方向”。
回答你的问题(为什么UDP在Kademlia中)我不认为规范实际上解释了为什么UDP(或不使用TCP),因此我认为没有权威的答案,但我的猜测是,作者认为构建到UDP会增加比尝试将TCP扩展到特定不适合的方向更多的灵活性。换句话说,添加到一个lib上,它实际上缺少任何形式的特征VS来解决和/或扩展另一个特征的现有特征。