Действительно ли необходимы серверы STUN? - PullRequest
0 голосов
/ 29 сентября 2019

В процессе сигнализации WebRTC я должен найти свой публичный IP-адрес с моим портом, выполнив запрос к серверу STUN.Но действительно ли он должен быть таким сложным?

Не могу ли я просто отправить запрос маршрутизатору моей подсети и получить его IP-адрес и порт, который он открыл для меня?Или, что еще лучше, я храню свой публичный адрес на своем компьютере, и маршрутизатор уведомляет меня о каждом изменении.Браузер предоставит API для прямого получения этого публичного адреса.Нет необходимости использовать сервер STUN.Почему бы нам не сделать это вместо этого?

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 30 сентября 2019

Это все замечательные вопросы.

Не могу ли я просто отправить запрос маршрутизатору моей подсети и получить его IP-адрес и порт, который он открыл для меня?

Существует старый протокол под названием uPnP , который будет динамически открывать сопоставление портов для вас - при условии, что маршрутизатор его поддерживает.Многие роутеры использовали его для поддержки.Не уверен, насколько он сейчас стандартен.

Даже если маршрутизаторы были интеллектуальными и был установлен стандартный механизм сигнализации, STUN (или еще что-то эквивалентное для STUN все еще необходимо) для следующего сценария.

Carrier NAT - это когда ваш провайдер использует общий IP-адрес для нескольких маршрутизаторов.То есть общедоступный IP-адрес вашего маршрутизатора, настроенный провайдером при запуске, на самом деле является просто другим частным IP-адресом.Вверх по течению, есть «больший маршрутизатор», который делится публичным IPv4-адресом с несколькими другими клиентами.То есть ваш компьютер может подумать, что его IP-адрес - 192.16.1.2, а маршрутизатор сообщает, что его собственный IP-адрес - 10.0.0.2.А фактический публичный IP-адрес, 1.2.3.4, передается другим клиентам.STUN решает эту проблему, потому что исходящий пакет на общедоступный сервер STUN будет проходить через оба NAT, создавая сопоставления портов на этом пути.

Или, что еще лучше, я храню свой публичный адрес непосредственно на своем компьютере иМаршрутизатор уведомляет меня, когда он меняется

Поскольку установление эффективного соединения P2P / WebRTC - это больше, чем знание вашего публичного IP-адреса.Также необходимо знать, какой «порт» использовать.Хотя большинство маршрутизаторов будут пытаться сохранить локальный порт сокета, который клиентский ПК использует в сопоставлении (например, 10.0.0.2:9876 сопоставляется с 1.2.3.4:9876).Это не всегда так - другой узел может использовать порт 9876 в вашей сети, и / или многие NAT просто выбирают произвольно доступный порт для сопоставления.В конце дня вы должны сообщить другой стороне вашего соединения P2P / WebRTC «какой IP» и «какой порт» использовать.

Браузер выдаст API для полученияэтот публичный адрес напрямую.

Существует множество сайтов, таких как whatismyipaddress.com, которые сообщают вам ваш IP-адрес.Но если задействован прокси-сервер HTTP (явно настроенный на ПК или развернутый в сети в режиме без вывода сообщений), веб-служба будет видеть только IP-адрес прокси.Далее HTTP (S) - это протокол на основе TCP.STUN и WebRTC основаны на UDP.

...