首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现分布式哈希表获得了find_node响应,但从未获得get_peers或announce_peers请求

实现分布式哈希表获得了find_node响应,但从未获得get_peers或announce_peers请求
EN

Stack Overflow用户
提问于 2020-12-29 19:47:15
回答 1查看 110关注 0票数 0

我正在实现DHT protocol,并且我已经收到了许多find_node响应,并从中获得了新的节点。我将节点放在队列中,也向它们发送一个find_node请求。我在Linux上运行我的java程序。

所以我认为我的解码是正确的,我可以从find_node响应中解析IP和端口。

但奇怪的是,我从未收到过get_peersannounce_peers请求。是什么错误导致了我的情况?

我不能解释的一件事是,在find_node响应中,我得到了一个关键的IP,它是解析后我自己的IP和端口。但是端口每次都是不同的。为什么端口会有所不同?

EN

回答 1

Stack Overflow用户

发布于 2021-01-12 15:17:33

,但奇怪的是,我从未收到过get_peers或announce_peers请求。是什么错误导致了我的情况?

分布式哈希表节点A只有在您被添加到另一个节点B的某个路由表的情况下才会发送请求。只有当您的节点表现良好,即正常运行时间良好,具有稳定的IP、端口和ID,并正确响应各种查询类型(如ping)时,您才会被添加到路由表中。

我不能解释的一件事是,在find_node响应中,我得到了一个关键IP,它是我自己的IP和解析后的端口。但是端口每次都是不同的。为什么端口会有所不同?

  • 您应该对本地计算机上的特定端口 IP地址使用单个UDP套接字bound,以进行所有分布式哈希表通信。这对于IPv6实现加倍重要,因为主机通常具有多个IPv6 addresses.
  • You,因此需要确保如果您位于本地NAT之后,则存在从您的公共地址到本地计算机的稳定端口映射。这可以通过路由器中的manual port forwarding或通过PCPUPnP-IGDNAT-PMP协议(如果路由器支持)来实现。
  • 如果您是CGNAT的后盾,那么您可能无法对其进行太多控制,但在某些部署中,您的本地路由器可能能够通过PCP将其端口映射转发到CGNAT。您必须检查您的路由器是否具有公共IP或您的ISP的文档/帮助论坛才能找出答案。

如果你的公开可见的IP:port tuple不稳定,bittorrent DHT就不能工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65491641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档