Мне нужно установить соединение между сервером и клиентами, которое может находиться за любым типом NAT. Для этого у меня есть выделенный хост в Интернете с чистым IP-адресом для размещения сервера STUN/TURN. Я не буду использовать WebRTC, я просто хочу использовать сервер STUN/TURN для обмена сообщениями между клиентами и сервером. После прочтения RFC, SO и т. Д. У меня остались некоторые вопросы:Уточнение STUN и TURN
- В каком случае используется STUN? По моему мнению, STUN используется только для Full-cone NAT. Во всех остальных случаях должен использоваться сервер TURN из-за ограничения хоста и/или порта. Это верно?
- Кажется, мне нужен сигнальный сервер для уведомления клиентов о адресе сервера и наоборот. Но как только клиент/сервер отправляет сообщение на сервер сигнализации, я знаю их внешний хост: порт, поэтому я позволяю каждой стороне знать другой хост: порт, каждая сторона может отправлять сообщения на этот сервер сигнализации, содержащий данные узла-хоста: порт , который сервер сигнализации может использовать для определения того, для какого сообщения это сообщение, и перенаправить его соответствующему партнеру. На первый взгляд эта логика кажется мне довольно прямой, и мой сигнальный сервер становится сервером TURN - это то, как реализуется сервер TURN? Но если это так, я не понимаю, зачем мне нужен сервер TURN, такой как «coturn», «reTurn» и т. Д.? Я знаю, что они реализуют ICE, но как этот ICE будет работать, если мой сервер сигнализации получил сообщение от конкретного хоста: порт однорангового узла, так что это единственный кандидат, который можно использовать для соединения с одноранговым узлом?
- В случае ограниченного NAT (порт, адрес или симметричный), как долго внешний (клиентский) порт клиента открыт на маршрутизаторе для приема дейтаграмм UDP? Я читал, что клиент TURN отправляет на сервер обновления сообщений, чтобы сохранить канал открытым, так ли клиент также предотвращает закрытие портов?
Благодарим за внимание. 1) В моем понимании, если используется STUN, тогда не используется реле, поэтому одноранговый узел подключается непосредственно к клиенту, когда он получает клиентский хост: порт, используя сервер сигнализации. Но как это возможно без реле, если у peer есть другой хост: порт, чем сервер STUN, к которому подключается клиент, поэтому в случае чего-либо, кроме Full-Cone NAT, этому прямому соединению от однорангового узла к клиенту будет отказано, так как только Full-Cone NAT позволяет любому хосту: подключить порт к прослушанному порту? 2) Не могли бы вы пояснить, почему я не буду надежно обнаруживать порт с помощью этого метода? – rightaway717