Comment les clients de jeux savent-ils qu'un serveur fonctionne sur leur réseau local?

18

Dans de nombreux jeux multijoueurs, il est possible de jouer en LAN. Ma question est cependant de savoir comment un client sait où se trouve un serveur sur le LAN?

Les seules façons dont je peux penser

  1. Envoyez des diffusions via l'adresse de diffusion. Cela présente l'inconvénient d'être parfois filtré par des routeurs ou des commutateurs dans différents environnements réseau.
  2. Essayez de vous connecter à un serveur sur chaque IP de votre sous-réseau. Cela a l'inconvénient d'être lent (surtout si le réseau utilise 10.XXX.XXX.XXX pour leurs adresses IP) et une attaque mini ddos, mais ne va pas être filtrée.

Comment les jeux font-ils cela en particulier dans d'autres environnements réseau?

TheLQ
la source

Réponses:

32

Pour les jeux avec lecture LAN, la chose standard à faire est que les clients envoient des paquets de diffusion pour découvrir les serveurs. (Le client envoie une diffusion, le serveur envoie une réponse directe au client)

En général, le client enverra entre trois et cinq messages diffusés, chacun à environ une seconde d'intervalle, et décidera alors qu'il ne doit pas y avoir de serveur s'il n'a entendu aucune réponse dans ce délai. L'envoi de plusieurs paquets rend la découverte de services un peu plus tolérante à la perte de paquets (bien que cela soit assez rare sur les réseaux locaux), et le fait de laisser du temps entre eux les empêche de trop perturber le trafic réseau.

Personne (à ma connaissance) ne fait votre option # 2, car cela dégradera les performances du LAN (ou prendra un certain temps, si vous échelonnez les tentatives de connexion).

Mais pour faire face aux cas où la diffusion est filtrée par le LAN local (ce qui est assez inhabituel, mais pas inconnu), la plupart des jeux permettront aux joueurs d'entrer directement une adresse IP à laquelle se connecter. Cela permet aux joueurs dans ce genre de situations de se connecter à un serveur connu, même s'ils ne peuvent pas diffuser pour le trouver automatiquement.

Pour les jeux sur Internet, les clients enverront une demande directe à un méta-serveur statique , qui répond avec les adresses des instances de serveur actuelles connues. Les serveurs, de même, contactent ce méta-serveur pour les informer de leur propre emplacement afin que les clients puissent être dirigés vers eux. Cependant, en raison de la complexité du NAT, cette approche ne fonctionne généralement pas pour les serveurs hébergés dans un réseau local. C'est pourquoi ce type d'approche n'est généralement pas utilisé pour les jeux LAN.

Remarque supplémentaire: il est courant que les jeux Internet contactent d'abord un serveur de points . Le serveur de points indique au jeu à quelle adresse il peut trouver le méta-serveur, qui lui indiquera où les serveurs peuvent être trouvés. Les serveurs de points sont souvent (mais certainement pas toujours) implémentés comme un simple serveur Web, et sont le seul élément de ce système avec une adresse codée en dur dans le jeu. Cela permet aux développeurs de jeux de déplacer leur méta-serveur d'une machine à l'autre selon les besoins, simplement en mettant à jour l'adresse renvoyée par le serveur de points. Il peut également être utilisé pour implémenter une forme simple d'équilibrage de charge ou de changement de région en demandant au serveur de point d'envoyer des utilisateurs à différents méta-serveurs en fonction de la charge du serveur ou de la proximité géographique.

Trevor Powell
la source
2
+1 à vous monsieur, cela a répondu à quelques questions que j'avais aussi.
Raine
2
+1, la diffusion est la voie à suivre car elle est en fait la bonne façon de faire # 2, hehe .. C'est à cela que sert la diffusion, en contactant plusieurs adresses IP pour voir si quelque chose écoute.
James
Oui, le seul problème avec la diffusion est certains LAN (grandes entreprises, en particulier) qui ne propagent pas la diffusion entre tous les segments de LAN. À l'avenir, la multidiffusion sera sans doute la nouvelle façon de procéder et devrait fonctionner automatiquement sur tous les segments LAN. Mais en ce moment, la prise en charge appropriée du routeur pour la multidiffusion est encore trop inégale pour pouvoir remplacer la diffusion. Donnez-lui encore quelques années et les choses pourraient enfin s'améliorer.
Trevor Powell
Les quelques fois où j'ai rencontré des réseaux d'entreprise qui ne prennent pas en charge la diffusion, j'ai trouvé toutes sortes d'autres problèmes de routage en cours qui sont généralement causés par un équipement défectueux (parfois résolu par la mise à niveau du micrologiciel du routeur). Si la diffusion ne fonctionne pas dans un segment LAN local, il est peu probable qu'elle soit intentionnelle.
Randolf Richardson