Jak działa gra online po odejściu gospodarza?


12

Uwaga: pytanie dotyczy sieci, a nie gier. Używam StarCraft jedynie jako przykładu.

Gra StarCraft (nie StarCraft 2) obsługuje grę online. Jedna osoba hostuje, a inne osoby dołączają. Jeśli gospodarz odejdzie podczas gry, gra może być kontynuowana bez niego. Jak to działa?

Rozważ następujący scenariusz:

  • Hostuję 3 w porównaniu z 3. Pamiętaj, że aby ludzie mogli się przyłączyć, mój router musi być skonfigurowany do przesyłania dalej 6112, TCP i UDP (patrz Wsparcie Blizzarda ).
  • Pięć osób dołącza. Wszyscy (łącznie ze mną) stoją za routerem. Zaczynam grę.
  • Po trzech minutach gry do mojej bazy wlewa się około dwudziestu fanatyków. Nikt mi nie pomaga.
  • Moja baza została wyeliminowana, więc wychodzę (gra nie daje wyboru).
  • Gra trwa bez gospodarza (w drużynie gospodarzy pozostało dwóch graczy).

W jaki sposób pozostałych pięciu klientów (którzy nie potrzebowali przekierowania 6112) pozostają w kontakcie?

Jeśli dobrze rozumiem: jeśli dwa programy chcą ze sobą rozmawiać, jeden z nich musi być „serwerem” i nasłuchiwać połączeń na porcie, a drugi musi być „klientem” i inicjować żądanie połączenia na tym Port. Nie mogą po prostu zacząć przesyłać sobie pakietów (a ja nawet nie wiem, jak by to zrobili, jeśli oba są za routerami).

Ktoś hostujący grę jest serwerem, a dołączającymi do niej są klienci. Łatwo jest zobaczyć, jak klienci mogą zacząć komunikować się z serwerem. Nie rozumiem: w jaki sposób klienci zaczynają komunikować się ze sobą bez przechodzenia przez serwer? Czy protokół internetowy umożliwia serwerowi inicjowanie połączeń między klientami?

Jest całkiem możliwe, że w przypadku StarCraft ruch w grach przechodzi przez serwery Battle.net. StarCraft utrzymuje połączenie z Battle.net podczas gier (wiadomości od znajomych itp.). Wątpię jednak, aby ruch w nim przechodził, ponieważ jeśli tak, to dlaczego hosty musiałyby przesyłać 6112?

Moje pytanie brzmi: czy serwer z wieloma podłączonymi klientami może inicjować połączenia między nimi?


2
Podoba mi się odniesienie do Starcraft tutaj ...
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).Najwyraźniej jest to potrzebne do uruchomienia gry, aby użytkownicy mogli Cię znaleźć, ale nie muszą pozostawać w kontakcie.
JeffO

@Jeff O: serwery Battle.net prowadzą listę dostępnych gier. Jeśli jednak host nie przekieruje portów, po prostu zawiesi się, gdy inni spróbują dołączyć (tak myślę).
Joey Adams

Odpowiedzi:


20

To brzmi jak dziurkowanie UDP

Niech A i B będą dwoma hostami, każdy w swojej prywatnej sieci; N1 i N2 są dwoma urządzeniami NAT; S jest publicznym serwerem o znanym globalnie dostępnym adresie IP.

  1. A i B rozpoczynają rozmowę UDP z S; urządzenia NAT N1 i N2 tworzą stany translacji UDP i przypisują tymczasowe numery portów zewnętrznych
  2. S przekazuje te numery portów z powrotem do A i B.
  3. A i B kontaktują się z urządzeniami NAT bezpośrednio na przetłumaczonych portach; urządzenia NAT używają wcześniej utworzonych stanów translacji i wysyłają pakiety do A i B.

W tym przykładzie jesteś S. Twoimi przeciwnikami są A i B. Kiedy zostaniesz wyrzucony z gry, twoi przeciwnicy mogą kontynuować grę, ponieważ wynegocjowali połączenie ze sobą, kiedy po raz pierwszy się z tobą połączili.


Wow +1, nie miałem pojęcia, że ​​NAT może być używany w ten sposób
TheLQ

Problem z NAT polega na tym, że musisz zacząć od zapory ogniowej. Dlatego potrzebujesz przynajmniej pierwszego komputera, aby był publicznie dostępny lub nie ma z czym się połączyć.

2

Jeśli dwa programy chcą ze sobą rozmawiać, jeden nie musi być serwerem, a drugi klientem. To jeden model sieci, ale nie jedyny. Innym bardzo powszechnym modelem jest model peer-to-peer , w którym każdy jest zarówno klientem, jak i serwerem, a każdy może z każdym rozmawiać. Nie wiem zbyt wiele o wewnętrznych elementach sieciowych do gry wieloosobowej Starcraft, ale zgaduję, że najprawdopodobniej osiąga to, co opisałeś, używając modelu peer-to-peer.


Modele P2P nadal generalnie wymagają przesyłania portów przez co najmniej jedną osobę w każdej parze równorzędnych użytkowników, aby wykonać połączenie początkowe. Spróbuj pobrać torrent z przekierowanymi portami i bez nich i zobacz różnicę w liczbie połączeń.
Snorbuckle,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.