Практическое прохождение NAT для надежных сетевых подключений

Я видел и читал много похожих вопросов, а также соответствующие статьи в Википедии ( NAT traversal , STUN , TURN , Пробивка отверстий TCP ), но подавляющее количество информации на самом деле не помогает мне с моей очень простой проблемой:

Я пишу приложение P2P и хочу, чтобы два пользователя моего приложения за NAT могли подключаться друг к другу. Соединение должно быть надежным (сопоставимым с надежностью TCP), поэтому я не могу просто переключиться на UDP. Решение должно работать в современных общих системах без перенастройки. Если это поможет, решение может включать в себя подключаемое стороннее устройство, если ему не нужно проксировать все данные (например, для получения внешних (WAN) IP-адресов одноранговых узлов).

Что касается Я знаю, что у меня единственный вариант - использовать "надежную UDP" библиотеку + UDP перфорация . Есть ли для этого библиотека (C / C ++)? Я нашел enet в вопросе, связанном с , но он заботится только о первой половине решения.

Что-нибудь еще? Вещи, на которые я смотрел:

  1. Туннелирование Teredo - требует поддержки со стороны операционной системы и / или конфигурации пользователя
  2. Перенаправление портов UPnP - UPnP присутствует / включен не везде
  3. Пробивка отверстий TCP кажется экспериментальный и работает только при определенных обстоятельствах
  4. SCTP даже меньше поддерживается, чем IPv6. SCTP поверх UDP - это просто фантастический надежный UDP (см. Выше)
  5. RUDP - почти нет основной поддержки
  6. Из того, что я мог понять о STUN, STUNT, TURN и ICE, ни один из них мне здесь не поможет.

14
задан Community 23 May 2017 в 10:29
поделиться