Я пытаюсь понять, как работает WebRTC, и мне трудно понять роль STUN.
Из того, что я понимаю, читая о STUN на различных веб-страницах, таких как rfc5389 или просматривая презентацию Google 2013 года по WebRTC , единственное, что STUN, похоже, делает, это сообщает клиенту, какой у него публичный IP-адрес / порт.
Однако, глядя на то, как можно реализоватьсервер STUN предполагает, что они гораздо более вовлечены, и, кажется, включает в себя такие вещи, как поддержка возврата при отказе для UDP, TCP и TLS-TCP и подтверждение связи, когда клиент и сервер сообщают о том, что они ожидают от своего IP-адреса, и проверяютэто против того, что другая сторона говорит, что их IP-адрес.Например, в отдельных случаях проект stunserver *1000* jselbi содержит более 50 файлов C ++.
- Значит, STUN должен делать больше, чем просто сообщать об общедоступном IP-адресе / порте?
Кроме того, мне не имеет смысла, почему клиент WebRTC даженужно знать свой публичный IP-адрес.В видео презентации Google (во время 19:46) показывает двух пиров, которые хотят общаться друг с другом из-за NAT, и каждый пир также общается с сервером сигнализации.Эта схема показывает, что каждый сервер сигнализации не знает общедоступный IP-адрес / порт партнера.Но эта диаграмма должна быть неправильной: она показывает, что узел разговаривает напрямую с сервером сигнализации, но косвенно общается с сервером STUN через NAT.В действительности одноранговый узел будет также общаться с сервером сигнализации через NAT, и поэтому сервер сигнализации уже будет знать общедоступный IP-адрес / порт партнера.
Исходя из этого, возникают проблемы, с которыми у меня возникают проблемы.являются:
Любой запрос от клиента к серверу сигнализации будет включать публичный IP-адрес / порт этого клиента в заголовок IP запроса.То же самое верно, когда клиент общается с сервером STUN, поэтому сервер STUN может ответить публичным IP-адресом / портом ... Это верно?
Кажется,мне, что способ, которым эти два пира могут тогда говорить друг с другом, состоит в том, чтобы перехватить открытое соединение между одноранговым узлом и сервером STUN: узел открывает соединение с сервером STUN.Сервер STUN отвечает, указав, какой IP-адрес / порт был настроен для этого запроса.И затем этот IP-адрес / порт затем перенаправляется на удаленный одноранговый узел, где удаленный одноранговый узел начинает отправлять сообщения по соединению, которое было первоначально открыто для сервера STUN ... Это правильно?
... или я совершенно не понял, что происходит?