Это немного сложно .... терпеть меня.Чтение только RFC TURN недостаточно, вам нужен контекст из RFC 5245 на ICE.
Следующий сценарий является базовым: 1) клиент A выделяет адрес ретранслятора 8.8.8.8: 43739, отправляет его клиенту B 2) клиент B отправляет пакет UDP на 8.8.8.8:43739 3) TURN-серверы упаковывают пакет в сообщение ошеломления, отправляют его клиенту A
Теперь, как вы говоритеобычно клиент B также выделяет свой собственный адрес ретранслятора и отправляет его A. Почему это не используется постоянно (или наполовину)?Приоритеты кандидатов равны в конце концов.Тем не менее, приоритет пары кандидатов , который определяет, какую пару выбрать, включает в себя фактор, который действует как прерыватель связи:
pair priority = 2^32*MIN(G,D) + 2*MAX(G,D) + (G>D?1:0)
Where G>D?1:0 is an expression whose value is 1 if G is greater than
D, and 0 otherwise.
Это означает пару, в которой находятся вызывающие абоненты (предполагая, что это контролирующий агент) Используемый адрес ретрансляции имеет более высокий приоритет, чем пара с адресом ретранслятора вызываемых абонентов.
Кроме того, в игре есть еще один кандидат для порта, который клиент B использует для отправки на порт 8.8.8.8:43739.Обычно это один из локальных кандидатов, и сервер TURN видит (и помещает в индикацию данных) публичный (post-nat) ip клиента B. На клиенте A это будет отображаться как удаленный кандидат srflx, которыйимеет более высокий приоритет, чем ретранслируемый кандидат, и поэтому будет использоваться.
Теперь, если B находится за симметричным NAT (я думаю ), сервер TURN увидит другой порт от клиента B, чемвсе, на что клиент А добавил разрешение.Обычно это означает, что сервер TURN отбросит пакет, и эта пара не будет работать.
Если клиент A не находится за симметричным NAT, базовый процесс будет повторяться в другом направлении.Немного менее приоритетно, но одинаково с точки зрения задержки, так что пользователи не заметят.
Если оба клиента (и теперь мы наконец-то подошли к делу, о котором вы спрашиваете) находятся за симметричным NAT, ни один не будетработа и пара реле-реле будет использоваться.Это довольно редко (вероятно, <1%), и влияние задержки, как правило, незначительно, даже если оба клиента находятся на разных серверах TURN. </p>