UDP を使用するオンライン マルチプレイヤー ゲームでは、インターネット経由でネットワーク間でパケットを配信するにはどうすればよいでしょうか。私の理解では、パケットがコンピュータに到達するには、クライアントがルーターでポート転送を有効にする必要があります。大規模なオンライン ゲーム (WoW、Diablo など) では、プレイヤーにこれを求めているのでしょうか。
たとえば、最近、UDP トラフィックを処理するサーバーを作成しました。送信者が送信したものをそのままエコーバックするだけです。これをインターネット上のサーバーに展開しました。ポート転送を有効にした後でのみ、送信者にエコーバックできますが、同じローカル ネットワーク上に 2 つの送信者が存在する場合は機能しません。
答え1
短い答え: NAT接続追跡
覚えておくべきことの 1 つは、IPv4 インターネット上のルーターの大部分が NAT ルーターであるということです。
ほとんどの NAT 実装ではスマート トラッキングが行われ、内部クライアントからどこかに UDP を送信すると、宛先ポートと送信元ポートが設定されます。ポートが逆の状態でトラフィックが着信すると、そのトラフィックはクライアントにルーティングされ、ほとんどのファイアウォールで許可されます。
追跡機能を備えた NAT/ファイアウォールは、これらのパケットを関連するものとして検出し、転送します。
server
ポート5000
UDPのコメントに基づく例
server:5000
クライアントは、ソースのパケットを送信しますclient:5001
client:5001
まず、NAT ルーターは、送信元 IP とポートが、宛先がのパケットを確認しますserver:5000
。- ルータはこれを送信し、
NATip:NATport
NATip:NATport
サーバーはこれを受信し、ソースを持つ応答を作成します。server:5000
- NATはこれを受信し、送信されたパケットと一致する送信元
server:5000
宛先を持ちます(ただし、送信元と宛先は逆になっています)。NATip:NATport
- NATはこれを
client:5001
送信元に送信しますserver:5000
送信元 IP + ポートと宛先 IP + ポートは、追跡可能な組み合わせを作成します。(詳細はさらにありますが、これが基本です)
さらに読むしかし、私はこれに関して、自分が見たり経験したりした逸話的な証拠だけを参照するのではなく、もっと良い文書を発掘するべきです。