Як продовжується онлайн-гра після відходу господаря?


12

Примітка. Це питання щодо мереж, а не ігор. Я використовую StarCraft лише як приклад.

Гра StarCraft (не StarCraft 2) підтримує онлайн-гру. Одна людина приймає, а інші приєднуються. Якщо господар відходить під час гри, гра може тривати нескінченно без господаря. Як це працює?

Розглянемо наступний сценарій:

  • Я розміщую 3 проти 3. Зверніть увагу, що для того, щоб люди могли приєднатися, мій маршрутизатор повинен бути налаштований для пересилання вперед 6112, TCP та UDP (див. Підтримка Blizzard ).
  • П’ятеро людей приєднуються. Усі (включаючи мене) стоять за маршрутизатором. Я починаю гру.
  • Через три хвилини гри в мою базу вилилося близько двадцяти завзятих. Ніхто мені не допомагає.
  • Моя база ліквідована, тому я залишаю (гра не дає тобі вибору).
  • Гра продовжується без господаря (у господарів залишилось два гравці).

Як залишаються підключені решта п'ятьох клієнтів (яким не потрібно було переадресувати 6112)?

Якщо я правильно розумію: якщо дві програми хочуть розмовляти між собою, одна з них має бути "сервером" і прослуховувати з'єднання через порт, а інша повинна бути "клієнтом" і ініціювати запит на з'єднання з цього приводу. порт. Вони не можуть просто почати надсилати пакети один одному (і я навіть не знаю, як би вони були, якщо обидва стоять за маршрутизаторами).

Хтось, хто розміщує гру, є сервером, а ті, хто приєднується до неї, - це клієнти. Неважко зрозуміти, як клієнти можуть почати спілкуватися з сервером. Що я не отримую: це як клієнти починають спілкуватися один з одним, не проходячи через сервер? Чи дозволяє Інтернет-протокол серверу ініціювати з'єднання між клієнтами?

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

Моє запитання: чи може сервер із кількома клієнтами, підключеними до нього, ініціювати з'єднання між ними?


2
Мені тут подобається посилання на Starcraft ...
Jon

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).Мабуть, це потрібно для початку гри, щоб користувачі могли вас знайти, але не потрібно залишатися на зв’язку.
JeffO

@Jeff O: Сервери Battle.net підтримують список доступних ігор. Однак, якщо хост не передає порт, він просто зависне, коли інші намагаються приєднатися (я думаю).
Joey Adams

Відповіді:


20

Це звучить як пробивання отворів UDP

Нехай A і B - два хости, кожен у своїй приватній мережі; N1 і N2 - два пристрої NAT; S - це загальнодоступний сервер з добре відомою глобально доступною IP-адресою.

  1. A і B кожен починають розмову UDP з S; пристрої NAT N1 і N2 створюють стан перекладу UDP і призначають тимчасові зовнішні номери портів
  2. S ретранслює ці номери портів на А і В
  3. A і B контактують пристрої NAT один з одним безпосередньо на переведених портах; пристрої NAT використовують раніше створені перекладацькі стани і передають пакети до A і B

У цьому прикладі ви С. Ваші опоненти - це А і В. Коли вас відштовхують від гри, опоненти можуть продовжувати грати, оскільки вони домовились про з'єднання один з одним, коли вони вперше з вами з’єдналися.


Вау +1, я не мав уявлення, що NAT може бути використаний так
TheLQ

Проблема з NAT полягає в тому, що потрібно починати ззаду між брандмауером. Отже, вам потрібно хоча б початковий комп'ютер бути загальнодоступним або до нього нічого не можна підключати.

2

Якщо дві програми хочуть спілкуватися між собою, одній не потрібно бути сервером, а інші клієнтом. Це одна модель мереж, але не єдина. Ще одна дуже поширена модель - модель однорангових , де кожен є і клієнтом, і сервером, і кожен може спілкуватися з ким завгодно. Я не знаю занадто багато конкретно про мережу для багатокористувацьких мереж Starcraft, але я думаю, що це, швидше за все, виконує те, що ви описали, використовуючи модель однорангових.


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