Я знаю об обходе NAT и о STUN, TURN и ICE и его использовании. Я хочу знать, реализованы ли они в одноранговом приложении для обмена файлами, например bittorrent. Независимо от того, поддерживают ли трекеры одноранговые узлы NAT, чтобы поддерживать связь, используя STUN или реле через TURN. В случае с распределенной таблицей хэшей (DHT), как один одноранговый узел мог бы взаимодействовать с другим партнером за NAT?Как обход NAT работает в случае одноранговых протоколов, таких как bittorrent.
ответ
BitTorrent не должен подключаться к какому-либо конкретному участнику в рое, это не протокол чата p2p, где две конкретные конечные точки хотят разговаривать друг с другом. Все, о чем он заботится, заключается в том, что граф соединений роя имеет достаточно высокий уровень связности.
Другими словами, получение клиентов за NAT для общения друг с другом является несколько желательным, но не до такой степени, что основные ресурсы, такие как пересылка трафика, будут израсходованы на эту цель. Отказ - это вариант.
Таким образом, он не использует sip/turn/etc.
Различных клиенты используют некоторую комбинацию из следующих подходов к улучшению подключения для объемных транспортных соединений:
- Nat-PMP/PCP переговоров со шлюзом
- порта параметры повторного сокета, чтобы использовать конечную точку независимой (EIM).
- расширение в значительной степени недокументированное расширение
ut_holepunch
, в котором вместо оглушающих серверов используются взаимоисключающие члены swarm. - необязательный транспортный протокол на основе протокола UDP (μTP), который может использоваться в сочетании с предыдущими точками. как правило, обходной путь легче достичь с помощью udp
- Передача сигналов IPv6, которая в принципе позволяет клиентам обновлять свои соединения, а затем сплетничать о сверстниках v6 через PEX/DHT.
В случае DHT используются только первые две точки (согласование шлюза и повторное использование порта). Накладные расходы на попытку nat traversal для одного цикла запроса-ответа будут> 100% и не стоят того.