Come continua un gioco online dopo che l'host ha lasciato?


12

Nota: questa è una domanda sulla rete, non sui giochi. Sto usando StarCraft solo come esempio.

Il gioco StarCraft (non StarCraft 2) supporta il gioco online. Una persona ospita e altre persone si uniscono. Se l'host esce durante il gioco, il gioco può continuare indefinitamente senza l'host. Come funziona?

Considera il seguente scenario:

  • Ospito un 3 contro 3. Nota che, affinché le persone possano unirsi, il mio router deve essere configurato per il port forward 6112, TCP e UDP (vedi Supporto Blizzard ).
  • Cinque persone si uniscono. Tutti (me compreso) sono dietro un router. Inizio il gioco.
  • Tre minuti dall'inizio della partita, una ventina di fanatici si riversano nella mia base. Nessuno mi aiuta.
  • La mia base viene eliminata, quindi me ne vado (il gioco non ti dà scelta).
  • Il gioco continua senza l'host (la squadra di casa ha due giocatori rimasti).

Come restano connessi i restanti cinque client (che non avevano bisogno del 6112 inoltrato)?

Se ho capito bene: se due programmi vogliono parlare tra loro, uno di essi deve essere un "server" e ascoltare le connessioni su una porta, mentre l'altro deve essere un "client" e avviare una richiesta di connessione su quel porta. Non possono semplicemente iniziare a inviare pacchetti l'un l'altro (e non so nemmeno come farebbero, se entrambi fossero dietro i router).

Qualcuno che ospita un gioco è un server, mentre quelli che lo partecipano sono client. È facile vedere come i client possono iniziare a comunicare con il server. Quello che non capisco è: come fanno i client a comunicare tra loro senza passare attraverso il server? Il protocollo Internet consente a un server di avviare connessioni tra client?

È del tutto possibile che, nel caso di StarCraft, il traffico di gioco passi attraverso i server Battle.net. StarCraft mantiene una connessione a Battle.net durante i giochi (per messaggi di amici, ecc.). Tuttavia, dubito che il traffico di gioco lo attraversi, perché in caso affermativo, perché gli host dovrebbero eseguire il port forward del 6112?

La mia domanda è: un server, con più client connessi ad esso, può avviare connessioni tra di loro?


2
Mi piace il riferimento a Starcraft qui ...
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).Apparentemente questo è necessario per iniziare un gioco in modo che gli utenti possano trovarti, ma non è necessario rimanere connessi.
JeffO,

@Jeff O: i server Battle.net mantengono un elenco di giochi disponibili. Tuttavia, se l'host non esegue il port forwarding, si bloccherà semplicemente quando altri tenteranno di unirsi (penso).
Joey Adams,

Risposte:


20

Sembra un buco UDP

Siano A e B i due host, ognuno nella propria rete privata; N1 e N2 sono i due dispositivi NAT; S è un server pubblico con un noto indirizzo IP raggiungibile a livello globale.

  1. A e B iniziano ciascuno una conversazione UDP con S; i dispositivi NAT N1 e N2 creano stati di traduzione UDP e assegnano numeri di porta esterni temporanei
  2. S inoltra questi numeri di porta a A e B.
  3. A e B si contattano reciprocamente i dispositivi NAT direttamente sulle porte tradotte; i dispositivi NAT utilizzano gli stati di traduzione creati in precedenza e inviano i pacchetti ad A e B.

In questo esempio, sei S. I tuoi avversari sono A e B. Quando sei espulso dal gioco, i tuoi avversari possono continuare a giocare perché avevano negoziato una connessione tra loro quando si sono connessi per la prima volta a te.


Wow +1, non avevo idea che NAT potesse essere usato in quel modo
TheLQ,

Il problema con NAT è che è necessario iniziare da dietro il firewall. Quindi è necessario che almeno il computer iniziale sia disponibile pubblicamente o non ci sia nulla a cui connettersi.

2

Se due programmi vogliono parlare tra loro, uno non deve essere un server e l'altro un client. Questo è un modello di rete, ma non l'unico. Un altro modello molto comune è il modello peer-to-peer , in cui ognuno è sia un client che un server e chiunque può parlare con chiunque. Non so troppo specificamente sugli interni della rete multiplayer di Starcraft, ma immagino che molto probabilmente realizzerà ciò che hai descritto usando un modello peer-to-peer.


I modelli P2P richiedono generalmente che le porte vengano inoltrate da almeno una persona in ciascuna coppia di peer per stabilire la connessione iniziale. Prova a scaricare un torrent con e senza porte inoltrate e vedi la differenza nel numero di connessioni.
Snorbuckle,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.