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 закрыт или работает в фоновом режиме