Ярлык UDP NAT Traversal (сквозной)
Большая часть информации, касающейся UDP NAT Traversal, включает промежуточный сервер для передачи общих конечных точек обоим клиентам. Можно ли сократить это, если публичные конечные точки предварительно настроены для клиентов?
Могут ли два клиента за NAT начать отправку трафика UDP на общедоступный IP-адрес друг друга: порт, чтобы пробить дыру? Требуется ли промежуточное звено для чего-либо, кроме сообщения общедоступных конечных точек?
1 ответ
Я не могу говорить с полномочиями (или предоставлять источники), но из того, что я собрал в прошлом месяце, работая с протоколами STUN и TURN:
Некоторый фон
Есть много способов для NAT назначить порты (см. Ниже). NAT с полным конусом - это взаимно-однозначное сопоставление, поэтому, когда NAT сопоставляет порт, любой внешний узел может отправлять пакеты на частный узел, используя то же сопоставление. Однако, например, если тип NAT является симметричным, пакеты для разных внешних IP-адресов будут иметь разные сопоставления портов.
С определенными типами NAT (например, полный конус) можно использовать сервер STUN для определения сопоставления портов NAT. Этот STUN-сервер является популярным примером промежуточного сервера, который вы упомянули. Некоторые более ограниченные типы NAT (например, симметричные) делают невозможным использование STUN-сервера, а прямые одноранговые соединения невозможны. Это связано с тем, что сервер STUN предполагает, что сопоставления портов NAT не зависят от внешнего IP-адреса, но симметричный NAT назначает разные сопоставления портов для разных внешних IP-адресов.
Можем ли мы удалить промежуточный сервер?
Алгоритм преобразования конкретных адресов (как маршрутизатор отображает номера портов) зависит от конкретного маршрутизатора (мои предположения). Некоторые маршрутизаторы используют произвольные назначения портов, что делает невозможным для клиентов заранее устанавливать соединения без промежуточного общедоступного сервера для выполнения этого определения (STUN).
В общем, нет, удалить промежуточный сервер невозможно. Если у вас нет внутренних знаний о том, как работает NAT (это может зависеть от конкретной модели маршрутизатора), необходимо использовать промежуточный сервер.