Java を使用してホスト間で p2p ファイル転送を行うアプリケーションを構築しようとしています。パブリック IP を持つホストでは問題なく動作しますが、自宅のコンピューターでテストすると失敗しました。
次に、家のすべてのコンピューターが同じ IP を持っていることがわかりました。したがって、私の ISP は NAT オーバーロードを使用していると結論付けます。私の ISP がそれを行う場合、他の多くの ISP も NAT を行う可能性があります。アプリケーションが NAT の背後でも機能することを望みます。
いくつかの調査を行ったところ、UDP ホール パンチングは TCP ホール パンチングよりもはるかに優れているため、この場合は UDP の方が適している可能性があることがわかりました。本当ですか?正直に言うと、私は TCP を使用することを好みますが、UDP がうまく機能する場合は、UDP を使用する必要があります。(UDP が信頼できないことはわかっています。UDP の上にいくつかの rdt プロトコルを構築する必要があります。) または、見逃した他の優れたアルゴリズムはありますか?