私は多くの同様の質問とそれに対応するウィキペディアの記事(NATトラバーサル、STUN、TURN、TCPホールパンチング)を見て読んだことがありますが、圧倒的な量の情報は私の非常に単純な問題を本当に助けてくれません:
P2Pアプリケーションを作成していますが、NATの背後にあるアプリケーションの2人のユーザーが相互に接続できるようにしたいと考えています。接続は信頼できる(TCPの信頼性に匹敵する)必要があるため、UDPに切り替えることはできません。このソリューションは、再構成せずに今日の一般的なシステムで機能するはずです。それが役立つ場合、データ全体をプロキシする必要がない限り(たとえば、ピアの外部(WAN)IPアドレスを取得するため)、ソリューションには接続可能なサードパーティが関与する可能性があります。
私の知る限り、私の唯一の選択肢は、「信頼できるUDP」ライブラリとUDPホールパンチングを使用することです。このための(C / C ++)ライブラリはありますか?関連する質問でenetを見つけましたが、それはソリューションの前半のみを処理します。
他に何か?私が見たもの:
- Teredoトンネリング-オペレーティングシステムやユーザー構成からのサポートが必要です
- UPnPポートフォワーディング-UPnPはどこにも存在/有効ではありません
- TCPホールパンチングは実験的なもののようで、特定の状況でのみ機能します
- SCTPはIPv6よりもさらにサポートされていません。SCTP over UDPは、非常に信頼性の高いUDPです(上記を参照)
- RUDP-主流のサポートはほとんどありません
- STUN、STUNT、TURN、ICEについて私が理解できたことから、これらのどれも私をここで助けてくれませんでした。