Термин
NAT (Network Address Translation)
Функция роутера, позволяющая нескольким частным устройствам использовать один публичный IPv4-адрес. Именно поэтому WebRTC вынужден применять STUN, TURN и ICE для установления прямых соединений между участниками.
NAT обеспечивает доступ в интернет для домашней или офисной сети, состоящей из десятков устройств, через один публичный IPv4-адрес. Маршрутизатор заменяет исходный IP-адрес и порт исходящих пакетов на свой публичный адрес и сохраняет соответствие в таблице; входящие ответы преобразуются обратно. Для HTTP и других протоколов, инициируемых клиентом, NAT остаётся незаметным: соединение всегда начинается изнутри сети, и к моменту получения ответа соответствующее соответствие уже существует.
Для peer-to-peer-стриминга NAT – главная проблема. WebRTC и другие UDP-протоколы стремятся к прямому обмену данными между двумя конечными точками, но ни одна из сторон не может инициировать соединение с другой, поскольку обе находятся за NAT. STUN определяет публичный адрес каждой стороны, запрашивая информацию у внешнего сервера. ICE координирует обмен кандидатами адресов и попытки установить прямое соединение. TURN предоставляет резервный ретрансляционный канал, когда прямое соединение не удаётся – обычно 10–20 % WebRTC-сессий в продакшене используют именно его. RFC 8445 (июль 2018) стандартизировал этот процесс под названием ICE.
NAT бывает нескольких типов: full cone (наиболее разрешающий), restricted cone, port-restricted cone и symmetric (наиболее ограничивающий). Symmetric NAT – типичен для корпоративных и сотовых 4G/5G сетей – назначает разный внешний порт для каждого назначения, что делает невозможным проброс соединений (hole punching) даже через STUN и вынуждает использовать TURN. При эксплуатации WebRTC-сервиса необходимо закладывать трафик через TURN на долю сессий, которым не удалось установить прямое соединение.
Считаете параметры для своего продукта?
Поможем собрать энкодер-леддер и посчитать стоимость доставки – до старта разработки.