Я пытаюсь реализовать P2P с пробивкой отверстий. Вот поток:
- Оба узла (P1, P2) отправят 1 пакет на сервер (S).
- Сервер(ы) отвечает обоим, сообщая другим IP:PORT
- P1 и P2 получают этот UDP-пакет, зная внешний/общедоступный IP-адрес другого: порт.
- P1, P2 начинают отправлять пакеты другим узлам с общедоступным IP:PORT.
- Как только одноранговые узлы получают пакет другого однорангового узла, я предполагаю, что дыра пробита и передаст этот сокет моему приложению.
Проверял на разных роутерах, вот результат:
- Когда P1 и P2 оба находятся в несимметричном NAT (полный/ограниченный конус), я не сталкиваюсь с какими-либо проблемами.
- Когда P1=несимметричный и P2=симметричный:
- -----маршрутизатор-1 (симметричный-NAT) + маршрутизатор-2 (несимметричный) = успех
- ---- маршрутизатор-3 (симметричный NAT) + маршрутизатор-2 (несимметричный) = *Ошибка*
До 4-го шага все в порядке. Но на 5-м шаге ни один узел не получает пакет другого узла. Я ожидал, что, по крайней мере, *'узел за несимметричным NAT' получит пакет другого.*
Кто-нибудь знает, что происходит?