Как игровые клиенты знают, что сервер работает в их локальной сети?


18

Во многих многопользовательских играх есть возможность играть по локальной сети. Мой вопрос, однако, как клиент узнает, где находится сервер в локальной сети?

Единственные способы, которыми я могу думать

  1. Отправлять трансляции по широковещательному адресу. Это имеет тот недостаток, что иногда его фильтруют маршрутизаторы или коммутаторы в разных сетевых средах.
  2. Попытайтесь подключиться к серверу на каждом IP в вашей подсети. Недостатком этого является медленный (особенно если сеть использует 10.XXX.XXX.XXX для своих IP-адресов) и мини-атака ddos, но она не будет фильтроваться.

Как игры делают это особенно в других сетевых средах?

Ответы:


32

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

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

Никто (насколько мне известно) не делает ваш вариант № 2, потому что это ухудшит производительность локальной сети (или займет много времени, если вы попытаетесь соединить попытки соединения).

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

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

Дополнительное примечание: в интернет-играх принято сначала обращаться к точечному серверу . Точечный сервер сообщает игре, по какому адресу он может найти метасервер, и сообщает, где можно найти серверы. Точечные серверы часто (хотя, конечно, не всегда) реализуются как простой веб-сервер и являются единственной частью этой системы с адресом, жестко закодированным в игре. Это позволяет разработчикам игр перемещать свой метасервер с одного компьютера на другой по мере необходимости, просто обновляя адрес, возвращаемый точечным сервером. Он также может быть использован для реализации простой формы распределения нагрузки или переключения областей, когда точечный сервер отправляет пользователей на разные мета-серверы в зависимости от нагрузки на сервер или географической близости.


2
+1 к вам, сэр, это также ответило на несколько вопросов, которые у меня были.
Рейн

2
+1, широковещательная рассылка - это путь, так как на самом деле это правильный способ сделать №2, хе-хе .. Для этого и нужна трансляция, связавшись с несколькими IP-адресами, чтобы узнать, что-нибудь слушает.
Джеймс

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

Несколько раз я сталкивался с корпоративными сетями, которые не поддерживают широковещательную рассылку, я обнаружил множество других проблем с маршрутизацией, которые обычно вызваны неисправным оборудованием (иногда исправляемым путем обновления прошивки маршрутизатора). Если широковещательная рассылка не работает в локальном сегменте локальной сети, это вряд ли будет преднамеренным.
Рэндольф Ричардсон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.