Я видел и читал много похожих вопросов и соответствующие статьи в Википедии (обход NAT, STUN, TURN, Перфорация отверстий TCP), но подавляющее количество информации на самом деле не помогает мне с моей очень простой проблемой:
Я пишу приложение P2P, и я хочу, чтобы два пользователя моего приложения за NAT могли подключаться друг к другу. Соединение должно быть надежным (сопоставимым с надежностью TCP), поэтому я не могу просто переключиться на UDP. Решение должно сегодня работать над общими системами без переконфигурации. Если это поможет, решение может включать подключаемую стороннюю сторону, если не требуется проксировать все данные (например, для получения IP-адресов внешних (WAN)).
Насколько я знаю, единственный вариант - использовать "надежную библиотеку UDP" + пробивка отверстий UDP. Есть ли для этого библиотека (C/С++)? Я нашел enet в вопросе , но он заботится только о первая половина решения.
Что-нибудь еще? Вещи, на которые я смотрел:
- Teredo tunneling - требует поддержки от операционной системы и/или конфигурации пользователя
- UPnP переадресация портов - UPnP отсутствует/включен везде
- Перфорация отверстий TCP кажется экспериментальной и работает только при определенных обстоятельствах.
- SCTP поддерживается даже меньше, чем IPv6. SCTP через UDP - это просто надежный UDP (см. Выше).
- RUDP - почти нет основной поддержки
- Из того, что я мог понять из STUN, STUNT, TURN и ICE, ни один из них не помог мне здесь.