Подтвердить что ты не робот

Подключение P2P через NAT?

Я начал изучать возможность подключения к другому, используя соединение p2p, поэтому я закодировал простую программу сокетов в JAVA для устройств Android, в которой пользователь, в котором пользователи могут делиться простыми сообщениями p2p (у меня не было никаких идея о NAT тогда). Я узнал об NAT, поэтому теперь мне нужно установить TCP-соединение с другим пользователем, который использует сервер для обнаружения, но передается полезная нагрузка p2p. Я также посмотрел на XMPP (очень хорошее и подробное объяснение того, как работает протокол здесь) и UPnP, но я не знаю, как их реализовать.

Еще один интересный вопрос, который возникает в BitTorrent, потому что он может работать на любом устройстве и даже за NAT. Я не могу объяснить, как работает BitTorrent.

Я много исследовал, но я застрял.

Мои вопросы:

  • Подробное описание BitTorrent (например здесь, а не как торренты работают) и как он может работать с NAT?
  • Есть ли способ сделать запись NAT программным способом?
  • Является ли программирование сокетов достаточным для p2p?
  • Насколько сложно создать собственный протокол и как я могу его создать?
  • Если два устройства D1 и D2 хотят передать p2p, и они знают друг друга IP. D1 отправляет запрос D2 и не может пройти через D2 NAT, но должна быть запись, созданная в D1 NAT. Поэтому, когда D2 пытается отправить что-то, D1 NAT должен обнаружить запись с D2 IP. Тогда почему пакет не разрешен?
4b9b3361

Ответ 1

Еще один интересный вопрос, который возникает в BitTorrent, потому что он может работать на любом устройстве и даже за NAT. Я не могу объяснить, как работает BitTorrent.

Этот оператор выглядит так, как будто вы предполагаете, что bittorrent нуждается в полной возможности подключения.

Это неверно.

За устройством NAT вы все равно сможете установить исходящие TCP-соединения. Обычно этого достаточно для bittorrent, если в сети есть другие, не-NATed (или NATed, но правильно port-forwarded) клиенты в сети, которые может принимать входящие соединения.

NAT не влияет на направление потока данных, поскольку соединения являются двунаправленными после их установления. Это только проблематично для начальной настройки соединения.

Это отлично работает для bittorrent, потому что bittorent не заботится о том, какой конкретный node вы получаете свои данные. Хотя улучшенная связь обычно повышает производительность.

Если личность node имеет значение или передача один на один является важным прецедентом, тогда другие протоколы p2p обычно пытаются NAT traversal, и если это терпит неудачу, полагайтесь на сторонние узлы, передающие трафик между теми узлами, которые не могут напрямую подключиться друг к другу.

Кроме того, поддержка IPv6 в будущем станет необходимой для поддержки сквозной связи, поскольку все больше и больше ISP начинают развертывать операторский класс NAT для IPv4, в то время как IPv6 останется неатифицированным

Ответ 2

Одно должно быть ясно, что 100% P2P между всеми типами NAT сейчас невозможно. Практически невозможно установить соединение P2P между ** Symmetric и Symmetric/PRC NAT. В этом случае соединение устанавливается через сервер ретрансляции под названием TURN.

Я отвечаю на ваш второй вопрос, потому что я не знаю много о первом.

2) Да. Вы можете отправить пакет через свой NAT и будет отображаться между вашим внутренним IP-адресом: порт на внешний IP-порт NAT: порт. Вы можете узнать этот внешний IP-порт, отправив запрос на оглушение. Обратите внимание, что этот метод не работает для Symmetric NAT.

3) Да, программирование сокета достаточное для p2p.

4) Зачем нужен протокол, если уже существует несколько. Протокол ICE сегодня лучше всего подходит для обхода NAT, и я не думаю, что его было легко создать. UPnP и NAT-PMP действительно уязвимы с точки зрения безопасности.

5) Я думаю, что происходит, как правило, NAT блокирует к нему неизвестные пакеты. Поэтому, когда D1 отправляет пакет в D2, его NAT блокирует все пакеты, входящие из D1s IP: Port. Вот почему соединение не работает. Вы должны использовать технологию перфорации отверстий для D1 и D2, чтобы успешно установить соединение P2P.

** Симметричным NAT я подразумеваю симметричный NAT со случайным распределением портов.

Ответ 3

  • Последние версии BitTorrent используют μTP, который накладывается над UDP, а не TCP. μTorrent использует частное расширение (ut_holepunch), которое выполняет перфорирование отверстий UDP, большинство других реализаций не беспокоят (за исключением Tixati).

  • Некоторые маршрутизаторы NAT принимают запросы перенаправления портов, используя uPNP или PMP. Поддерживается ли это, зависит от конкретной марки маршрутизатора и его конфигурации.

  • Да, для P2P достаточно программирования сокетов.

  • Трудно ответить. Я предлагаю вам прочитать викифицированную и аннотированную спецификацию BitTorrent для начала.

  • Да, это принцип Перфорация отверстий UDP.

Ответ 4

Существует статья "" Одноранговая связь через сетевые трансляторы адресов ", в которой описывается UDP hole punching и расширяет его для использования по протоколу TCP.

Конечно, вам всегда понадобится сервер ретрансляции для случаев, когда перфорация отверстий не поддерживается.