第三者UDPを使用したホールパンチング

第三者UDPを使用したホールパンチング

これで、サードパーティのサーバーなしで2人の間で直接「UDPホールパンチング」を行うことは非常に難しく、時には不可能であることを確信しています。ここに質問してくださいそして私の答えは以下にあります)。

それでは、UDPホールパンチングを行う方法は?そしてサードパーティのサーバー?

例:

peerA$ nc -u -p 7777 serverIP 8888

このパケットはPeerAのNATによって変換され、localnetworkIPソースpeerApublicIPポートは7777から55123に変換されます。

サーバーはこのパケットが到着するのを見て、PeerAのパブリックIP +ポート55123を覚えています。この情報(ピアAのパブリックIP + 55123)をピアBに提供し、その逆も同様です。 NATによって8888から42000ポートに変換されたことを覚えています)。

これでPeerAはこれを行うことができます

peerA$ nc -u -p 7777 peerBpublicIP 8888    # will be dropped by peerB but at least it will 
                                           # punch a hole in peerA's firewall, port 55123

ピアBは、ピアAに接続するために宛先ポート55123を使用する必要があることを知っています(この情報はサーバーによって提供されます)。

peerB$ nc -u -p 8888 peerApublicIP 55123

質問:これは、次の仮定の下で動作するようです。

もし

peerA$ nc -u -p 7777 serverIP 8888

ソースポートを7777から55123に変換します。それから

peerA$ nc -u -p 7777 peerBpublicIP 8888

また、ソースポート7777を55123に変換します。

しかし、ほとんどのルーターはこんな感じですか?

そうでない場合(たとえば、NATはサーバーに接続すると7777を55123に変換しますが、NATはピアBに接続すると7777を51098に変換します)UDPホールパンチングはどのように機能しますか?

長い話を短く:より一般的には、ピアA、ピアB、およびサーバーを含む単にを使用してUDPホールパンチングを実行する方法は何ですかnetcat(後者は最初にのみ使用され、後で使用されません)。

ノート:読みましたこの記事しかし、ポート翻訳が完了したかどうかはわかりません。同じようにサーバーに接続してからピアBに接続するとき。

ベストアンサー1

おすすめ記事