Введение

Traversal Using Relays around NAT (TURN) — это протокол, помогающий преодолевать сетевые адресные преобразования (NAT) или брандмауэры для мультимедийных приложений. Он может использоваться с протоколом управления передачей (TCP) и протоколом пользовательских данных (UDP). Он наиболее эффективен для клиентов в сетях, находящихся за симметричными NAT-устройствами. TURN не предназначен для запуска серверов на известных портах в частной сети через NAT; он поддерживает соединение пользователя, находящегося за NAT, только с одним пиром, например, в телефонии. Схема URI TURN определена и описана в .

Введение

Перевод сетевых адресов (NAT) — механизм, служащий мерой для смягчения проблемы исчерпания адресного пространства IPv4 в процессе перехода к IPv6, — сопряжён с различными ограничениями. Наиболее серьёзным из этих ограничений является то, что NAT нарушает работу многих существующих IP-приложений и усложняет развёртывание новых. Разработаны рекомендации по созданию протоколов, "дружественных к NAT", но многие протоколы просто невозможно построить в соответствии с этими рекомендациями. Примерами таких протоколов являются мультимедийные приложения и файлообмен. Утилиты обхода NAT для сеансов (STUN) предоставляют один из способов прохождения приложения через NAT. STUN позволяет клиенту получить транспортный адрес (IP-адрес и порт), который может быть полезен для приёма пакетов от другого участника. Однако адреса, полученные с помощью STUN, могут быть недоступны для всех участников. Их работоспособность зависит от топологических условий сети. Следовательно, STUN сам по себе не может обеспечить полноценное решение для обхода NAT. Для полного решения требуется механизм, позволяющий клиенту получить транспортный адрес, с которого он сможет принимать медиаданные от любого участника, способного отправлять пакеты в общедоступный Интернет. Этого можно достичь только путём перенаправления данных через сервер, расположенный в общедоступном Интернете. Traversal Using Relays around NAT (TURN) — это протокол, позволяющий клиенту получать IP-адреса и порты от такого ретранслятора. Хотя TURN почти всегда обеспечивает подключение к клиенту, он требует значительных ресурсов от провайдера сервера TURN. Поэтому желательно использовать TURN только в крайнем случае, отдавая предпочтение другим механизмам (таким как STUN или прямое соединение), когда это возможно. Для этого можно использовать методологию установления интерактивного соединения (ICE) для определения оптимального способа установления соединения.

Протокол

Процесс начинается, когда клиентский компьютер пытается связаться с одноранговым компьютером для обмена данными, но не может этого сделать из-за того, что и клиент, и одноранговый компьютер находятся за своими NAT. Если STUN невозможен, поскольку один из NAT является симметричным (тип NAT, несовместимый с STUN), необходимо использовать TURN. Сначала клиент связывается с сервером TURN, отправляя запрос "Allocate". Этот запрос просит сервер TURN выделить ресурсы для клиента, чтобы он мог связаться с одноранговым компьютером. Если выделение возможно, сервер назначает адрес, который клиент будет использовать в качестве ретранслятора, и отправляет клиенту ответ "Allocation Successful", содержащий "выделенный ретранслируемый транспортный адрес", расположенный на сервере TURN. Затем клиент отправляет запрос CreatePermissions на сервер TURN для создания системы проверки разрешений для связи с одноранговым сервером. Иными словами, когда одноранговый компьютер наконец-то устанавливает связь и отправляет информацию обратно на сервер TURN для пересылки клиенту, сервер TURN использует разрешения для проверки действительности связи между одноранговым компьютером и сервером TURN. После создания разрешений у клиента есть два способа отправки данных: (1) использовать механизм Send или (2) зарезервировать канал с помощью запроса ChannelBind. Механизм Send проще, но имеет больший заголовок – 36 байт, что может значительно увеличить пропускную способность при использовании TURN для ретрансляции. Метод ChannelBind легче: заголовок всего 4 байта, но он требует резервирования канала, который необходимо периодически обновлять, среди прочего. Используя любой из методов – Send или связывание канала – сервер TURN получает данные от клиента и пересылает их одноранговому компьютеру с помощью UDP-датаграмм, в которых в качестве адреса источника указан "выделенный ретранслируемый транспортный адрес". Одноранговый компьютер получает данные и отвечает, также используя UDP-датаграмму в качестве транспортного протокола, отправляя ее на адрес ретрансляции на сервере TURN. Сервер TURN получает UDP-датаграмму от однорангового компьютера, проверяет разрешения и, если они действительны, пересылает ее клиенту. Этот процесс позволяет обойти даже симметричные NAT, поскольку и клиент, и одноранговый компьютер могут по крайней мере взаимодействовать с сервером TURN, который выделил IP-адрес ретранслятора для связи. TURN более надежен, чем STUN, поскольку помогает преодолевать больше типов NAT, но при этом TURN пересылает всю связь через сервер, что требует значительно большей пропускной способности сервера, чем STUN, который обычно только определяет общедоступный IP-адрес и передает информацию клиенту и одноранговому компьютеру для прямой связи. Поэтому протокол ICE предписывает использовать STUN в первую очередь, а TURN – только при работе с симметричными NAT или другими ситуациями, когда STUN не может быть использован.