UDP-клиент — открытые порты?

Так что сейчас я использую только TCP для своих клиентов - они подключаются к серверу, открывают сокет и свободно получают пакеты. Но что, если я решу использовать в своей игре еще и UDP? Придется ли им открывать порты? Например, если они используют обычный WiFi, могу ли я отправить клиенту UDP без проблем с открытием портов?

Спасибо.


person Eli    schedule 09.07.2011    source источник


Ответы (1)


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

Так что ответ нет. У вас будут аналогичные проблемы с открытием портов. Просто кроме «TCP-порт xxx должен быть открыт», вы должны потребовать «UDP-порт xxx должен быть открыт».

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

Итак, нормальный сценарий таков:

  1. Пакет отправлен с домашнего компьютера с IP-адресом 5.5.5.5. Допустим, у него есть исходный UDP-порт 55555, исходный IP-адрес 5.5.5.5 и порт назначения 8888.
  2. Пакет достигает домашнего маршрутизатора. Поскольку он идет изнутри - маршрутизатор разрешает ему пройти и создает правило, скажем, на 2 минуты, чтобы разрешить пакеты, направленные на 5.5.5.5, на UDP-порт 55555.
  3. Пакет достигает корпоративного маршрутизатора раньше вашего сервера. У него есть правило для передачи пакетов для порта 8888, поэтому пакету разрешено идти.
  4. Ваш сервер получает пакет и обрабатывает его. В ответ он создает пакет для IP 5.5.5.5 и UDP порта 55555.
  5. Корпоративный маршрутизатор разрешает отправку ответа.
  6. Домашний маршрутизатор позволяет ответу идти в соответствии с временным правилом.
  7. Ваш компьютер получает ответ.

Корпоративные компьютеры и маршрутизаторы часто более ограничены для обеспечения безопасности, поэтому вторая точка может ограничивать пакеты, если ваш пользователь (IP 5.5.5.5) находится в корпоративной сети.

Это очень упрощенно, так как на самом деле почти всегда есть такие вещи, как NAT, и правила более сложные... Но в целом это дает представление о том, как это работает внутри.

person Ivan Danilov    schedule 09.07.2011
comment
Так что, если у меня будут проблемы с UDP-портом, те же проблемы будут и с TCP? Так что на самом деле для меня это не имеет значения, поэтому я могу добавить UDP... Но большинство пользователей используют брандмауэр маршрутизатора? Потому что этот клиент является игровым клиентом. iOS-приложение. Я не хочу, чтобы любой пользователь, который захочет играть в игру, должен был открывать порты. - person Eli; 09.07.2011
comment
@Eli - перечитайте этот ответ, а затем перечитайте его снова, пока вы не поймете, что он говорит, или у вас не возникнет конкретный вопрос по этому поводу. Вы только что переформулировали ответ Ивана в форме вопроса, который заставляет меня думать, что вы не уделили ему достаточно внимания. - person msw; 09.07.2011
comment
Смотрите мое обновление ответа. Большую часть времени открывать порты должен только администратор вашего игрового сервера. И да, большинство пользователей используют брандмауэры маршрутизатора. Это просто правило по умолчанию даже на самых простых домашних маршрутизаторах - разрешать исходящие пакеты и блокировать входящие, кроме тех, которые пришли в ответ на предыдущий исходящий пакет. - person Ivan Danilov; 09.07.2011
comment
@msw Я обновил свой ответ сразу после того, как Эли опубликовал свой комментарий. Так что нормально :) - person Ivan Danilov; 09.07.2011
comment
ОК - значит, я понял. Просто проверяю - у большинства пользователей не будет проблем с открытием портов, верно? - person Eli; 09.07.2011
comment
Если они общаются с центральным сервером - нет, не будут. Если они захотят напрямую общаться друг с другом вообще без центрального сервера - у них будут проблемы. - person Ivan Danilov; 09.07.2011
comment
@IvanDanilov Это было действительно полезно, меня это всегда смущало. Можете ли вы порекомендовать мне какую-нибудь книгу, в которой более подробно объясняются эти основы? - person bubakazouba; 18.03.2015
comment
@ user74670 Я бы порекомендовал курс Cisco CCNA и рекомендуемые вместе с ним книги. Это дает достаточно знаний, чтобы понять большинство проблем в домашней или небольшой офисной сети. - person Ivan Danilov; 18.03.2015