2011-02-02 5 views
1

最近の質問では、一般的にUDP、boost :: asio、およびC++について多くの質問をしました。ここにStackOverflowの答えを持っていないようですUDPサーバからクライアントへの通信 - UDPはステートレスで、ルータをバイパスする方法は?

私の最新の質問、これです:

クライアント/サーバーアプリケーションでは、サーバがすべてのファイアウォールでポートを開くことを要求するのは非常にいいですメッセージが許可されるようになります。しかし、クライアントに対して同じことを行うことは、まったく優れたユーザーエクスペリエンスではありません。

通常、TCP接続は、ほとんどのルータがステートフルなパケット検査をサポートし、元の要求がローカルホストから発信された場合に応答パケットを通過させるため、これを実現します。

UDPはステートレスであり、「応答パケット」(私の知る限り)のようなものはないので、これがUDPでどのように機能するかははっきりしません。クライアントアプリケーションでこれをどのように考慮する必要がありますか?

ありがとうございました!

+0

実際、代わりにserverfaultを検索する必要があることがわかりました。 NATが自動的にこれを処理するようです。これが間違っている場合は、私を修正してください! :) – Max

答えて

7

UDP自体はステートレスですが、ファイアウォールは通常はありません。 UDPに関する規則では、要求がclient:port_Aから​​になった場合、応答は​​からclient:port_Aに戻ります。

ファイアウォールでこれを利用できます。 UDPリクエストがクライアントから送信されたことを確認すると、応答を認識できるエントリを状態テーブルに追加します。UDPはステートレスで接続の終了の兆候がないため、ファイアウォールは通常、タイムアウトを実装します。一定時間UDPアドレスペア間でトラフィックが発生しない場合、ファイアウォールの状態テーブル内の関連付けは削除されます。

クライアントアプリケーションでこれを利用するには、サーバーが要求を受信するために使用するのと同じポートから応答を返すようにしてください。

+0

私はそれがなければ何をするだろう –

関連する問題