STUN, TURN, ICE: три мушкетера голосовых коммуникаций

Бытует мнение, что слова, вынесенные в начало заголовка — это одно и то же (подобно тому, как в массовом сознании сливаются воедино SIP и VoIP, софтфон и дайлер). Это, однако, не так: STUN, TURN и ICE — это разные протоколы, решающие одну и ту же проблему маршрутизации устройств за сетевыми экранами и NAT (Network Address Translation). Выбор подходящего протокола зависит от настроек вашей сети, требований безопасности и других факторов.

Уделим же внимание каждому.

STUN

Технология STUN (Session Traversal Utilities for NAT) — это клиент-серверный протокол, который позволяет приложениям обнаруживать наличие и тип межсетевых экранов и NAT. STUN-клиенты отправляют запросы на STUN-сервер и получают адрес для отправки голосовых пакетов другой стороне диалога.

Подробное описание STUN дается в RFC 3489, RFC 8489 и RFC 5780. Здесь же мы отметим лишь главное: по сути, это механизм определения правильных адресов для передачи голосовых данных, если они находятся в разных сетях с технологией NAT. Это решает проблемы со связью, которые могут проявляться как невозможность регистрации софтфона на АТС, односторонняя слышимость, сброс звонков и отсутствие входящих звонков.

При этом STUN-сервер должен находиться за пределами сетей с софтфоном и АТС, но это возможно не всегда. Если какая-либо из сторон находится за симметричным NAT, то протокол STUN неприменим. В этом случае на сцену выходит TURN.

TURN

Протокол TURN (Traversal Using Relays around NAT, детальное описание приводится в RFC 8656) помогает устройствам взаимодействовать за симметричным NAT, работая через посредника, в качестве которого выступает TURN-сервер. Можно говорить, что TURN дополняет STUN, и часто STUN-серверы также являются одновременно и TURN серверами.

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

Чтобы данные передавались оптимальным образом, используется протокол ICE.

ICE

ICE (Interactive Connectivity Establishment; описан в RFC 8445, а его применение в SIP — в RFC 5768) — дополнение к STUN и TURN. Его основное предназначение заключается в автоматическом определении способа подключения:

  • прежде всего, он пытается установить прямое подключение между устройствами;
  • если попытка не удалась, то ICE пробует установить соединение через STUN;
  • если и это невозможно, то используется TURN.

У ICE есть несомненный плюс: простота — пользователю не нужно вникать в тонкости настроек NAT. Но есть и минус: соединение устанавливается дольше, так как проверяются все возможные способы подключения.

Софтфон, файрвол и DNS

Уверены, что у читателя уже возникли вопросы — обязательно ли настраивать свой STUN-сервер для звонков через софтфон? Если да, то как настроить STUN и ICE в Softphone.Pro? Что насчет обхода файрвола? Какие записи должны быть в DNS?

Ответы вы найдете в большой статье в нашей базе знаний — STUN, TURN, ICE в Softphone.Pro. Там и про DNS, и про Linux, и про установку собственного STUN сервера (на примере Ubuntu Server 24.04 LTS).

Enjoy!

ТАКЖЕ ПО ТЕМЕ

Помощь STUN, TURN, ICE в Softphone.Pro

Блог Плохая слышимость и шумы на линии: как быстро найти проблемные звонки

Блог VoIP vs SIP, звонилки VS софтфоны: сходства и различия

Блог Занесите в протокол: “sip:”, “tel:”, “callto:”

Блог Как продолжать принимать звонки, если софтфон для Android закрыт или работает в фоновом режиме


Последние статьи