Как продолжается онлайн-игра после ухода хозяина?


12

Примечание: это вопрос о сети, а не об играх. Я использую StarCraft просто в качестве примера.

Игра StarCraft (не StarCraft 2) поддерживает онлайн-игру. Один человек принимает гостей, а другие присоединяются. Если хозяин уходит во время игры, игра может продолжаться бесконечно без хозяина. Как это работает?

Рассмотрим следующий сценарий:

  • Я размещаю 3 против 3. Обратите внимание, что для того, чтобы люди могли присоединиться, мой маршрутизатор должен быть настроен на перенаправление портов 6112, TCP и UDP (см. Поддержка Blizzard ).
  • Пять человек присоединяются. Все (включая меня) находятся за роутером. Я начинаю игру.
  • Через три минуты игры около двадцати фанатиков вливаются в мою базу. Никто не помогает мне.
  • Моя база уничтожена, поэтому я ухожу (игра не дает вам выбора).
  • Игра продолжается без хозяина (у хозяев осталось два игрока).

Как оставшиеся пять клиентов (которым не нужно пересылать 6112) остаются подключенными?

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

Кто-то, принимающий игру, является сервером, а те, кто присоединяется к ней, являются клиентами. Легко увидеть, как клиенты могут начать общаться с сервером. Чего я не понимаю: как клиенты начинают общаться друг с другом, не проходя через сервер? Разрешает ли интернет-протокол серверу устанавливать соединения между клиентами?

Вполне возможно, что в случае StarCraft игровой трафик проходит через серверы Battle.net. StarCraft поддерживает соединение с Battle.net во время игр (для сообщений от друзей и т. Д.). Однако я сомневаюсь, что игровой трафик проходит через него, потому что, если он это сделал, зачем хостам нужно переносить вперед 6112?

Мой вопрос: может ли сервер с несколькими подключенными к нему клиентами инициировать соединения между ними?


2
Мне нравится ссылка на Starcraft здесь ...
Джон

I host a 3 versus 3. Note that, for people to be able to join, my router has to be configured to port forward 6112, TCP and UDP (see Blizzard Support).Очевидно, это необходимо для запуска игры, чтобы пользователи могли найти вас, но не обязательно оставаться на связи.
Джеффо

@Jeff O: серверы Battle.net ведут список доступных игр. Однако, если хост не перенаправляет порт, он просто зависнет, когда другие попытаются присоединиться (я думаю).
Джои Адамс

Ответы:


20

Это звучит как UDP дырокол

Пусть A и B будут двумя хостами, каждый в своей собственной частной сети; N1 и N2 - два устройства NAT; S является общедоступным сервером с общеизвестным глобально достижимым IP-адресом.

  1. A и B начинают UDP-диалог с S; устройства NAT N1 и N2 создают состояния трансляции UDP и назначают временные номера внешних портов
  2. S передает эти номера портов обратно на A и B
  3. A и B связываются с устройствами NAT друг друга непосредственно на транслированных портах; устройства NAT используют ранее созданные состояния трансляции и отправляют пакеты A и B

В этом примере вы - S. Ваши оппоненты - A и B. Когда вас выгнали из игры, ваши оппоненты могут продолжать играть, потому что они договорились о соединении друг с другом, когда они впервые подключились к вам.


Ничего себе +1, я понятия не имел, что можно использовать NAT таким образом
TheLQ

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

2

Если две программы хотят общаться друг с другом, одна не обязательно должна быть сервером, а другая - клиентом. Это одна из моделей сетей, но не единственная. Другая очень распространенная модель - это модель одноранговой сети , где каждый является клиентом и сервером, и каждый может общаться с кем угодно. Я не слишком много знаю о многопользовательских сетевых технологиях Starcraft, но думаю, что это, скорее всего, выполнит то, что вы описали, используя одноранговую модель.


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