Я читал некоторые документы о прохождении через WebRTC. Я вижу, что если один из партнеров находится за симметричным NAT, то необходимо использовать сервер TURN.
Мне интересно, почему протокол не должен разрешать обход, если хотя бы один из клиентов имеет общедоступный IP-адрес или асимметричный NAT?
Из того, что я читаю, проблема заключается в установлении соединения между одноранговым узлом и одноранговым узлом с симметричным NAT. Тогда не может ли клиент за симметричным nat подключиться к другому клиенту? Если совместное использование одного и того же потока UDP для двунаправленного мультимедиа невозможно / разрешено, то почему бы одноранговому узлу за симметричным NAT не создать 2 или более соединений, столько, сколько необходимо для всех потоков мультимедиа?
Проблема с WebRTC заключается не в том, что пакеты достигают или не достигают места назначения, а в том, что если не используются методы обхода, данные в полезных нагрузках IP-пакетов неверны. Данные SDP, например, имеют поля, которые включают IP-адреса и порты, которые действительны только в локальном контексте, то есть в локальной сети за NAT. Устройства NAT могут изменять заголовки IP, но, как правило, они не могут изменять полезную нагрузку протоколов приложений.
Вот почему WebRTC поддерживает методы обхода NAT по стандартным протоколам (в их числе STUN, TURN и ICE). Вы упомянули симметричный NAT. Когда вы используете этот тип NAT, STUN не работает, и у вас должен быть сервер TURN.