UDP, NAT и настройка "соединений",

Я знаю, что слово "соединение" на самом деле не подходит, когда речь идет о UDP, но...

Как сервер (тот, с известным IP) получает свои UDP-пакеты через Интернет для клиента, который находится за NAT?

Например: скажем, клиент подключается и аутентифицируется на сервере, используя некоторые сообщения через TCP. На этом этапе сервер готов начать передачу данных клиенту через UDP, но как сервер знает, где обращаться к UDP-пакетам, чтобы они могли найти свой путь через NAT-маршрутизаторы к клиенту?

Если клиентский кулак отправляет сообщение "Я готов к потоковой передаче" по UDP, будут ли маршрутизаторы NAT поддерживать открытый порт, чтобы сервер мог отвечать потоком данных UDP?

Или я отключаюсь здесь?

Ответ 1

Как правило, NAT перед клиентом на уровне TCP сможет определить, что соединение в UDP было создано. Сказав это, NAT на стороне клиента должен быть настроен на прием пакетов UDP из порта сервера SRC, а затем перенаправление их на внутренний IP-адрес назначения (клиент). Важно помнить, является ли NAT, кто является вызывающим и кто является вызываемым. NAT отличаются реализацией и возможностями, поэтому универсальное простое в использовании решение, вероятно, может быть реализовано в зависимости от ваших потребностей.

Вы считаете правильным, полагая, что в вашем случае клиент не сможет получить поток UDP в информации. В вашем случае ваш клиент должен будет отправить свой WAN IP на ваш сервер, чтобы инициировать соединение UDP. Поиск ваших клиентов WAN IP может быть сложным, но есть веб-сайты, которые помогут вам определить ваш IP-адрес WAN, вернув его на текстовую страницу.

Если соединение UDP создается после подключения TCP сервером, открывающим сокет для клиента к известному порту UDP, то UPnP, возможно, стоит заглянуть в него, позволит вам автоматически настроить ваш порт на ваш NAT, это только в том случае, если ваш NAT поддерживает UPnP, как в случае с DSL-маршрутизаторами.

Работа-раунд будет заключаться в том, чтобы клиент открывал на сервер как сокеты TCP, так и UDP. Поскольку клиент за NAT инициировал соединение, состояния соединений TCP и UDP будут добавлены в таблицу соединений NAT.

Ответ 2

Игнорируя предоставление известного транслятора порта (т.е. данные на этом порту идут по этому адресу) на вашем маршрутизаторе (предоставляя NAT), вы можете использовать UDP Отверстие отверстий.

Я предполагаю, что вы не говорите о многоадресной рассылке, в которой каждый партнер присоединяется к группе и объявляет об этом заинтересованным сторонам (в этом случае маршрутизатор), который затем может выполнить соответствующую маршрутизацию. Хотя это обычно используется для эффективного маршрутизации трафика на несколько хостов, механизм маршрутизации по группам будет работать, поскольку вы описываете выше.

Ответ 3

Если вы говорите о потоковых протоколах, таких как SIP или RTSP, то способ, которым он работает, заключается в том, что UDP-порт, который клиент хочет отправить серверу, указан в запросе настройки вызова.

Сервер отправит на этот порт, и трафик может или не может быть передан клиенту в зависимости от того, перевел ли NAT порт выбора порта на другой номер или нет.

Когда сервер получает от клиента первый пакет потокового UDP, и если он находится на другом порту, то тот, который он отправляет, затем переключается на него. Это позволяет UDP с сервера проходить через NAT, поскольку клиент уже создал сопоставление NAT, отправив серверу.