私はUDPでの穴あけに関するいくつかの質問があります。 wikiに基づいてhttp://en.wikipedia.org/wiki/UDP_hole_punchingUDP穴あけ
1)NATの後ろにあるクライアント、NAT以外のサーバの間でUDPセッションをセットアップするには、クライアントはサーバにパケットを送信するだけで済みます。セッションは両方の方法で許可されています(& receieveを送信します)。クライアントがサーバーからも受信できることを意味します。
2)UDPホールパンチング:2つのクライアントが最初にサーバーに接続した後、サーバーはクライアントポート/ IPを他のクライアントに与えます。そのため、クライアントはこれらのポートでパケットを相互に送信します。これは厳しいですか?
3)#2が真の場合、ファイアウォールは、そのポートで接続を確立する際に使用されたIP以外のIPからデータを受信できるのはなぜですか?簡単にフィルタリングする必要がある大きなセキュリティホールのように聞こえますか?私はソースIPのなりすましがそれを欺くことを理解していますが、これは何ですか?
事前のおかげで、 ヨハン
私はそれを理解しているので、ユーザーはデータを送信するときに2つの異なるポートを使用します。最初にbind()(クライアントの「プライベート」ポート)と実際に送信するポート(クライアントの「パブリック」ポート)を持つポート。だから私は、他のクライアントのパブリックポートは何か、プライベートポートと通信しようとするとうまくいかないことを各クライアントに伝える必要がありますか? (例えば、私はすべてのポートを12340にバインドします(他のクライアントは他のクライアントにIP + 12340を送信できません) – KaiserJohaan
@ Kaiser、通常は動作しません。どのパブリックポートがプライベートポートにマップされているのか把握する必要があります。私が理解する限り、最初にこのプライベートポートから何かをサーバーに送ることによって行われます。そして、サーバーはこのポートを両側に伝えます。しかしプライベートIPを使ってプライベートポートに通信しようとする価値はまだあります。両方のクライアントが誤って同じNATの後ろにいると、LAN経由で通信できるようになります。 –