Woher wissen Spieleclients, dass ein Server in ihrem LAN läuft?

18

In vielen Multiplayer-Spielen gibt es die Option für LAN-Spiele. Meine Frage ist jedoch, woher ein Client weiß, wo sich ein Server im LAN befindet.

Die einzigen Möglichkeiten, die ich mir vorstellen kann

  1. Senden Sie Sendungen über die Sendeadresse. Dies hat den Nachteil, dass es manchmal von Routern oder Switches in verschiedenen Netzwerkumgebungen gefiltert wird.
  2. Versuchen Sie, auf jeder IP-Adresse in Ihrem Subnetz eine Verbindung zu einem Server herzustellen. Dies hat den Nachteil, dass es langsam ist (insbesondere, wenn das Netzwerk 10.XXX.XXX.XXX für seine IPs verwendet) und einen Mini-DDoS-Angriff ausführt, der jedoch nicht gefiltert wird.

Wie machen Spiele das besonders in anderen Netzwerkumgebungen?

TheLQ
quelle

Antworten:

32

Bei Spielen im LAN müssen die Clients standardmäßig Broadcast-Pakete an Discover-Server senden. (Der Client sendet eine Übertragung, der Server sendet eine direkte Antwort an den Client.)

Im Allgemeinen sendet der Client drei bis fünf Broadcast-Nachrichten im Abstand von jeweils einer Sekunde und entscheidet dann, dass kein Server vorhanden sein darf, wenn er innerhalb dieser Zeit keine Antwort erhalten hat. Durch das Senden mehrerer Pakete wird die Serviceerkennung ein wenig toleranter gegenüber Paketverlusten (was in LANs jedoch eher selten vorkommt), und durch die Zeit zwischen den Paketen wird verhindert, dass der andere Netzwerkverkehr zu stark gestört wird.

Niemand tut (meines Wissens) Ihre Option 2, da dies die Leistung des LAN beeinträchtigt (oder eine Weile dauern wird, wenn Sie die Verbindungsversuche verschieben).

In den meisten Spielen können die Spieler jedoch direkt eine IP-Adresse eingeben, mit der sie eine Verbindung herstellen können, um die Übertragung über das lokale LAN zu filtern (was recht ungewöhnlich, aber nicht ungewöhnlich ist). Auf diese Weise können Spieler in solchen Situationen eine Verbindung zu einem bekannten Server herstellen, auch wenn sie nicht senden können, um ihn automatisch zu finden.

Bei Spielen über das Internet senden Clients eine direkte Anfrage an einen statischen Metaserver , der mit den Adressen für bekannte aktuelle Serverinstanzen antwortet. Ebenso wenden sich Server an diesen Metaserver, um sie über ihren eigenen Standort zu informieren, damit Clients an sie weitergeleitet werden können. Aufgrund der Komplexität von NAT funktioniert dieser Ansatz normalerweise nicht für Server, die in einem LAN gehostet werden. Aus diesem Grund wird dieser Ansatz normalerweise nicht für LAN-Spiele verwendet.

Zusätzliche Randnotiz: Bei Internetspielen ist es üblich, zuerst einen Punkteserver zu kontaktieren . Der Punkteserver teilt dem Spiel mit, unter welcher Adresse er den Metaserver finden kann, und teilt ihm mit, wo sich Server befinden. Punkteserver werden oft (wenn auch nicht immer) als einfache Webserver implementiert und sind das einzige Teil dieses Systems mit einer Adresse, die fest im Spiel codiert ist. Auf diese Weise können Spieleentwickler ihren Metaserver nach Bedarf von einem Computer auf einen anderen verschieben, indem sie einfach die vom Punkteserver zurückgegebene Adresse aktualisieren. Es kann auch verwendet werden, um eine einfache Form des Lastenausgleichs oder der Regionsumschaltung zu implementieren, indem der Point Server Benutzer an verschiedene Metaserver sendet, basierend auf der Serverlast oder der geografischen Nähe.

Trevor Powell
quelle
2
+1 an Sie Sir, dies beantwortete ein paar Fragen, die ich auch hatte.
Raine
2
+1, Broadcast ist der richtige Weg, hehe, es ist der richtige Weg, um # 2 zu tun. Dafür ist Broadcasting gedacht, bei dem mehrere IPs kontaktiert werden, um zu sehen, ob etwas zuhört.
James
Ja, das einzige Problem bei Broadcasts sind bestimmte LANs (insbesondere von großen Unternehmen), die Broadcasts nicht zwischen allen LAN-Segmenten verbreiten. Zukünftig wird Multicast vermutlich die neue Möglichkeit sein, dies zu tun, und sollte automatisch über alle LAN-Segmente hinweg funktionieren. Derzeit ist die ordnungsgemäße Routerunterstützung für Multicast jedoch noch zu lückenhaft, um als Ersatz für Broadcast verwendet zu werden. Noch ein paar Jahre, und es könnte sich endlich bessern.
Trevor Powell
Die wenigen Male, in denen ich auf Unternehmensnetzwerke gestoßen bin, die Broadcast nicht unterstützen, habe ich alle möglichen anderen Routingprobleme festgestellt, die normalerweise auf defekte Geräte zurückzuführen sind (manchmal durch Aktualisieren der Firmware des Routers behoben). Wenn Broadcast in einem lokalen LAN-Segment nicht funktioniert, ist es unwahrscheinlich, dass dies beabsichtigt ist.
Randolf Richardson