Сокет TCP и UDP в глобальной сети
Я пытаюсь создать сервер и клиент, который использует как TCP, так и UDP. Сервер очень хорошо работает в настройках локальной сети, но сообщения UDP не принимаются при передаче по глобальной сети. Я полагаю, что это потому, что сокет UDP, используемый для отправки данных, не остается в таблицах NAT достаточно долго, чтобы вернуть любую информацию. Есть ли способ заставить порт UDP оставаться открытым в маршрутизаторе (без переадресации портов) или использовать тот же порт для UDP, что и уже подключенное TCP-соединение? Заранее спасибо.
1 ответ
Если вы не получаете трафик, он, вероятно, просто заблокирован брандмауэром. В данном случае речь идет не о переадресации, а об открытии порта.
Большинство (если не все) устройства NAT/Firewall пропускают трафик UDP в обоих направлениях, когда дыра пробивается через NAT. То есть, если мой ноутбук, находящийся за NAT / межсетевым экраном, отправит UDP-пакет в Интернет, мой NAT / межсетевой экран позволит передавать трафик UDP на исходящий номер порта через. Я много работаю с UDP, и мой опыт показывает, что это правило и очень мало исключений.
Имейте в виду, что UDP-пакеты не гарантированно доставляются.
Ваш клиент за NAT? Получают ли какие-либо пакеты, отправленные клиентом, на сервер? Проблема в направлении сервера к клиенту?
Если вы используете один и тот же номер порта для UDP и TCP, это не изменит ситуацию. Вы не можете использовать TCP-соединение, потому что это другой протокол.
Требования к поведению трансляции сетевых адресов (NAT) для одноадресного UDP