2014-09-18 8 views
1

Хорошо, поэтому мне нужно мое приложение на C++, чтобы сделать одноранговое UDP-соединение. Я рассмотрел перфорирование отверстий и UPNP (используя сопоставление портов). Отверстие в отверстиях кажется немного грязным: вам нужен сервер, тонны пакетов UDP для мусора. I действительно не хочу связываться с сервером, поэтому я выбрал UPNP. Я построил miniupnpc http://miniupnp.free.fr/ библиотеку и счастливо использовал ее дома. Но когда я попробовал мое приложение в другой сети, у меня очень расстраивают результаты:Одноранговое соединение, когда одно одноранговое соединение за NAT

  1. только 1 (мой) маршрутизатор делает все, что нужно (локальный & внешнего IP, отображение портов)
  2. 3 маршрутизаторов только покажите мне локальный IP-адрес, и, возможно (я не проверял) делают порт отображения
  3. 1 маршрутизатор поддерживает UPnP, но miniupnpc не смог найти устройство
  4. 1 маршрутизатор не поддерживает UPnP (проверено с помощью инструментов разработчика UPnP)

Итак, у меня есть 2 вопроса:

  1. Является ли UPNP не очень распространенным я, или мне просто не повезло, или с помощью miniupnpc неправильно?
  2. Есть ли другие способы сделать равный-равному соединение UDP, который не требует внешнего сервера? (Так что не перфорирования)

Спасибо!

ответ

1
  1. Является UPNP не очень часто, или я просто не повезло, или с помощью miniupnpc неправильно?

Вы не можете доверять на случайный маршрутизатор для поддержки сопоставления портов UPnP IGD, и вы определенно не можете доверять на функции должны быть включены.

Есть ли другие способы, чтобы сделать соединение UDP равный-равному, который не требует внешнего сервера? (Так что не перфорирования)

Сервер третьей стороне не строго говоря требуется для пробивки отверстий в типичных домашних сетях, но вам нужен способ, чтобы конечные точки знали друг о друге внешний IP-адрес и порт: в этот момент обе машины могут просто начать отправлять сообщения друг другу: первые сообщения действительно будут удалены, но когда маршрутизатор видит, что внутренний IP уже отправил пакеты на внешний IP-адрес, он также позволит принимать входящий трафик (поскольку маршрутизатор видит их как ответы на t он пакеты из внутреннего IP, хотя они и не являются).

См. ICE для чего-то похожего на стандарт в этой области.

 Смежные вопросы

  • Нет связанных вопросов^_^