マルチプレイヤーゲームをNATの背後で確実に動作させるにはどうすればよいですか?


20

クライアント/サーバーが100%のゲームでさえ、クライアントがNATの背後にあると問題が発生する場合があります。ピアピアゲームはさらに大きな問題です。一部のゲームでは、複数のトランスポート(UDPやTCPなど)または複数の接続(音声用の異なるUDPポートなど)を使用する必要があります。

NATルーターの背後で実行しているときにゲームが確実に動作することを確認する方法は何ですか?

  • ピアピア:集中型サーバーは存在しません。プレイヤーAがゲームを開始し、プレイヤーBが参加したい
  • クライアントサーバー:既知のアドレス(ホスト名)にある集中サーバーは、すべての着信接続を受け入れます。各クライアントはそのサーバーとのみ通信します。
  • コンボ:サーバーは単なるマッチメイキングですが、ゲームの更新はピアツーピアです。異なるピアは、潜在的に異なるIP /ポートを持つ各プレーヤーを見る場合があります(たとえば、一部のクライアントは同じNATの背後にあり、一部は異なるルーター上にあります)

回答:


9

最も一般的に使用される手法は、NATパンチスルーと呼ばれます。ここにきちんとしたイントロがあります:http : //www.mindcontrol.org/~hplus/nat-punch.html

少なくともUDP用のOSSプロジェクトがあります:http : //udt.sourceforge.net/index.html

RakNetはパンチスルーもサポートしています。商用ですが、無料の「インディーズ」ライセンスがあります。こちらをご覧くださいhttp : //www.jenkinssoftware.com/

「NATパンチ」のグーグル検索により、より多くの読み物が得られます


1
これは非常に古い質問と回答であることは知っていますが、誰かがこれを読んだ場合、RakNetはOculusVRに買収され、現在は2条項のBSDライセンスでオープンソースになっています。github.com/OculusVR/RakNet
クアッド

9
  • クライアントからサーバーまたはピアに自身のアドレスを通知させないでください。つまり、クライアントAのIPをゲームパケットに埋め込み、クライアントBまたはサーバーにそのアドレスに返信させないでください。常にメッセージの発信元のアドレス/ポートに返信してください。

  • ゲームに使用されるさまざまなUDPまたはTCPポートを最小化します。これにより、NATルールの設定が簡単になります。

  • ユーザーがゲームで使用されるデフォルトのポートをオーバーライドできるようにします。このようにして、複数のサーバーを同じNATの背後でホストできます。

  • ゲームドキュメントにポートとそれらが従うルールを文書化します(Zorbaに感謝します)。Descent 3では、テストサーバーにパケットを送信して、ルーターまたはNAT構成のトラブルシューティングに役立つスタンドアロンのテストアプリケーションを作成しました。

7
これ以外の場合は適切な返信に加えて、ゲームのドキュメントにゲームポートのメモを含めます。多くのゲームがこれを行わないのは驚くべきことです。人々は「netstat」を使用して手動でポートをルートし、その半分を間違えます。
ZorbaTHut

UDPでは、メッセージの発信元が実際にはわかりません。返信先には何でも書くことができます。
MickLH

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.