Реализация DHT получила ответы find_node, но так и не получила запросы get_peers или announce_peers

#java #dht #torrent

#java #dht #торрент

Вопрос:

Я реализую DHT protocol , и я получил много find_node ответов, из которых я получил новые узлы. Я помещаю узлы в очередь, отправляю find_node им запрос тоже. Я запускаю свою Java-программу в Linux.

Поэтому я думаю, что мое декодирование правильное, я могу анализировать IP и порт из find_node ответов.

Но, как ни странно, я никогда не получал get_peers announce_peers запросов or. Какая ошибка вызвала мою ситуацию?

Одна вещь, которую я не могу объяснить, это то, что в find_node ответах я получил ключ IP , который является моим собственным IP и портом после синтаксического анализа. Но порт каждый раз разный. Почему порт отличается?

Комментарии:

1. Открыт ли у вас UDP-порт на вашем брандмауэре?

Ответ №1:

Но, как ни странно, я никогда не получал запросов get_peers или announce_peers. Какая ошибка привела к моей ситуации?

DHT-узел A будет отправлять запросы только в том случае, если вы были добавлены в некоторую таблицу маршрутизации другого узла B по пути к месту назначения. Вы добавляетесь в таблицы маршрутизации только в том случае, если ваш узел хорошо себя ведет, т. Е. Имеет хорошее время безотказной работы, стабильный IP, порт, идентификатор и правильно отвечает на различные типы запросов, такие как pings.

Одна вещь, которую я не могу объяснить, это то, что в ответах find_node я получил ключевой IP, который является моим собственным IP и портом после синтаксического анализа. Но порт каждый раз разный. Почему порт отличается?

  • Вы должны использовать один сокет UDP, привязанный к определенному порту и IP-адресу на вашем локальном компьютере для всех сообщений DHT. Это вдвойне важно для реализации IPv6, поскольку хосты часто имеют несколько адресов IPv6.
  • Вам необходимо убедиться, что, если вы используете локальный NAT, существует стабильное сопоставление портов с вашего общедоступного адреса на ваш локальный компьютер. Это может быть достигнуто с помощью ручной переадресации портов в вашем маршрутизаторе или с помощью протоколов PCP, UPnP-IGD или NAT-PMP, если поддерживается маршрутизатором.
  • Если вы используете CGNAT, то у вас может быть мало контроля над ним, но в некоторых развертываниях ваш локальный маршрутизатор может пересылать свои сопоставления портов в CGNAT через PCP. Вам нужно будет проверить, имеет ли ваш маршрутизатор общедоступный IP-адрес, или документацию / справочные форумы вашего провайдера, чтобы выяснить это.

Bittorrent DHT не работает, если ваш общедоступный кортеж IP:port нестабилен.