Является ли сервер STUN абсолютно необходимым для webrtc, когда у меня есть сервер сигнализации на основе socket.io?

Мое понимание сервера STUN для webrtc заключается в том, что когда клиенты находятся за NAT (в большинстве случаев, если не все), сервер STUN помогает клиентам webrtc идентифицировать их адреса и порты. И я также прочитал статью, в которой говорится, что для клиентов webrtc необходим сервер сигнализации. Сервер сигнализации может быть веб-сервером, socket.io или даже отправлять по электронной почте URL-адрес. Мой первый вопрос: STUN-сервер сервера сигнализации?

На самом деле теперь я создал очень простой сервис на основе socket.io, который передает описания сеансов клиентов всем другим клиентам. Поэтому я считаю, что сервер на основе socket.io должен обладать достаточными знаниями о адресах клиентов и информации о портах. Если это так, почему мы беспокоимся о том, чтобы иметь еще один STUN-сервер?

Ответ 1

Сервер STUN НЕ сервер сигнализации.

Цель сервера сигнализации - передавать информацию между одноранговыми узлами при запуске сеанса (как они могут отправлять предложение, не зная, к кому отправить?). Эта информация включает в себя SDP, созданные на предложениях и ответах, а также любые Ice Candidates, созданные любой из сторон.

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

СМИ не могут магически проходить через NAT или брандмауэр, потому что обе стороны не имеют прямого доступа друг к другу (например, если бы они были в одной локальной сети).

Короче говоря, сервер STUN необходим в большинстве случаев, когда обе стороны не находятся в одной сети (чтобы получить действительные кандидаты на соединение для одноранговой медиапотоки), и сервер сигнализации ВСЕГДА нужен (независимо от того, находятся в разных сетях или нет), так что может возникнуть согласование и соединение. Хорошее объяснение процесса подключения и потоковой передачи

Ответ 2

STUN используется для реализации протокола ICE, который пытается найти рабочий сетевой путь между двумя клиентами. ICE также будет использовать серверы ретрансляции TURN (если они настроены в RTCPeerConnection) для случаев, когда два клиента (из-за ограничений NAT/Firewall) не могут создавать прямое одноранговое соединение.

Серверы STUN используются для идентификации внешнего адреса, используемого компьютером в Интернете (внешний адрес NAT), и для попытки настроить сопоставление портов, которые могут использоваться одноранговым узлом (если NAT не является "симметричным" ") - обращение к серверу STUN сообщит вам внешний IP-адрес и порт, чтобы попытаться использовать в ICE. Это кандидаты ICE, включенные в SDP или в сообщения ICIC.

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

Ответ 3

NAT (Трансформация сетевых адресов) используется для перевода "Private IP", который действителен только в локальной сети в "Public IP" , который действителен в WAN. Проблема в том, что "Public IP" доступен только снаружи, поэтому нам нужен сервер STUN или TURN для отправки вам "Public IP" . Этот процесс позволяет одноранговому узлу WebRTC получить общедоступный адрес для себя, а затем передать его другому одноранговому узлу через механизм сигнализации

Сервер STUN используется для получения внешнего сетевого адреса. Серверы TURN используются для ретрансляции трафика, если сбой прямого (однорангового) соединения. для получения дополнительной информации вы также можете обратиться по ссылке ниже: https://www.html5rocks.com/en/tutorials/webrtc/infrastructure/#what-is-signaling