#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 нестабилен.