分散化したいp2p実装をコーディングしていますが、ビットトレントなどのプロトコルでDHTがどのように機能するかを把握するのに問題があります。トラッカーがない場合、クライアントはピアがどこにあるかをどのように知るのですか?ピアは実際のトレントファイルに保存されていますか?
4 に答える
トラッカーレス/DHTトレントでは、ピアIPアドレスはBitTorrent情報ハッシュをキーとして使用してDHTに保存されます。トラッカーは基本的にput/getリクエストに応答するため、この機能はDHT(分散ハッシュテーブル)が提供するインターフェイスに正確に対応します。infohashによってDHTのIPアドレスを検索して保存できます。
したがって、「get」リクエストはBT infohashを検索し、IPアドレスのセットを返します。「put」は、特定の情報ハッシュのIPアドレスを格納します。これは、ピアIPアドレスのディクショナリを受信するためにトラッカーに対して行う「アナウンス」リクエストに対応します。
DHTでは、ピアはランダムに割り当てられ、キースペースのごく一部に属する値を格納します。ハッシュにより、キーが参加しているピア間でランダムに分散されることが保証されます。DHTプロトコル(Kademlia for BitTorrent)は、特定のキーのIPアドレスリストの維持を担当するピアにput/get要求が効率的にルーティングされることを保証します。
一般的な理論は、ウィキペディアのKademliaに関する記事に記載されています。bittorrentで使用される特定のプロトコル仕様はここにあります:http ://wiki.theory.org/BitTorrentDraftDHTProtocol
bittorrentとDHTで起こることは、最初にbittorrentがトレントファイルに埋め込まれた情報を使用して、DHTからトラッカーまたはノードのセットの1つに移動することです。次に、1つのノードが見つかると、他のノードを見つけ続け、それを維持するための集中トラッカーを必要とせずにDHTを使用し続けることができます。
元の情報は、後でDHTを使用するためのブートストラップです。
DHTノードには、ノードIDと呼ばれる一意の識別子があります。ノードIDは、BitTorrentinfo-hashesと同じ160ビットスペースからランダムに選択されます。近さは、ノードIDのルーティングテーブルを比較することによって測定されます。ノードが近いほど、詳細になり、最適な結果が得られます。
その場合、単純な符号なし整数を使用した前身の「Kademlia」よりも最適になります。distance(A、B)= | A xor B | 値が小さいほど近くなります。XOR。安全ではないことに加えて、そのロジックには欠陥がありました。
クライアントがDHTをサポートしている場合、0x09を含む8バイトが予約され、その後にUDPポートとDHTノードを含む2バイトのペイロードが続きます。ハンドシェイクが成功した場合、上記は続行されます。