Комментарии 28
= не очень понятно, как все-таки предлагается установить р2р соединение между двумя клиентами за NAT (без ретранслятора). Ну знаете вы их внешние IP-адреса, дальше что? Внешние порты, которые будут назначены при NAT, заранее все равно неизвестны.
1. клиент отправляет пакет стану c целью «пробить дырку» в нате и узнать свой порт + ip
2. стан получает пакет, и отправляет реальный внешний порт + ip обратно.
3. клиент получает свои пробитые порт + ip (реальные) формирует ice кандидата и отправляет кандидата через сигналинг другому пиру
Более того, в больших NAT-ах и внешний IP также может выдаваться разный, из пула…
Если говорить о Linux — то да, нужны будут дополнительные костыли. Во всяких Cisco включается Full Cone NAT — и пакеты уже с любого IP на ваш внешний IP:Port (в варианте Port-Restricted) либо просто IP пробрасываются вам внутрь.
Не знаю какой у моего провайдера NAT но похоже что для всех UDP пакетов с одного порта он выдаёт один и тот-же внешний порт вне зависимости от адреса назначения. Более того. Это тот же порт который я задал в клиенте.
Попробовал сменить порт на более популярный. Результат тот же.
1) UPnP и NAT-PMP.
2) en.wikipedia.org/wiki/UDP_hole_punching
3) en.wikipedia.org/wiki/TCP_hole_punching
Почему?
С просмотром видео из интернета в браузере тоже раньше были проблемы но доработали и теперь это удобней скачивания или просмотра в отдельном плеере.
Думаю и эту технологию доработают до уровня когда ей приятно будет пользоваться.
А видео из торрентов или DC в браузере так же можно было бы пускать, если б сделали, например с начала воспроизведения последовательно шла загрузка с сервера или самого быстрого пира (с выделением P2P-клиентом определённой полосы пропускания, что бы просмотр не опережал загрузку), а с конца записи и в начало с P2P пиров. После встречи этих двух кусков, просмотр переключался на загруженное с P2P.
А где опыт использования? В заголовке обещали.
Обычное описание webrtc, которое есть на миллионе других сайтов. И при том не самое лучшее. Вот нафига оно нужно?
Тоже хочу поделиться своей имплементацией STUN, но уже на go:
gortc/stun (сам протокол, клиент с поддержкой RTO, хорошо покрыт тестами, включая end-to-end и fuzzing), gortc/turn (уже для TURN, влючая ChannelData), ну и собствено сервер: gortc/gortcd (поддержка STUN, TURN, e2e тесты через relayed webrtc).
А еще есть парсер RFC 4566 SDP.
Если TURN сервер будет на 443 порту и работать через TCP/TLS (на случай блока UDP), то должен подойти в качестве релея в таком случае.
Можно просто отдельный TURN сервер поставить, не обязательно же мультиплексировать на 443 порту.
Узнавать нужно будет STUN и TURN ChannelData.
Опыт использования WebRTC. Лекция Яндекса