Как работает Skype без переадресации портов?

Я разрабатываю приложение p2p, которое работает на порте 30000. Мой маршрутизатор не UPnP, поэтому мне нужно перенаправить порт на маршрутизатор. Но Skype другое приложение p2p работает без перенаправления портов на моем компьютере. Когда я проанализировал его с помощью wirehark, я нашел его используя порт UDP 48980, 58544. Я использую c ++.

Здесь есть библиотека на python, которая делает это для маршрутизаторов Nat PnP . Возможно ли программно пересылать порт на маршрутизатор независимо от типа маршрутизатора и операционной системы . Каким должен быть подход, чтобы сделать это на c ++ или на любом другом языке.

Skype работает очень интересно. Из того, что я прочитал (и это было давно), он работает следующим образом:

  • Сервер Skype поддерживает список всех пользователей и IP-адресов.
  • Пользователь Skype A хочет поговорить с пользователем B Пользователь Skype A отправляет сетевой пакет на IP-адрес пользователя B и ждет ответа. (пользователь B никогда не получает этот пакет).
  • Пользователь Skype Сообщает серверу комбинации IP / портов, на которой он ожидает ответа
  • Сервер уведомляет пользователя B для отправки ответа на
  • пользователь A на указанном порту. Соединение выполнено.

Вероятно, это упрощено, но в последний раз я проверил, как это работает. (Кто-то исправит меня, если я ошибаюсь).

Это очень хорошо описано в этой статье. How-Skype-Co-get-round-firewalls

Перфорация отверстий UDP (один) способов прохождения через NAT.

Вы должны использовать промежуточный сервер и инициировать связь с клиентской стороны. Как упоминал Йоссариан, с этого момента одна из возможностей – пробивка отверстий UDP. В зависимости от типа приложения (и действительно ли это P2P или нет) вы могли бы поддерживать промежуточный сервер на месте все время.

В качестве промежуточной точки Skype использует другие одноранговые узлы, когда невозможно прямое соединение.

т.е. Peer A хочет подключиться к одноранговому узлу B, но сверст B имеет все порты закрыты, тогда связь инициируется через одноранговую сеть C с открытыми портами.

Имейте некоторый опыт в реализации приложений P2P и заставить их работать за NAT-маршрутизаторами.

Skype использует перфорирование отверстий UDP для работы за NAT-маршрутизаторами. Я написал статью и сделал демо-ролик, чтобы помочь другим реализовать аналогичные приложения. Здесь также приводятся ссылки на полезные библиотеки, которые выполняют большую часть работы на местах, например, libutp.

>>> Прореживание отверстий UDP Демо-видео и полезные Libs.

Давайте будем гением компьютера.