【问题标题】:Implementing DHT got find_node responses but never got get_peers or announce_peers requests实施 DHT 得到 find_node 响应,但从未得到 get_peers 或announce_peers 请求
【发布时间】:2021-04-06 01:16:17
【问题描述】:

我正在实施DHT protocol,我收到了许多find_node 的回复,从中我得到了新的节点。我将节点放入队列中,也向它们发送find_node 请求。我在 Linux 上运行我的 java 程序。

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

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

我无法解释的一件事是,在find_node 的回复中,我得到了一个密钥IP,这是我自己解析后的IP 和端口。但是每次的端口都不一样。为什么端口不同?

【问题讨论】:

  • 您的防火墙上是否打开了 UDP 端口?

标签: java dht torrent


【解决方案1】:

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

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

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

  • 您应该使用单个 UDP 套接字bound 连接到本地计算机上的特定端口 IP 地址,以进行所有 DHT 通信。这对于 IPv6 实施具有双重重要性,因为主机通常有多个 IPv6 地址。
  • 如果您在本地 NAT 之后,您需要确保有一个从您的公共地址到本地计算机的稳定端口映射。这可以通过路由器中的manual port forwarding 或通过PCPUPnP-IGDNAT-PMP 协议(如果路由器支持)来实现。
  • 如果您落后于CGNAT,那么您可能无法对其进行太多控制,但在某些部署中,您的本地路由器可能能够通过 PCP 将其端口映射转发到 CGNAT。您必须检查您的路由器是否有公共 IP 或您的 ISP 的文档/帮助论坛才能弄清楚这一点。

如果您的公开可见 IP:port 元组不稳定,则 bittorrent DHT 不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 2023-04-08
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 1970-01-01
    相关资源
    最近更新 更多