TCP и UDP — это всего лишь два примера реализации транспортного уровня. Оба они используют термин «порт», чтобы определить, какое приложение должно получать входящий пакет, но они могут по-разному маршрутизироваться/фильтроваться маршрутизаторами/коммутаторами/брандмауэрами/и т. д.
Так что ответ нет. У вас будут аналогичные проблемы с открытием портов. Просто кроме «TCP-порт xxx должен быть открыт», вы должны потребовать «UDP-порт xxx должен быть открыт».
В большинстве домашних сетей правила брандмауэра разрешают исходящие пакеты (запросы) на любой удаленный порт (например, на вашем сервере, где этот порт должен быть открыт). И когда такой пакет проходит через маршрутизатор - он создает временное правило, разрешающее ответы возвращаться на локальный порт, с которого запрашивается пакет.
Итак, нормальный сценарий таков:
- Пакет отправлен с домашнего компьютера с IP-адресом
5.5.5.5
. Допустим, у него есть исходный UDP-порт 55555
, исходный IP-адрес 5.5.5.5
и порт назначения 8888
.
- Пакет достигает домашнего маршрутизатора. Поскольку он идет изнутри - маршрутизатор разрешает ему пройти и создает правило, скажем, на 2 минуты, чтобы разрешить пакеты, направленные на
5.5.5.5
, на UDP-порт 55555
.
- Пакет достигает корпоративного маршрутизатора раньше вашего сервера. У него есть правило для передачи пакетов для порта
8888
, поэтому пакету разрешено идти.
- Ваш сервер получает пакет и обрабатывает его. В ответ он создает пакет для IP
5.5.5.5
и UDP порта 55555
.
- Корпоративный маршрутизатор разрешает отправку ответа.
- Домашний маршрутизатор позволяет ответу идти в соответствии с временным правилом.
- Ваш компьютер получает ответ.
Корпоративные компьютеры и маршрутизаторы часто более ограничены для обеспечения безопасности, поэтому вторая точка может ограничивать пакеты, если ваш пользователь (IP 5.5.5.5
) находится в корпоративной сети.
Это очень упрощенно, так как на самом деле почти всегда есть такие вещи, как NAT, и правила более сложные... Но в целом это дает представление о том, как это работает внутри.
person
Ivan Danilov
schedule
09.07.2011