2011-01-31 7 views
0

プライベートとパブリックudpポートでは苦労しています。私はクライアントとサーバーのVoIPプログラムをやっていて、いくつか質問があります。プライベートとパブリックポート

1)プライベートポートはbind()で使用しているポートですか?

2)パブリックポートはファイアウォールの権利によって割り当てられますか?私のローカルネットワークの外に見えるポートです。

3)私のローカルネットワーク上の2台のマシン間でデバッグを行っているときに、プライベートポートに/ recvを送信するように指定しており、通信が機能しています。ネットワーク外のクライアントと通信する場合は、パブリックポートを使用するでしょうか?

4)ローカルネットワーク上の2つのホストがパブリックポートで通信する方法はありますか?それがリリースモードでのものなので、それが動作することを確認すると良いでしょう。

5)ルータは、パブリックポートに送信されたパケットを、プライベートポートでリスニングしているアプリケーションに転送しますか。送信者(ローカルネットワークの外にある場合)がプライベートポートではなくパブリックポートを指定します。

希望があれば、それ以外は尋ねてください!

ありがとうございます! ヨハン

答えて

2

1)プライベートポートを使用すると、()右のバインドに 使用するものでしょうか?

右。

2)パブリックポートが ファイアウォールの権利によって割り当てられていますか?私のローカルネットワークの外側にはポート が表示されています。

まあまあですが、厳密にはファイアウォールではありません。それはNATです。もちろん、ファイアウォールにはNATが実装されていてもよく(ほとんどの場合)、NATを使用しないファイアウォールもあります。注意すべきもう一つは、複数のレベルのNAT(自宅とISPのような)があるかもしれないということです。この場合は、一番外側のNATによって割り当てられたポートをパブリックなものとして参照するのはおそらく意味があります。

3)私は自分のローカルネットワーク上の2台の マシン間でデバッグしています、私は/ プライベートポートへのrecv、および通信工事を送信するために両方を指定 ています。 ネットワーク外の クライアントと通信している場合は、 パブリックポートを使用するでしょうか?

ネットワークの設定によって異なります。あなたの質問に "クライアント - サーバー"と言いますので、私は、クライアントが "接続"(最初のパケットを送信する)と仮定します。サーバーがNATの背後にない場合、そのパブリックIP /ポートのペアはローカルのものと同じになります。しかし、サーバーがNATの背後にある場合、まだパブリックポートが割り当てられていないため、サーバーに接続するだけではありません。ポートを開くだけでNATがパブリックポートを割り当てることはありません。実際にはそのポートから何かを送信する必要があります。

サーバーがNATの背後にある場合は、クライアントとして動作する必要があり、クライアントがNATの背後にないという条件で、クライアントはサーバーとして動作する必要があります。両方の側がNATの背後にある場合、hole punchingを実行するには、NAT以外のサードパーティ製サーバが必要です。ホールパンチングを使用する場合、通常、プライベートチャンスで両側が同じLANに存在する場合にのみ、プライベートエンドポイントとパブリックエンドポイントの両方が使用されます。

4) 公共のポートで通信するために ローカルネットワーク上の2つのホストのための方法はありますか?それは がリリースモードになるので、 が動作することを確認するのがよいでしょう。

NATの設定によって異なります。それは、LANの内部から来るすべてのものを無視し、NATのパブリックアドレスを宛先として持つことができます。たとえば、自宅のPCから自分のパブリックアドレスにpingすることもできません。

5)は、プライベート ポート上の アプリケーションlistneingへのパブリックポートに送信されたルータパケットを転送 だろうか?送信者( ローカルネットワークの外側にある場合)は、プライベートポートではなく公衆 ポートを指定します。

私の答えは3)を参照してください。もちろん、パブリックポートが割り当てられるとすぐにパケットを転送します。なぜなら、パブリックポートが割り当てられているからです。しかし、おそらく、着信パケットが同じアドレスとポートから来ていることをチェックします。これは、ポートが開かれた原因となったパケットが送信されたことを確認するため、早期に送信されたパケットに対する有効な応答です。

+0

アイデアは、穴あけを使用することです、申し訳ありません、私は代わりに言及しておくべきです。クライアントはパケットをサーバーに送信し、サーバーはポート情報とIPを他のクライアントに中継します。サーバーはNATの背後にありません(ポート転送による)。あなたは、incommingパケットのアドレスが私たちが送信したパケットのアドレスと同じでなければならないことに言及しました。私は理由を理解していますが、穴あけを防ぐのではないでしょうか?私は、穴あけの考えは、クライアントがパブリックポートをサーバーに公開し、サーバーがクライアントに互いのことを伝え、クライアントがそれらのポートでそれぞれ話すことができるということです。 – KaiserJohaan

+0

@カイザー、なぜ穴あけを防ぐのですか?確かに、あるクライアントが別のクライアントにデータグラムを送信すると、おそらく破棄されます。しかし、他のクライアントは、最初の側のNATが以前に送信されたパケットへの応答であると信じているので、応答を送信します(これは通信の試みがあったことをサーバーから認識します)。 (そして反対側で落としましたが、最初の側のNATはそれについて知りません)。あなたは穴あけにはるかに多くがあるので、私にリンクを与えた記事を読むべきです。 –