Использование сервера TURN для одноранговой связи

Я очень плохо знаком с TURN, и я хочу создать экспериментальное приложение, для которого требуется соединение с сервером TURN для связи с UDP.

Я уже использовал дырокол UDP и уже знаком с предметом. Также я знаю о типах NAT и UPnP для сопоставления портов.

Чтобы решить сопоставление портов в симметричных и ограниченных портах NAT с маршрутизаторами без возможности UPnP, я должен связаться с сервером TURN и отправлять через него UDP-пакеты. Но я понятия не имею, как взаимодействовать с сервером TURN и как с ним работать в C# programming.

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

Благодарю.

2 ответа

Решение

Я могу ответить о том, как использовать TURN для завершения ретрансляции вызова. Но чтобы знать, как формировать сообщения для TURN, вам нужно прочитать RFC.

Как работает TURN

TURN необходим, потому что невозможно обойти фильтрацию некоторых NAT и установить прямое соединение с хостом. Поскольку TURN находится на общедоступном IP-адресе, любой может подключиться к нему.

Таким образом, хосты с симметричным NAT могут отправлять запрос на выделение сервера TURN, а сервер TURN выделяет порт для хоста. Теперь у хоста будет информация IP другой стороны. И он отправит еще один запрос в TURN с указанием информации IP другого хоста, и пакеты от этого другого хоста в выделенном порту будут перенаправлены на хост за симметричным NAT. И пакет от хоста за симметричным NAT будет перенаправлен на другой хост. Таким образом, они создают соединение реле.

Вам действительно нужно прочитать RFC для TURN, чтобы узнать это более подробно. Все, что вам нужно, там.

@tahili Я вижу, это старый пост, но я хочу задать вам вопрос. Если сервер Turn может достигнуть рефлексивного адреса однорангового сервера, почему клиент не может просто отправить пакеты напрямую на рефлексивный адрес однорангового узла. Если клиент не может отправить данные одноранговому узлу напрямую из-за проблем с отображением, как сервер поворотов может отправить обратный адрес udp на одноранговый сервер. Имейте в виду, что одноранговый узел еще не связался с сервером поворотов, пока он не "адрес ретранслятора клиента", поэтому не существует сопоставления между сервером поворота (адрес реле клиента) и одноранговым узлом. Знания одного рефлексивного адреса сверстников недостаточно. В конце концов, мы можем просто отправить данные напрямую к пиру.

Предполагая, что peer отстает от NAT, а также.

Другие вопросы по тегам