1

私はすでに NAT トラバーサルについて調査を行っており、P2P アプリケーションについて Web からいくつかの提案を得ています。しかし、私の場合は、従来の P2P アプリケーションとは多少異なります。私は既に 1 つの公開サーバーを持っています。既知の公開サーバーから NAT の背後にあるデバイスにアクセスする必要があるだけです。

私のケースに関する詳細情報は次のとおりです。

1.PC-A have public IP
2.PC-B is behind NAT, does not have public IP. In my case PC-A and PC-B is under full control.
3.PC-C is also behind NAT, and could be reached from PC-B

問題は次のとおりです。

  1. TCP プロトコル (または UDP) を使用して PC-A から PC-C に到達できるように、公開サーバー PC-A と PC-B の間にトンネルを構築する方法はありますか?
  2. 特にJavaでは、すべてをプログラムで行う必要があることに注意してください。それができるライブラリはありますか?
4

1 に答える 1

0

PC-Aは、P2Pトークでは「リレー」と呼ばれることがよくあります。

基本的な原則は、ファイアウォールの背後にあるすべてのピア(この場合はPC-BとPC-C)がPC-Aへのアウトバウンド接続を確立することです。次に、PC-Aは接続を「リンク/結合」します。通常、これらの接続は、ファイアウォールに適したHTTPを介して行われます。したがって、PC-BがPC-Cと通信するための単純化されたシーケンスは、次のとおりです。

  • PC-BとPC-CはどちらもPC-AへのHTTP接続を確立します
  • PC-Bは、PC-Cにデータを送信することをPC-Aに通知します。
  • PC-Bは、アウトバウンド要求でそのデータをPC-Aに送信します
  • PC-Aは、同期応答でデータをPC-Cに転送します。

投げ込むと物事は(非常に)複雑になります

  • 認証
  • 安全
  • 冗長リレー
  • 接続タイムアウト、信頼性、回復など...

ほとんどのP2Pフレームワークは、ある種のリレーを実装しています。これは、JXTAおよびXMPPの場合です(ICEを確認してください)。

Ian Mc Ginnissは、Nettyプロジェクトの一部としてHTTPトンネルと呼ばれるものも開発したと思います(元々は、やや最適ではないJXTAリレーの代わりとして)

于 2012-08-27T14:12:22.053 に答える