Как я могу обойти NAT / Firewall в соединении udp

я программирую приложение голосового чата, но проблема в том, что когда клиент использует соединение с брандмауэром маршрутизатора

я решил эту проблему с TCP-соединением, но с UDP-соединением я не знал, как я могу решить эту проблему

я пытаюсь сделать это

  1. клиент A отправляет (сервер) IP и имя пользователя
  2. клиент B отправляет на (сервер) ip и имя пользователя
  3. (сервер) отправить клиенту B клиент A информация — начать голосовой чат
  4. (сервер) отправить клиенту A информацию о клиенте B — начать голосовой чат

но эта работа однажды и много раз не работала, я не знаю почему.
любая помощь.

3

Решение

То, что вы пытаетесь, это пробивание UDP-дырок. Но немногие маршрутизаторы, которые имеют симметричный NAT, пробивать дыры очень сложно и противоречиво (когда это возможно). Читайте о различных NAT в Википедии, вы получите больше понимания.

3

Другие решения

Для прохождения NAT требуется внешний сервер «подбора», который возможен на всех НО-несимметричных маршрутизаторах и брандмауэрах. Проще говоря, эти «симметричные» маршрутизаторы изменяют исходящий / входящий порт ваших данных каждый раз, когда вы меняете либо IP-адрес, либо ПОРТ пункта назначения, что фактически сводит на нет «соответствие», которое пытается выполнить сервер.

Есть и другие «хитрые» способы сделать пробой, но им не хватает согласованности.

Я бы посоветовал вам прочитать о различиях типов NAT (Ассиметричный, Симметричный, Полный конус, Ограниченный конус, Порт ограниченный конус). Также убедитесь, что вы читаете о STUN, который позволяет вам определить тип NAT, за которым работает ваш клиент. Наконец, вы должны прочитать об UPnP, который является функцией, которую имеет большинство маршрутизаторов, и позволяет программам самостоятельно регистрироваться и открывать порты, без необходимости выполнять это вручную через интерфейс маршрутизатора.

3

По вопросам рекламы [email protected]