Термин

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 на долю сессий, которым не удалось установить прямое соединение.

Считаете параметры для своего продукта?

Поможем собрать энкодер-леддер и посчитать стоимость доставки – до старта разработки.