Comment se déroule un jeu en ligne après le départ de l'hôte?

12

Remarque: il s'agit d'une question de réseautage, pas de jeu. J'utilise StarCraft uniquement à titre d'exemple.

Le jeu StarCraft (pas StarCraft 2) prend en charge le jeu en ligne. Une personne héberge et d'autres personnes se joignent. Si l'hôte part pendant le jeu, le jeu peut se poursuivre indéfiniment sans l'hôte. Comment ça marche?

Considérez le scénario suivant:

  • J'héberge un 3 contre 3. Notez que, pour que les gens puissent se joindre, mon routeur doit être configuré pour rediriger le port 6112, TCP et UDP (voir Support Blizzard ).
  • Cinq personnes se joignent. Tout le monde (moi y compris) est derrière un routeur. Je commence le jeu.
  • Après trois minutes de jeu, une vingtaine de fanatiques se déversent dans ma base. Personne ne m'aide.
  • Ma base est éliminée, donc je pars (le jeu ne vous laisse pas le choix).
  • Le jeu se poursuit sans l'hôte (l'équipe à domicile n'a plus que deux joueurs).

Comment les cinq clients restants (qui n'avaient pas besoin du renvoi 6112) restent-ils connectés?

Si je comprends bien: si deux programmes veulent se parler, l'un d'eux doit être un "serveur" et écouter les connexions sur un port, tandis que l'autre doit être un "client" et lancer une demande de connexion sur ce Port. Ils ne peuvent pas simplement commencer à s'envoyer des paquets (et je ne sais même pas comment ils le feraient, si les deux sont derrière des routeurs).

Quelqu'un qui héberge un jeu est un serveur, tandis que ceux qui le rejoignent sont des clients. Il est facile de voir comment les clients peuvent commencer à communiquer avec le serveur. Ce que je ne comprends pas, c'est: comment les clients commencent-ils à communiquer entre eux sans passer par le serveur? Le protocole Internet autorise-t-il un serveur à établir des connexions entre des clients?

Il est tout à fait possible que, dans le cas de StarCraft, le trafic de jeu passe par les serveurs Battle.net. StarCraft maintient une connexion à Battle.net pendant les parties (pour les messages d'amis, etc.). Cependant, je doute que le trafic de jeu le traverse, car si c'était le cas, pourquoi les hôtes auraient-ils besoin de transférer 6112?

Ma question est: un serveur, avec plusieurs clients connectés, peut-il établir des connexions entre eux?

Joey Adams
la source
2
J'aime la référence Starcraft ici ...
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).Apparemment, cela est nécessaire pour démarrer un jeu afin que les utilisateurs puissent vous trouver, mais pas obligé de rester connecté.
JeffO
@Jeff O: les serveurs Battle.net conservent une liste des jeux disponibles. Cependant, si l'hôte ne transfère pas le port, il se bloque simplement lorsque d'autres essaient de se joindre (je pense).
Joey Adams

Réponses:

20

Cela ressemble à la perforation UDP

Soit A et B les deux hôtes, chacun dans son propre réseau privé; N1 et N2 sont les deux périphériques NAT; S est un serveur public avec une adresse IP connue mondialement accessible.

  1. A et B commencent chacun une conversation UDP avec S; les périphériques NAT N1 et N2 créent des états de traduction UDP et attribuent des numéros de port externes temporaires
  2. S relaie ces numéros de port vers A et B
  3. A et B contactent les périphériques NAT de l'autre directement sur les ports traduits; les périphériques NAT utilisent les états de traduction créés précédemment et envoient les paquets à A et B

Dans cet exemple, vous êtes S. Vos adversaires sont A et B. Lorsque vous êtes exclu du jeu, vos adversaires peuvent continuer à jouer car ils avaient négocié une connexion les uns avec les autres lors de leur première connexion avec vous.

canard9
la source
Wow +1, je ne savais pas que le NAT pouvait être utilisé comme ça
TheLQ
Le problème avec les NAT est que vous devez commencer par derrière le pare-feu. Par conséquent, vous devez au moins que l'ordinateur initial soit accessible au public ou il n'y a rien auquel se connecter.
2

Si deux programmes veulent se parler, l'un n'a pas besoin d'être un serveur et l'autre un client. C'est un modèle de réseautage, mais pas le seul. Un autre modèle très courant est le modèle peer-to-peer , où tout le monde est à la fois un client et un serveur et n'importe qui peut parler à n'importe qui. Je ne sais pas trop précisément sur les internes de réseau multijoueur de Starcraft, mais je suppose que cela accomplit très probablement ce que vous avez décrit en utilisant un modèle peer-to-peer.

Mason Wheeler
la source
Les modèles P2P exigent généralement que les ports soient transmis par au moins une personne dans chaque paire de pairs pour établir la connexion initiale. Essayez de télécharger un torrent avec et sans ports redirigés et voyez la différence dans le nombre de connexions.
Snorbuckle du