プライベートとパブリックudpポートでは苦労しています。私はクライアントとサーバーのVoIPプログラムをやっていて、いくつか質問があります。プライベートとパブリックポート
1)プライベートポートはbind()で使用しているポートですか?
2)パブリックポートはファイアウォールの権利によって割り当てられますか?私のローカルネットワークの外に見えるポートです。
3)私のローカルネットワーク上の2台のマシン間でデバッグを行っているときに、プライベートポートに/ recvを送信するように指定しており、通信が機能しています。ネットワーク外のクライアントと通信する場合は、パブリックポートを使用するでしょうか?
4)ローカルネットワーク上の2つのホストがパブリックポートで通信する方法はありますか?それがリリースモードでのものなので、それが動作することを確認すると良いでしょう。
5)ルータは、パブリックポートに送信されたパケットを、プライベートポートでリスニングしているアプリケーションに転送しますか。送信者(ローカルネットワークの外にある場合)がプライベートポートではなくパブリックポートを指定します。
希望があれば、それ以外は尋ねてください!
ありがとうございます! ヨハン
アイデアは、穴あけを使用することです、申し訳ありません、私は代わりに言及しておくべきです。クライアントはパケットをサーバーに送信し、サーバーはポート情報とIPを他のクライアントに中継します。サーバーはNATの背後にありません(ポート転送による)。あなたは、incommingパケットのアドレスが私たちが送信したパケットのアドレスと同じでなければならないことに言及しました。私は理由を理解していますが、穴あけを防ぐのではないでしょうか?私は、穴あけの考えは、クライアントがパブリックポートをサーバーに公開し、サーバーがクライアントに互いのことを伝え、クライアントがそれらのポートでそれぞれ話すことができるということです。 – KaiserJohaan
@カイザー、なぜ穴あけを防ぐのですか?確かに、あるクライアントが別のクライアントにデータグラムを送信すると、おそらく破棄されます。しかし、他のクライアントは、最初の側のNATが以前に送信されたパケットへの応答であると信じているので、応答を送信します(これは通信の試みがあったことをサーバーから認識します)。 (そして反対側で落としましたが、最初の側のNATはそれについて知りません)。あなたは穴あけにはるかに多くがあるので、私にリンクを与えた記事を読むべきです。 –