web-dev-qa-db-ja.com

bittorrentのようなピアツーピアプロトコルの場合、NATトラバーサルはどのように機能しますか。

NATトラバーサル、STUN、TURN、ICEとその使用について知っています。これらがビットトレントのようなピアツーピアファイル共有アプリケーションに実装されているかどうかを知りたいです。トラッカーがNATの背後にあるピアを促進するかどうかSTUNを使用した直接接続の作成またはTURNを介したリレーを支援することにより、相互に通信します。分散ハッシュテーブル(DHT)の場合、1つのピアが背後にある他のピアとどのように通信するかNAT?

15
user1887464

BitTorrentは、群れの特定のメンバーに接続する必要はありません。2つの特定のエンドポイントが相互に通信したいp2pチャットプロトコルではありません。気になるのは、群れの接続グラフの接続度が十分に高いことだけです。

言い換えると、NATの背後にあるクライアントが相互に通信できるようにすることはある程度望ましいことですが、トラフィック転送などの主要なリソースがその目標に費やされるほどではありません。失敗はオプションです。

したがって、sip/turn/etcは使用しません。

さまざまなクライアントが、次のアプローチのいくつかの組み合わせを使用して、バルクトランスポート接続の接続を改善します。

  • [〜#〜] pcp [〜#〜]NAT-PMP または PnP-IGD ゲートウェイとのネゴシエーション
  • TCP)の場合、 送信元ポートバインディング (送信接続)および ポート再利用 (リッスン+送信)ソケットオプションを使用して、同じローカルを使用できます悪用するすべての接続のポート エンドポイントに依存しない(EIM)NATマッピング (フルコーンNATとも呼ばれます)。
  • 同様に、UDPの場合、ピアごとに1つのソケットを作成するのではなく、単一のソケットを sendto / recvfrom または同等のAPIと組み合わせて使用​​して、単一のポートを介してすべてのアプリケーションレベルの接続を多重化する必要があります。 。
  • インクルード 主に 文書化されていないut_holepunch extension スタンサーバーの代わりに相互に到達可能なスウォームメンバーを使用します。
  • 前のポイントと組み合わせて使用​​できるオプションのUDPベースのトランスポートプロトコル( µTP )。一般に、NATトラバーサルはUDPを使用すると簡単に実現できます。
  • IPv6機能シグナリング 、これにより、原則として、クライアントは接続をアップグレードしてから、PEX/DHTを介してv6ピアについてゴシップすることができます。

DHTの場合、最初の2つのポイント(ゲートウェイネゴシエーションとポートの再利用)のみが使用されます。単一の要求/応答サイクルでNATトラバーサルを試行するオーバーヘッドは、100%を超えるため、その価値はありません。

20
the8472