サーバーがLAN上で実行されていることを、ゲームクライアントはどのように知るのですか?


18

多くのマルチプレイヤーゲームには、LANプレイのオプションがあります。私の質問は、クライアントがサーバーがLANのどこにあるかをどのように知るかです。

私が考えることができる唯一の方法

  1. ブロードキャストアドレスを介してブロードキャストを送信します。これには、異なるネットワーク環境のルーターまたはスイッチによって時々フィルタリングされるという欠点があります。
  2. サブネット内のすべてのIPでサーバーに接続してみます。これには時間がかかるという欠点があり(特に、ネットワークでIPに10.XXX.XXX.XXXを使用している場合)、ミニddos攻撃が行われますが、フィルタリングは行われません。

特に他のネットワーク環境でゲームはどのようにこれを行いますか?

回答:


32

LANプレイを使用するゲームの場合、標準的なことは、クライアントがブロードキャストパケットを送信してサーバーを検出することです。(クライアントはブロードキャストを送信し、サーバーはクライアントに直接応答を送信します)

一般に、クライアントは約1秒ごとに3〜5つのブロードキャストメッセージを送信し、その時間内に応答がなければサーバーがないと判断します。複数のパケットを送信すると、サービスディスカバリーのパケット損失耐性が少し高くなります(ただし、LANではあまり一般的ではありません)。

LANのパフォーマンスを低下させる(または接続試行をずらした場合、かなり時間がかかる)ため、(私の知る限り)オプション2を実行する人はいません。

しかし、ブロードキャストがローカルLANによってフィルタリングされるケースに対応するため(これは非常に珍しいことですが、前代未聞ではありません)、ほとんどのゲームでは、プレイヤーが接続するIPアドレスを直接入力できます。これにより、この種の状況のプレイヤーは、自動的に見つけるためにブロードキャストできない場合でも、既知のサーバーに接続できます。

インターネット経由のゲームの場合、クライアントは静的なメタサーバーに直接リクエストを送信します。このサーバーは、既知の現在のサーバーインスタンスのアドレスで応答します。同様に、サーバーは、そのメタサーバーに連絡して自分の場所を通知し、クライアントをサーバーに誘導できるようにします。ただし、NATの複雑さにより、このアプローチは通常、LAN内でホストされているサーバーでは機能しません。これが、この種のアプローチがLANゲームに通常使用されない理由です。

補足事項:インターネットゲームでは、最初にポイントサーバーに接続するのが一般的です。ポイントサーバーは、メタサーバーを見つけることができるアドレスをゲームに伝えます。これにより、サーバーがどこにあるかがわかります。ポイントサーバーは、多くの場合(常にではありませんが)単純なWebサーバーとして実装され、ゲームにハードコーディングされたアドレスを持つこのシステムの唯一の部分です。これにより、ゲーム開発者は、ポイントサーバーから返されたアドレスを更新するだけで、必要に応じて、あるマシンから別のマシンにメタサーバーを移動できます。また、サーバーの負荷または地理的近接度に基づいてポイントサーバーにユーザーを異なるメタサーバーに送信させることにより、単純な形式のロードバランシングまたはリージョンスイッチングを実装することもできます。


2
あなたへの+1、これは私が持っていたいくつかの質問にも答えました。
Raineの

2
+1、ブロードキャストは実際に#2を実行する適切な方法であるためです。それがブロードキャストの目的です。複数のIPにアクセスして、何かがリッスンしているかどうかを確認します。
ジェームズ

はい、ブロードキャストの唯一の問題は、すべてのLANセグメント間でブロードキャストを伝播しない特定の(特に大企業の)LANです。将来的には、マルチキャストはおそらくこれを行う新しい方法であり、すべてのLANセグメントで自動的に機能するはずです。しかし、現時点では、マルチキャストの適切なルーターサポートはまだ不十分であり、ブロードキャストの代替として頼ることができません。それにさらに数年を与えて、物事は最終的に改善されるかもしれません。
トレバーパウエル

ブロードキャストをサポートしていない企業ネットワークに出くわしたことが何度かありますが、通常は機器の欠陥(ルーターのファームウェアをアップグレードすることで修正される場合があります)が原因で発生する他のあらゆるルーティングの問題を発見しました。ブロードキャストがローカルLANセグメントで機能していない場合、意図的なものではありません。
ランドルフリチャードソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.