Сокет TCP и UDP в глобальной сети - PullRequest
3 голосов
/ 11 августа 2011

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

1 Ответ

3 голосов
/ 11 августа 2011

Если вы не получаете трафик, он, вероятно, просто блокируется брандмауэром.В этом случае речь идет не о переадресации, а об открытии порта.

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

Имейте в виду, хотя UDP-пакеты не гарантированно доставляются.

Является ли ваш клиент заNAT?Получают ли какие-либо пакеты, отправляемые клиентом, на сервер?Проблема в направлении от сервера к клиенту?

Если вы используете один и тот же номер порта для UDP и TCP, это не изменит ситуацию.Вы не можете использовать TCP-соединение, потому что это другой протокол.

Требования к трансляции сетевых адресов (NAT) для одноадресного UDP

http://en.wikipedia.org/wiki/UDP_hole_punching

...