Как обход NAT работает в случае одноранговых протоколов, таких как bittorrent.

Я знаю об обходах NAT и о STUN, TURN и ICE и о его использовании. Я хочу знать, реализованы ли они в одноранговом приложении для обмена файлами, например bittorrent. Независимо от того, поддерживают ли трекеры одноранговые узлы NAT, чтобы поддерживать связь, используя STUN или реле через TURN. В случае распределенной таблицы хэшей (DHT), как один одноранговый узел мог бы взаимодействовать с другим партнером за NAT?

Ответ 1

BitTorrent не нужно подключаться к какому-либо конкретному участнику в рое, это не протокол чата p2p, где две конкретные конечные точки хотят общаться друг с другом. Все, что его волнует, - это то, что граф соединений роя имеет достаточно высокую степень соединения.

Другими словами, желательно, чтобы клиенты за NAT взаимодействовали друг с другом, но не до такой степени, что основные ресурсы, такие как пересылка трафика, расходуются на эту цель. Отказ - это вариант.

Таким образом, он не использует sip/turn/etc.

Различные клиенты используют некоторую комбинацию следующих подходов для улучшения возможности соединения для массовых транспортных соединений:

  • PCP, NAT-PMP или UPnP-IGD согласование со шлюзом
  • Для TCP можно использовать параметры привязки исходного порта (исходящие соединения) и сокета повторного использования порта (прослушивание + исходящие), чтобы использовать один и тот же локальный порт для всех соединений для использования end- точечные (EIM) преобразования NAT (также называемые NAT с полным конусом).
  • Аналогично, для UDP следует использовать один сокет в сочетании с sendto/recvfrom или эквивалентными API-интерфейсами для мультиплексирования всех соединений уровня приложения через один порт вместо создания одного сокета на узел.
  • в значительной степени недокументированный ut_holepunch extension, который использует взаимно достижимых членов роя вместо оглушающих серверов.
  • необязательный транспортный протокол на основе UDP (µTP), который можно использовать в сочетании с предыдущими точками. как правило, с помощью udp проще добиться обхода кода
  • Сигнализация о возможностях IPv6, которая в принципе позволяет клиентам обновлять свои соединения, а затем сплетничать об одноранговых узлах v6 через PEX/DHT.

В случае DHT используются только первые две точки (согласование шлюза и повторное использование порта). Затраты на попытку обхода nat для одного цикла запрос-ответ будут> 100% и не стоят этого.